Что такое sudo

Что означает sudo. Как запустить команду с sudo

Пожалуй самой часто используемой программой при системном администрировании (если вы работаете под обычным пользователем, а не под root), является sudo. Главное назначение sudo — это выполнить команду от имени другого пользователя, обычно от root. Смысл выполнения команды от root в том, что у него повышенные права доступа и, применяя sudo, обычный пользователь может выполнить те действия, на которые у него недостаточно прав.

Простейший и самый распространённый вариант запуска команд с sudo:

sudo КОМАНДА

Если у КОМАНДЫ есть опции, аргументы, то для sudo не нужно делать какие-то дополнительные действия, например, помещать КОМАНДУ с опциями в кавычки или что-то ещё. Поставьте sudo и запускайте КОМАНДУ как обычно.

К примеру, я хочу выполнить:

ls -l /root

Поскольку я работаю под обычным пользователем, то у меня нет прав доступа в директорию /root и я получаю ошибку:

ls: невозможно открыть каталог '/root': Отказано в доступе

Чтобы эта команда сработала, достаточно её записать после sudo:

sudo ls -l /root

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

У программы su похожее назначение: запустить команду с подстановкой ID другого пользователя и группы. То есть одинакового результата можно добиться используя как sudo, так и su.

Различия sudo и su в следующем:

1. При использовании su необходимо сообщать пароль root обычному пользователю (но это можно обойти — подробности в этом разделе чуть ниже). При использовании sudo пользователь вводит свой собственный пароль.

2. У обеих команд есть интерактивный режим, то есть можно как бы выполнить вход от имени другого пользователя. Также обе программы, sudo и su, позволяют выполнять команды без интерактивного режима. В su интерактивный режим запускается по умолчанию (если не указана команда для выполнения):

su -

В sudo для входа в интерактивный шелл нужно использовать опцию -i:

sudo -i

Точнее говоря, всё немного сложнее, опция -i в sudo означает запустить оболочку входа в систему от имени указанного пользователя; также можно задать команду. Сравните:

sudo pwd
/home/mial

и

sudo -i pwd
/root

Также обратите внимание, что при указании команды не запускается интерактивная оболочка.

3. Использование sudo требует настройки, а именно: 1) добавление пользователя в группу, имеющую право использовать эту программу; 2) установка разрешений (перечисление команд, которые может запускать пользователь с sudo и т. д. При некоторых настройках, если пользователь не упомянут в конфигурационных файлах sudo, то он не может ей пользоваться. Программа su не требует настройки для каждого пользователя.

4. Разное отношение с окружением выполнения: смена текущей рабочей директории при входе в интерактивный режим su, сохранение текущей рабочей директории при выполнении отдельных команд с sudo и su. Сравните переменную окружения $HOME в команде

sudo echo $HOME
/home/mial

со значением $HOME в команде:

su -c 'echo $HOME'
/root

5. Некоторые конструкции оболочки работают с sudo не так, как вы ожидаете. Смотрите в качестве примера статью «Как использовать echo вместе с sudo». С su такой проблемы нет.

На самом деле, для подавляющего числа случаев использования этих программ, каких-то кардинальных различий между sudo и su нет, то есть вы можете выбрать любую из них для выполнения команды с повышенными привилегиями или от другого пользователя. Чаще используется sudo только по той причине, что её синтаксис короче: достаточно добавить sudo перед выполняемой командой, что касается su, то запуск одной команды требует конструкции su -c 'КОМАНДА'.

Но если нужно выполнить несколько команд с повышенными привилегиями, то достаточно войти в интерактивную консоль su:

su -

И затем перед командами уже ненужно ставить sudo.

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

sudo su -

Или использовать интерактивный режим самой sudo:

sudo -i

Как выполнить команду от имени другого пользователя

Запуск sudo:

sudo КОМАНДА

означает выполнить КОМАНДУ от имени пользователя по умолчанию. Таким пользователем обычно является root, но, на самом деле, может быть настроен другой пользователь по умолчанию.

Если нужно выполнить команду от имени иного, не root пользователя, то используйте опцию -u:

sudo -u ПОЛЬЗОВАТЕЛЬ КОМАНДА

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

Рассмотрим как создать пользователя, имеющего права запускать команды с sudo.

Чтобы создать пользователя с sudo в Debian, Linux Mint, Ubuntu, Kali Linux и их производных выполните команду вида:

useradd -m -G sudo -s /bin/bash -c "КОММЕНТАРИЙ" ПОЛЬЗОВАТЕЛЬ

В этой команде:

  • -m означает создать домашнюю директорию пользователя, если она не существует
  • -G sudo означает добавить пользователя в группу sudo
  • -s /bin/bash указывает оболочку входа пользователя
  • -c "КОММЕНТАРИЙ" указывает комментарий, который будет хранится в файле аккаунта — можно пропустить эту опцию
  • ПОЛЬЗОВАТЕЛЬ — это имя пользователя

Пример:

useradd -m -G sudo -s /bin/bash -c "Administrative User" admin


В Arch Linux, BlackArch и их производных для создания пользователя с sudo выполните команду вида:

useradd -m -g users -G wheel,video -s /bin/bash -c "КОММЕНТАРИЙ" ПОЛЬЗОВАТЕЛЬ

Обратите внимание, что в Arch Linux группа, дающее право на выполнение команд sudo, называется wheel, а не, собственно, sudo. Также мы добавили пользователя сразу в две группы, а не в одну, имя второй группы video. Если вы создаёте пользователя на системе без графического окружения, например, на безголовом сервере, то добавлять в группу video не нужно.

В CentOS для создания пользователя с sudo выполните команду вида:

useradd -m -G wheel -s /bin/bash -c "КОММЕНТАРИЙ" ПОЛЬЗОВАТЕЛЬ

Теперь независимо от вашего дистрибутива, запустите одинаковую команду, чтобы установить пароль для нового пользователя:

passwd ПОЛЬЗОВАТЕЛЬ

Конфигурационный файл sudo

Программа sudo считывает конфигурацию из файла /etc/sudoers. Если в файле /etc/sudoers раскомментировать директиву

includedir /etc/sudoers.d

то дополнительно настройки будут считываться из всех файлов в директории /etc/sudoers.d.

Не рекомендуется напрямую править файл /etc/sudoers, рекомендуется использовать команду

visudo

которая откроет файл для редактирования. Кроме прочих функций, данная программа проверит синтаксис, и если в нём присутствует ошибка, то файл не будет сохранён.

При запуске visudo по умолчанию будет открыт файл /etc/sudoers. С помощью опции -f можно указать расположение файла в другом месте, например в /etc/sudoers.d.

Как разрешить пользователи выполнять только определённые команды с sudo

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

В файл /etc/sudoers нужно добавить строку вида:

Имя_пользователя Имя_машины=(Реальный_пользователь:Группа) команда

В этой строке значения следующие:

  • Имя_пользователя: Это тот пользователь, кто инициировал выполнение команды с sudo
  • Имя_машины: Это имя хоста, где будет действительна команда sudo. Полезно если у вас много хостовых машин.
  • (Реальный_пользователь): Тот пользователь, от чьего имени будет выполнена команда.
  • Группа: группа, к которой принадлежит пользователь.
  • команда: команда или набор команд, разрешённых для запуска с sudo этому Пользователю.

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

admin ALL=(ALL:ALL) ALL

Другой вариант, я хочу разрешить пользователю admin выполнять только команды /home/admin/backup.sh и /usr/bin/apt, и выполнять их он может только от root, тогда мне нужно добавить строку:

admin ALL=(root:ALL) /home/admin/backup.sh,/usr/bin/apt

Обратите внимание, что если команд несколько, то они перечисляются через запятую без пробела.

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

%sudo ALL=(ALL:ALL) ALL

В зависимости от дистрибутива, она же может быть записана так:

%wheel ALL=(ALL) ALL
# ИЛИ
%wheel ALL=(ALL:ALL) ALL

Чтобы в действительности ограничить права пользователя, нужно закомментировать эту строку, то есть поставить перед ней символ #:

#%sudo	ALL=(ALL:ALL) ALL

Как узнать, какие sudo полномочия имеются у пользователя

Мы только что узнали, что у определённого пользователя могут быть ограниченные полномочия на выполнение команд с sudo. Как узнать, какие именно команды может выполнить пользователь или как проверить, сработали ли наши настройки в файле /etc/sudoers?

Для вывода всех разрешённых команд или для проверки определённой команды, используется опция -l. Но если не указать опцию -U с именем интересующего пользователя, то будут выведены данные для пользователя по умолчанию (root).

Пример проверки прав sudo для пользователя admin:

sudo -l -U admin

Пример вывода:

Matching Defaults entries for admin on HackWare:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User admin may run the following commands on HackWare:
    (root : ALL) /home/admin/backup.sh, /usr/bin/apt

Строка «User admin may run the following commands on HackWare» означает «пользователь admin может запускать следующие команды на HackWare».

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

sudo -l -U ПОЛЬЗОВАТЕЛЬ КОМАНДА

Если команда запрещена, то ничего не будет выведено:

sudo -l -U admin rm

Если команда разрешена, то будет выведен полный путь до файла:

sudo -l -U admin apt
/usr/bin/apt

Как настроить использование sudo без пароля

Данная настройка только для тех пользователей, кто действительно понимает зачем он это делает и какие риски безопасности это влечёт.

Чтобы отключить запрос пароля ПОЛЬЗОВАТЕЛЮ при вводе одной или нескольких КОМАНД с sudo:

ПОЛЬЗОВАТЕЛЬ ALL=(ALL:ALL) NOPASSWD: КОМАНДА1,КОМАНДА2,КОМАНДА3

Чтобы отключить запрос пароля ПОЛЬЗОВАТЕЛЮ при вводе любой команды с sudo:

ПОЛЬЗОВАТЕЛЬ ALL=(ALL:ALL) NOPASSWD: ALL

Чтобы отключить запрос пароля всем пользователям при вводе одной или нескольких КОМАНД с sudo:

%sudo ALL=(ALL:ALL) NOPASSWD: КОМАНДА1,КОМАНДА2,КОМАНДА3

Чтобы отключить запрос пароля всем пользователям при вводе любой команды с sudo:

%sudo ALL=(ALL:ALL) NOPASSWD: ALL

К примеру, чтобы разрешить пользователю admin выполнять команды /home/admin/backup.sh и /usr/bin/apt с sudo без необходимости ввода пароля, нужно добавить строку:

admin ALL=(ALL:ALL) NOPASSWD: /home/admin/backup.sh,/usr/bin/apt

Это конец первой части. Во второй части мы рассмотрим другие интересные настройки и опции команды sudo.

Рекомендуется Вам:

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (3 оценок, среднее: 5,00 из 5)
Загрузка...

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

Ваш адрес email не будет опубликован.