Работать в Линуксе под суперпользователем (рутом) категорически не рекомендуется, но при обычной работе все же иногда необходимо выполнять административные задачи. Для этого существует 3 способа:
1. В одной из виртуальных консолей или Х-терминалов (xterm, konsole и т.д) залогиниться рутом, а после выполнения нужных команд выйти.
2. Используя команду su, временно стать рутом на одной из консолей, в которых вы уже вошли как обычный пользователь, после выполнения нужных команд выйти.
3. Используя команду sudo, просто выполнить нужную команду.
У этих способов есть свои плюсы и минусы.
Для 1-го способа нужна свободная виртуальная консоль либо еще один Х-терминал, тогда как 2-й и 3-й способы временно используют имеющуюся.
1-й и 2-й способы запускают новую командную оболочку, что позволяет выполнить несколько команд, но для выполнения всего одной команды (напрмер, редактирования файла конфигурации или выполнение make install) гораздо удобнее 3-й способ, когда команда вводится сразу, а после ее выполнения не надо делать выход из оболочки.
А главное достоинство 3-го способа - его очень высокая гибкость и настраиваемость. Правда, сразу после установки системы без настройки команда sudo пользователю недоступна.
Теперь подробнее.
Команда su запускает в текущей консоли командную оболочку c правами другого пользователя, по умолчанию - рута. При этом необходимо ввести пароль этого пользователя. Запуск su должен обязательно производиться с дефисом в качестве параметра:
$ su -
При этом обновляются переменные окружения $HOME и $PATH, т.е. домашним каталогом становится /root, а в $PATH добавляются /sbin и /usr/sbin. При запуске su без дефиса $HOME остается равным домашнему каталогу пользователя, который запускал эту команду, и в результате работы программ, запущенных из-под su, туда могут быть записаны файлы (например, конфигурации этих программ) с правами рута, что может привести к ошибкам и странностям в дальнейшей работе.
Чтобы вернуться в оболочку обычного пользователя, нужно дать команду exit, logout или нажать Ctrl-D.
Команда sudo позволяет запустить одиночную команду с правами другого пользователя (по умолчанию - рута), при этом вводится пароль (если не включен беспарольный запуск) пользователя, который запускает sudo (а не того, от чьего имени запускается команда, в отличие от su). По умолчанию никто не имеет права запускать что-либо. Поэтому для начала пользования sudo необходимо ее настроить. Настройки хранятся в файле /etc/sudoers. Настоятельно рекомендуется редактировать этот файл командой visudo (эта команда проверяет синтаксис файла перед его сохранением). О гибких настройках sudo можно почитать в man sudoers, но мы рассмотрим несколько наиболее простых и интересных примеров.
ALL ALL = (ALL) ALL
Самый простой способ настройки sudo, но не самый удачный с т.зр. безопасности. Мы разрешаем всем пользователям запуск любой команды от любого имени. Рассмотрим, как можно ограничить эту свободу.
1-е поле в строке - это список пользователей и/или групп, к которым применяется данная строка. Может быть ALL (все), имя_пользователя, %имя_группы или #числовой_идентификатор_пользователя.
%wheel ALL = (ALL) ALL
Мы разрешаем всем членам группы wheel (надо включить туда себя) запуск любой команды от любого имени. Так более правильно, при этом в группу %wheel включаются только разрешенные пользователи.
2-е поле - имя машины, с которой можно выполнять команды. Имеет значение только при использовании сетевого входа в систему.
3-е поле (в скобках) - список пользователей, от имени которых можно выполнять команду. Поскольку обычно sudo используют для запуска программ от имени рута, это поле используется не очень часто.
4-е поле - команда, которую позволено выполнять. Здесь, как и в остальных полях, можно указывать список команд через запятую.
Любой пользователь может командой sudo -l узнать, какие команды ему разрешено выполнять.
При запуске sudo запрашивается пароль (пользователя, запустившего команду). В течение 5 минут (этот интервал можно изменить) после последнего запуска sudo его можно запускать еще раз уже без пароля. Можно в /etc/sudoers в нужных строках поставить после знака = тэг NOPASSWD:, тогда команды, указанные в этой строке, могут выполняться без пароля.
ALL ALL = NOPASSWD: (ALL) /sbin/shutdown, /sbin/reboot
Позволяет выключать и перезагружать компьютер любому пользователю без указания пароля, командами sudo /sbin/shutdown и sudo /sbin/reboot соответственно (другие способы выполнения этого будут рассмотрены в следующей статье).
По умолчанию, все успешные и неуспешные попытки выполнения команды sudo (включая имя пользователя и полную команду) регистрируются в системном журнале и могут быть отправлены по почте системному администратору.
При настройке su и sudo в плане ограничения доступа пользователям надо быть осторожным, т.к. неправильно настроенное sudo может позволить пользователю запустить с правами рута любую команду. В частности, даже при отсутствии у пользователя прав на su возможны такие команды, как sudo bash, sudo su, sudo mc или запуск какой-либо программы, позволяющей временный выход в оболочку (например, vi и команда :sh).