Временами требуется получить некоторые возможности администратора системы (root), но при этом нет возможности узнать пароль самого root. Например, нам для какой-нибудь необходимости нужно сделать так, чтобы определенный пользователь мог использовать привилегии root’а в ограниченном объеме.
Поможет нам в этом команда sudo, которая может дать ограниченные права суперпользователя некоторым юзерам для решения необходимых задач. Очень важно, что все эти действия логируются.
Простой пример – завершение работы. Заведем обычного пользователя и выполним команду shutdown:
Видим, что система не позволяет это сделать обычному пользователю. Ай-ай-ай, как нехорошо. Переключимся на рута и дадим пользователю привилегии на то, чтобы сделать перезагрузку.
Итак, входим в сеанс как root (это нужно сделать, чтобы был доступ к файлу /etc/sudoers, а вообще этот файл открывается командой visudo:
# visudo
Файл открывается в редакторе по-умолчанию.. У меня это, похоже на nano.
Здесь обратите внимание на четыре секции:
- Host alias specification: задает алиасы для узлов. Можем создать как бы подгруппу для различных хостов. Перечисление через символ запятой. Например, создадим строку в этом разделе:
Host_Alias LOCAL = localhost
- User alias specification: задает алиасы для пользователей. Например, создадим подгруппу пользователей:
User_Alias SHUTDOWN_USERS = dmitry
- Cmnd alias specification: задает алиасы для команд. Создадим набор команд для выключения компьютера:
Cmnd_Alias POWEROFF = /sbin/shutdown, /sbin/halt
- User privilege specification: задает непосредственно права пользователей. Вот тут и удобно использовать алиасы, созданные ранее. Все это создается исключительно для удобства. Например, создадим здесь:
SHUTDOWN_USERS LOCAL = POWEROFF
В конфигурации использованы все три созданные ранее алиаса. Фактический формат записи “Кто где = что делать”. У нас эта строка будет означать, что все пользователи, перечисленные в алиасе SHUTDOWN_USERS (а туда относятся: dmitry, но можно добавить и других, через запятую) на узле LOCAL (localhost, т.е. этот самый компьютер) могут выполнять команды из набора POWEROFF (/sbin/shutdown и /sbin/halt) с правами суперпользователя, но указывая не его пароль, а свой.
Проверяем файл:
Сохраняем и выходим.
Узнать свои права можно выполнив команду sudo -l:
$ sudo -l
Ну чтож, теперь попробуем выключить компьютер. Система нам это позволит, спросив наш пароль, пароль root для этого уже не нужен.
Полезные фишки:
- Если в описании привилегий после символа “=” вписать опцию “NOPASSWD:”, то пароль запрашиваться не будет;
Defaults:user timestamp_timeout=0
эта опция не позволяет паролю запоминаться (будет спрашивать каждый раз), по умолчанию равно 5 минутам
> Файл открывается в редакторе по-умолчанию.. У меня это, похоже на nano.
Повезло А в старой шляпе это будет vi, у которого, как известно, два режима — бибикать и всё портить. Тогда
VISUAL=nano visudo
Да VI в общем-то не такой уж плохой редактор. К нему просто нужно привыкать. Nano – ближе к классическим редакторам. Мне по душе все-таки ee (freebsd). На самый крайний случай mcedit
Спасибо! Всё получилось! А обязательно нужно быть членом группы судоерс?
Нет, не только не обязательно, но и не желательно! В этом файле есть строка – позволяет делать ВСЁ членам этой группы. (см ниже). Поэтому всё будет работать! Но не только те команды, что прописаны, а вообще все. Если это вам надо – добавьте себя в группу. Тогда и привилегии описывать больше не надо, все уже позволено.