Sudo sh c что за команда
Перейти к содержимому

Sudo sh c что за команда

  • автор:

Все, что вы хотели бы знать о команде SUDO

Оригинал: Todo lo que quisiste saber del comando SUDO
Автор: maslinux
Дата публикации: 17 июня 2019 г.
Перевод: В.Костромин
Дата перевода: 19 июня 2019 г.

Команда sudo позволяет нам запускать программы от имени другого пользователя, по умолчанию с правами суперпользователя root. Если вы проводите много времени в командной строке, sudo — это команда, которую вы будете использовать довольно часто.

Используйте sudo вместо того, чтобы запускать сессию суперпользователя, так как это безопаснее, потому что вы можете предоставить ограниченные административные привилегии отдельным пользователям, которые не знают пароля root.

В этом коротком руководстве мы расскажем, как использовать команду sudo.

Инсталляция SUDO

Пакет sudo установлен по умолчанию в подавляющем большинстве дистрибутивов GNU/Linux, но не во всех. Есть и такие, где он установлен, но вам об этом не сообщается. Мы расскажем, как его увидеть.

Чтобы проверить, установлен ли пакет sudo в вашей системе, откройте консоль, введите sudo и нажмите Enter. Если пакет sudo у вас установлен, система покажет краткое справочное сообщение, в противном случае вы увидите что-то вроде sudo command not found.
Если sudo не установлен, вы можете легко установить его, используя менеджер пакетов вашего дистрибутива.

Добавление пользователей в файл Sudoers

По умолчанию в большинстве дистрибутивов GNU / Linux для того, чтобы предоставить пользователю доступ к sudo, достаточно добавить этого пользователя в группу sudo, определенную в файле sudoers в каталоге /etc. Члены этой группы могут выполнять любую команду от имени root. Название группы может варьироваться от одного дистрибутива к другому. В дистрибутивах, основанных на RedHat, таких как CentOS и Fedora, имя группы sudo — wheel. Чтобы добавить пользователя к эту группу, можно выполнить команду:

usermod -aG wheel Pedro

В Debian, Ubuntu и их производных, выполнять команду sudo могут члены группы sudo:

usermod -aG sudo Pedro

В Ubuntu учетная запись пользователя root по умолчанию отключена из соображений безопасности, и пользователям рекомендуется выполнять административные задачи системы с помощью sudo. Первоначальный пользователь, созданный установщиком Ubuntu, уже является членом группы sudo, поэтому если вы работаете в Ubuntu, вполне вероятно, что пользователь, с которым вы вошли в систему, уже имеет привилегии sudo.

Если вы хотите разрешить конкретному пользователю запускать через sudo только определенные программы, вместо добавления пользователя в группу sudo, добавьте пользователей в файл sudoers.

Например, чтобы позволить пользователю alumno выполнять от имени sudo только команду mkdir, вызовите специальную версию редактора vim:

sudo visudo

и добавьте следующую строку:

alumno ALL=/bin/mkdir

В большинстве систем команда visudo открывает файл /etc/sudoers в текстовом редакторе vim. Если у вас нет опыта работы с vim, используйте nano.

Вы также можете разрешить пользователям выполнять команды sudo без аутентификации:

alumno ALL=(ALL) NOPASSWD: ALL

Как пользоваться sudo

sudo Опции.. Команда

Команда sudo имеет много опций, которые управляют ее поведением, но обычно она используется в самой простой форме, без опций.

Чтобы воспользоваться sudo, просто введите нужную вам команду с префиксом sudo:

sudo comando

где comando — это та команда, для выполнения которой вам нужно использовать sudo.

Sudo прочитает файл /etc/sudoers и проверит, предоставлен ли вызывающему её пользователю доступ к sudo. При первом использовании sudo в сеансе вам будет предложено ввести ваш пароль пользователя (не пароль root), и команда будет выполнена от имени пользователя root.

Например, для отображения всех файлов в каталоге /root можно использовать команду:

sudo ls /root

Время ожидания пароля

По умолчанию, если в течение пяти минут команда sudo не использовалась, вам придется ввести пароль повторно. Вы можете изменить время ожидания по умолчанию, отредактировав файл sudoers. Откройте файл с помощью nano:

Установите время ожидания по умолчанию, добавив следующую строку, где 15 — время ожидания, указанное в минутах:

Defaults timestamp_timeout=15

Если вы хотите изменить время только для конкретного пользователя, добавьте следующую строку, где user_name — это рассматриваемый пользователь.

Defaults:user_name timestamp_timeout=15

Запуск команды sudo от имени пользователя, отличного от пользователя root

Существует неправильное представление о том, что sudo используется только для предоставления полномочий root обычному пользователю. На самом деле, вы можете использовать sudo для выполнения команд от имени любого другого пользователя.

Опция -u позволяет вам выполнить команду от имени конкретного пользователя.

В следующем примере мы используем sudo для выполнения команды whoami от пользователя “alumno”:

sudo -u alumno whoami

Команда whoami напечатает имя пользователя, который выполняет эту команду:

Alumno

Как выполнять перенаправление с помощью sudo

Если вы попытаетесь перенаправить вывод команды в файл, к которому у вашего пользователя нет прав на запись, вы получите сообщение об ошибке «Отказано в доступе».

sudo echo "test" > /root/file.txt
bash: /root/file.txt: Permiso denegado

Это происходит потому, что перенаправление вывода «>» выполняется с правами пользователя, под которым вы вошли в систему, а не под пользователем, указанным в sudo. Перенаправление происходит до вызова команды sudo.

Одним из решений является вызов новой оболочки с правами root с помощью sudo sh -c:

sudo sh -c 'echo "test" > /root/file.txt'

Еще один способ — направить вывод команды, выполняемой обычным пользователем, в команду, выполняемую через sudo, как показано ниже:

echo "test" | sudo tee /root/file.txt

Sudo — очень мощная команда, но при обращении с ней нужно быть очень осторожным.

  • Как задать время сессии Sudo
  • Использование sudo в Ubuntu для начинающих пользователей
  • Sudo или не sudo? — вот в чем вопрос!
  • Приемы работы в Ubuntu. Глава 7: Безопасность
  • В чем разница между sudo и su
  • Организация безопасного редактирования системных файлов с помощью sudoedit в Linux
  • Фундаментальные основы Linux. Часть VII. Управление локальными учетными записями пользователей

Команда sudo в Linux — краткое пособие для новичков

Команда sudo является одной из базовых в Linux — ее знает каждый пользователь, который начинает знакомство с этой операционной системой. По сути, это один из основных инструментов для системного администратора или просто продвинутого юзера, который много времени проводит в терминале.

Експертний курс від laba: Стратегічний маркетинг.
Розвивайте бізнес з глибоким пониманням ринку.

В сегодняшней статье мы расскажем о том, что собой представляет эта команда и соответствующая утилита, для чего они используются, какие при этом есть подводные камни. Важно отметить, что эта утилита по умолчанию уже есть во всех популярных дистрибутивах, так что скачивать ничего не нужно.

sudo Linux

Источник: Анатолий Чилик

1. Что такое sudo

sudo — это важная для понимания утилита, она позволяет временно поднимать привилегии и выполнять задачи администрирования системы. Суть в том, что в каждом дистрибутиве Linux есть пользователь root, имеющий максимальные права суперпользователь, администратор .

Однако во имя безопасности его часто отключают, поскольку он действительно может делать все что угодно в рамках системы и в ряде случаев это может повлечь катастрофические последствия . А Linux, как известно, не спрашивает, хотите ли вы точно-точно-точно удалить самый важный файл — система просто молча удаляет его, после чего начинается веселый квест с восстановлением.

Потому, как сказано выше, учетная запись root по дефолту отключена, чтобы неопытные пользователи не смогли нарушить работу системы. А для некоторых административных задач, где требуются повышенные привилегии, используется временное решение — sudo .

Эту утилиту можно сравнить с UAC в Windows — тем самым контролем учетных записей пользователей. Только в Windows система сама сообщает, когда та или иная программа пытается внести изменения в систему, а в Linux команду надо вводить самому.

Потужний курс від skvot: blender.
Відкрийте для себе світ 3D-графіки.

Обратите внимание на курсы разработчиков от наших партнеров школы Robot Dreams и Mate Academy. Это идеальное начало вашего пути в IT.

2. Что использовать sudo или su?

Многие удивляются, когда узнают, что sudo — не единственная утилита, которая позволяет выполнять программы с повышенными привилегиями. На самом деле, есть две команды, позволяющие временно получать привилегии суперпользователя в системе. Это не только sudo , но еще и su . Однако между ними есть разница, которую нужно понимать.

Так, sudo позволяет выполнить одну или несколько команд от имени текущего пользователя. В этом случае нужен пароль как раз текущего пользователя, которому система временно повышает привилегии, а после выполнения команды — снова снижает их. Ввод дополнительных команд не требуется.

А вот команда su требует пароль уже целевого пользователя чаще всего это пользователь root . Фактически, эта команда включает режим суперпользователя и позволяет выполнять все действия с повышенными привилегиями, так что можно ненамеренно «уронить» систему. Важно, что здесь нужно принудительно выходить из su — набрать exit , logout или нажать комбинацию горячих клавиш Ctrl-D.

Само собой, что безопаснее использовать именно sudo , ведь эта команда выполняет только конкретные задачи с повышенными привилегиями, а не все. Также в этом случае вводится пароль текущего пользователя, а не root . В общем, правило «Не работай под root’ом» остается справедливым и здесь.

К слову, в Debian-подобных дистрибутивах есть хитрость — если вы хотите ввести несколько команд, но не вводить sudo перед каждой, то можно ввести sudo su . Просто не забудьте потом выйти с помощью exit , logout или Ctrl-D.

Коротко резюмируем теорию, прежде чем двинуться дальше к практике:

  1. Если вам нужно разовое выполнение команды — используйте sudo .
  2. Если нужно несколько команд — sudo su .

Інноваційний курс від robotdreams: Android Developer.
Творіть для мобільного світу.

  • Если же вы гуру Linux, можете рискнуть использовать только su . И не забудьте потом выйти!
  • Сразу залогиниться под root это уже совсем уровень джедая . Не рекомендуется для обычных задач, особенно в продакшен-системах.
  • 3. Синтаксис sudo

    Как и любая другая команда, в sudo есть свой синтаксис, который включает в себя несколько параметров, опций и так далее. В общем случае команда выглядит так:

    $ sudo опции программа параметры

    Использование sudo c модулем sh в Python

    Есть 3 способа использования команды терминала sudo для выполнения команд в скрипте, требующих прав суперпользователя. Они перечислены в порядке полезности и безопасности. В большинстве случаев следует просто использовать вариант sh.contrib.sudo() .

    sh.contrib.sudo()

    Так как команда sudo используется очень часто, разработчики модуля sh добавили версию этой команды в подмодуль contrib , чтобы сделать использование sudo более интуитивным. Версия contrib представляет собой обычную обертку для команды sh.sudo raw со специальным ключевым аргументом для ввода пароля суперпользователя, чтобы она работала правильно.

    Выполнение sh.contrib.sudo() через менеджер контекста with с вводом пароля через терминал:

    import sh with sh.contrib.sudo: print(ls("/root")) # [sudo] password for youruser: ************* # your_root_files.txt 

    Или, альтернативно, с помощью подкоманд:

    import sh print(sh.contrib.sudo.ls("/root")) # [sudo] password for youruser: ************* # your_root_files.txt 

    В приведенном выше примере вызов sh.contrib.sudo автоматически запрашивает пароль, используя под капотом встроенный модуль Python getpass.getpass() .

    Этот метод является наиболее безопасным, потому что он снижает шансы сделать что-то небезопасное, например, включить ваш пароль в скрипт python или сказать, что конкретный пользователь может выполнить что-либо внутри конкретного скрипта (метод NOPASSWD ).

    Примечание. sh.contrib.sudo не выполняет кэширование паролей, как это делает двоичный файл sudo . Это означает, что каждый раз, когда в скрипте запускается команда sudo , будет предложено ввести пароль.

    Также можно указать пароль к sh.contrib.sudo в виде строки:

    import sh password = 'password' with sh.contrib.sudo(password, _with=True): print(ls("/root")) 

    Предупреждение. Этот метод менее безопасен, потому что явно указывается пароль в скрипте python, а это плохая идея. Однако он более гибкий, поскольку позволяет получить пароль из другого источника, если конечным результатом является строка.

    /etc/sudoers NOPASSWD .

    С помощью этого метода можно использовать необработанную команду sh.sudo напрямую, потому что гарантировано, что система не будет запрашивать пароль. Для этого сначала необходимо настроить пользователя на получение привилегий выполнения root .

    Отредактируйте свой файл sudoers :

    $ sudo visudo # Добавьте или отредактируйте строку, # описывающую права доступа пользователя: yourusername ALL = (root) NOPASSWD: /path/to/your/program

    Добавляемая строка говорит о том, что при вводе команды терминала sudo пользователь yourusername на ВСЕХ ALL хостах сможет работать как (root) , и что не будет запрашиваться пароль NOPASSWD для выполнения /path/to/your/program .

    Предупреждение. Этот метод может быть небезопасным, если непривилегированный пользователь сможет редактировать этот сценарий и таким образом поместит что-то плохое в этот сценарий.

    Использование необработанной команды sh.sudo (которая преобразуется непосредственно в двоичный файл sudo ) без метода NOPASSWD возможно при условии, если самостоятельно подключить специальный ключевой аргумент. Этот метод обсуждается в основном в образовательных целях. Если вы потратите время на то, чтобы подключить ключевой аргумент к sh.sudo самостоятельно, то вы, по сути, воссоздали sh.contrib.sudo .

    import sh # пароль должен заканчиваться новой строкой my_password = "password\n" # `-S` говорит: "получите пароль от `stdin`" # метод `.bake` аналогичен `functools.partial()` my_sudo = sh.sudo.bake("-S", _in=my_password) # вызываем созданную функцию `my_sudo` # с зашитыми в нее параметрами my_sudo.ls("root") 

    По сути метод .bake делает то же самое что и functools.partial() .

    Использование аргумента _fg=True

    Еще один менее очевидный способ использования sudo — выполнить необработанную команду sh.sudo , но также вывести ее на передний план. Таким образом, sudo будет работать правильно, автоматически подключая stdin/out/err и запрашивая пароль, если он требуется. Однако недостатком использования _fg=True является то, что нельзя записать куда либо его вывод — все просто выводится на терминал.

    import sh sh.sudo.ls("/root", _fg=True) 
    • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
    • Передача параметров в команды модуля sh
    • Коды завершения и исключения модуля sh
    • Перенаправление вывода команды модуля sh
    • Фоновое выполнение команды с модулем sh
    • Конвейер в стиле Bash и модуль sh
    • Использование sudo c модулем sh
    • Использование ssh с модулем sh
    • Специальные ключевые аргументы модуля sh
    • Объект запущенной команды модуля sh
    • Класс Command() модуля sh
    • Частые вопросы по модулю sh

    Sudo — Основы командной строки

    В работе с командной строкой мы часто сталкиваемся с ситуациями, в которых необходимо повышать привилегии и выполнять команды от имени суперпользователя root . С некоторыми мы уже столкнулись, с другими познакомимся в следующих уроках:

    • Установка новых программ
    • Навигация по чужим директориям
    • Изменение прав доступа
    • Изменение содержимого в файлах, не принадлежащих текущему пользователю
    • Создание, редактирование и удаление файлов, когда не хватает прав текущего пользователя
    • Запуск программ, требующих повышенных привилегий

    В этом уроке обсудим, как стать другим пользователем. Для этого зайдите в систему и воспользуйтесь утилитой su (сокращение от substitute user или switch user). Когда-то такой способ был основным, но сейчас он устарел и не рекомендуется к использованию. Подробнее об этом можно прочитать в статье «Su или sudo?» из дополнительных материалов.

    Основной способ повышать привилегии в современных системах — утилита sudo (substitute user and do — дословно «подменить пользователя и выполнить»).

    Использовать sudo очень просто, достаточно написать эту команду слева от любой другой и выполнить. По умолчанию она пытается повысить привилегии до суперпользователя:

    # Нет прав на выполнение touch /etc/myfile touch: cannot touch '/etc/myfile': Permission denied # С `sudo` все работает sudo touch /etc/myfile # Видно, что владелец файла — это суперпользователь `root` stat /etc/myfile File: '/etc/myfile' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: ca01h/51713d Inode: 2761 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) # Нет прав на удаление rm /etc/myfile rm: remove write-protected regular empty file '/etc/myfile'? y rm: cannot remove '/etc/myfile': Permission denied # Опять помогла утилита `sudo` sudo rm /etc/myfile 

    В зависимости от настроек, утилита sudo попросит ваш пароль для входа или вообще откажется работать, сказав, что у вас нет права ее использовать. Как правило, в Ubuntu sudo спрашивает пароль и запоминает его на пять минут. На протяжении этого времени вы можете использовать sudo , не вводя пароль каждый раз.

    Иногда нужно выполнить команду из-под пользователя, отличного от root . Тогда придется добавить флаг -u :

    sudo -u nobody mkdir /tmp/test # Директория создана от имени пользователя nobody stat /tmp/test File: '/tmp/test' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: ca01h/51713d Inode: 4577 Links: 2 Access: (0755/drwxr-xr-x) Uid: (65534/ nobody) Gid: (65534/ nogroup) 

    Если нужно произвести сразу пачку действий от имени другого пользователя, можно запустить новую оболочку внутри текущей. Другими словами, мы стартуем новую сессию:

    # Команда `sudo` запросит пароль текущего пользователя sudo -i # Проверяем, что сессия запущена от суперпользователя id uid=0(root) gid=0(root) groups=0(root) 

    Главное — не забыть переключиться обратно после завершения необходимых манипуляций. Для этого наберите exit .

    Подводные камни

    Знание про sudo играет с новичками злую шутку. Каждый раз, когда они видят странные ошибки, то не пытаются разобраться, а пробуют запустить команду с sudo без параметров — то есть просто выполнить ее от суперпользователя. Часто такой подход срабатывает, но он создает еще больше проблем.

    Представим, что из-под sudo мы запустили команду, которая создает файлы и директории. В таком случае владельцем этих файлов становится суперпользователь. Все последующие обращения к этому файлу без sudo начнут выдавать ошибку «У вас нет прав доступа». Причем даже необязательно работать с этими файлами напрямую. Множество программ так или иначе обращаются к файловой системе для чтения конфигурационных и других файлов.

    Правильный выход из ситуации в каждом случае свой. В некоторых случаях sudo – это то, что нужно. В других случаях требуется изменить права (об этом в следующем уроке), а иногда и переустановить какую-нибудь часть системы.

    Общее правило может быть таким:

    • Все, что лежит в личных директориях пользователя, должно принадлежать этому пользователю
    • Все, что находится вне домашней директории пользователя и требует дополнительных прав, скорее должно запускаться с sudo , но бывают и исключения

    Рассмотрим, как это работает на практике:

    ls -la # Все содержимое домашней директории принадлежит одному пользователю # Сама директория пользователя принадлежит ему же # Родительская директория принадлежит суперпользователю drwxr-xr-x+ 117 mokevnin staff 3744 Feb 19 15:55 . drwxr-xr-x 5 root admin 160 Oct 12 19:15 .. -r-------- 1 mokevnin staff 7 Nov 21 2017 .CFUserTextEncoding -rw-r--r--@ 1 mokevnin staff 22532 Feb 8 00:04 .DS_Store 
    Дополнительные материалы

    Аватары экспертов Хекслета

    Остались вопросы? Задайте их в разделе «Обсуждение»

    Вам ответят команда поддержки Хекслета или другие студенты

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *