Sudo. Немного практики
- Подробности
- Опубликовано 21.03.2016 05:24
Раньше для повышения привелегий повсеместно использовался su (да и сейчас нередко используется). Введите su в командную строку — и у вас спросят пароль root, введете верно и вуаля — теперь вы root, пока не введете exit. Но не всех устраивало, что пароль суперпользователя используется так часто — будь у вас с десяток доверенных пользователей (а как бы правильно не задавались права на файлы — иногда всё же нужно перейти «за границы дозволенного» и выполнить необычную, но и не критичную команду), периодически использующих su и знающих заветный пароль — он запросто мог потеряться и попасть кому-либо вне круга доверенных лиц. Хотелось бы не использовать рутовый пароль для каждого действия вне своей группы и пользователя, более ловко разграничить права для каждого, и прямо указать, какие команды запускать можно, а какие нельзя никому, кроме рута. Так и появился sudo.
Для начала, установите sudo из репозиториев вашей системы:
sudo pacman -S sudo
Для ArchLinux, или:
apt-get install sudo
Для debian.
После установки, появится файл /etc/sudoers — его-то мы и будем редактировать. Крайне важно не допускать ошибки при его правке — поэтому лучше воспользоваться visudo — утилитой, которая проверяет /etc/sudoers на ошибки, прежде чем применить изменения. Однако, можно обойтись и обычным nano или вашим любимым редактором (запущеным от рута) — просто не допускайте ошибок вплоть до каждого пробела. Также, рекомендуется прочитать страницы в man — man sudo и man sudoers.
Также, следите за тем, чтобы права на редактирование /etc/sudoers всегда были только у root — думаю, вы понимаете насколько большой дырой в безопасности может стать этот файлик, если доступ к нему будет у кого-попало.
Итак, найдите в /etc/sudoers строки:
## User privilege specification
##
root ALL=(ALL) ALL
Простейшая конфигурация, позволяющая вашему пользователю запускать любые команды с помощью sudo, от имени суперпользователя и даже без запроса пароля:
root ALL=(ALL) ALL
[ваш_пользователь] ALL=(ALL) NOPASSWD: ALL
Но она крайне неверна, ведь дела безопасности в вашей системе станут ничуть не лучше, чем без sudo — лишь избавят вас от необходимости каждый раз заходить в оболочку root, а злоумышленнику даже не потребуется пароль root.
То же, но с запросом пароля пользователя (именно пользователя, а не root):
[ваш_пользователь] ALL=(ALL) ALL
Так уже лучше — теперь при первом вводе sudo у вас спросят ваш пароль, и его больше не нужно будет вводить в течение сеанса (можно задать время действия пароля, или заставить пользователей вводить пароль каждый раз, о чем позже), к тому же, зная свой пароль, вы можете запускать вообще все команды. Можно оставить такую конфигурацию — она не критична, но и не идеальна. Посмотрим, что ещё можно сделать.
Можно сделать так, чтоб вместо пароля пользователя запрашивался пароль root. Для этого добавьте строку:
Defaults:[ваш пользователь] rootpw
Чтобы пароль спрашивался только для пользователя, или:
Defaults rootpw
Чтобы пароль спрашивался для всех.
Можно разрешить пользователю запускать от рута только определенные команды:
[ваш_пользователь] [ваш_хост]=команда1,команда2,команда3
После запятой пробел не нужен. Также, обратите внимание, что нужно писать не имена команд, а давать полную ссылку на её испольняемый файл, например
user my-debian=/usr/bin/pacman,/usr/bin/halt
И так далее.
C такой конфигурацией, пользователь user на хосте my-debian сможет от имени root только работать с пакетным менеджером pacman и выключать компьютер.
А вот с такой:
Defaults:user rootpw
user my-debian=/usr/bin/halt, NOPASSWD: /usr/bin/pacman
пользователь user на машине my-debian сможет без запроса пароля повышать полномочия, чтобы воспользоваться менеджером Pacman, но для выключения машины ему потребуется пароль root.
Можно добавить функций для определенного пользователя, например, ввести время действия пароля.
Для этого, в удобном месте добавьте строку:
Defaults:[ваш_пользователь] timestamp_timeout=время_в_минутах
Можно также вместо времени в минутах написать 0 — тогда пароль будет спрашивать каждый раз.
Все вышеперечисленные функции действуют и для групп, за тем исключением, что группы пишутся со знаком %группа, например, %wheel или %users.
И это далеко не всё, что можно сделать с sudo! Мы вкратце узнали о модели прав в Linux и научились их менять, а также ограничивать выполнение определенных команд для групп и пользователей - этого вполне достаточно, чтобы более-менее правильно настроить полномочия в вашей системе. Полный список функций sudo можно посмотреть на страницах в man. Но главное — никакой sudo не поможет, если вы сами не беспокоитесь о безопасности вашей системы и свободно распространяете пароль root. Всегда следите за тем, чтобы права на файлы были выставлены правильно (сам Linux заботиться о них должным образом, но от человеческого фактора это не спасает) — тогда никто не сможет получить ни доступ к вашим личным файлам, ни рычаги управления системой.