Как известно всегда сидеть под root’ом не хорошо, именно для распределения полномочий и создана sudo, а именно для запуска программ от имени другого пользователя. Таким образом, если сервер на FreeBSD обслуживается несколькими пользователями и у каждого своя задача, дальше которой он вникать не должен, то sudo — то что нужно.
Перейдем к установке sudo из портов FreeBSD. Выполняем:
cd /usr/ports/security/sudo
make config
Опции сборки:
Options for sudo 1.7.4.4_1
[ ] LDAP With LDAP support
[ ] INSULTS With all insults
[ ] DISABLE_ROOT_SUDO Disable root sudo
[ ] DISABLE_AUTH Disable authentication
[ ] NOARGS_SHELL Enable no arguments shell
Устанавливаем:
make BATCH=yes -C/usr/ports/security/sudo install clean
rehash
После того как встало, редактируем файлик конфигурации:
cp /usr/local/etc/sudoers /usr/local/etc/sudoers_0
ee /usr/local/etc/sudoers
В нём описаны привилегии пользователей.
По умолчанию там раскомментирована только одна строка:
root ALL=(ALL) ALL
которая позволяет пользователю root делать что угодно.
На самом деле root и так может делать что угодно, но раз написано, значит так надо.
Далее примеры строк для добавления в файл /usr/local/etc/sudoers.
1) Если надо разрешить выполнять все программы пользователям, входящим в группу wheel используя свой пароль, то надо вписать строку:
%wheel ALL=(ALL) ALL
2) тоже самое, что и пункт 1, только без запроса пароля, то добавляем строку:
%wheel ALL=(ALL) NOPASSWD: ALL
3) Соответсвенно если надо дать права выполнять любые команды одному пользователю, то дописываем:
user ALL=(ALL) ALL
где
user — имя пользователя в системе.
4) Если надо разрешить членам группы users(должна быть в системе) перезагружать freebsd, то вписываем:
%users localhost=/sbin/shutdown -r now
5) В случае если надо дать права пользователям, находящимся в разных группах, то этих пользователей можно объединить в одну группу, опять же используя файлик sudoers. Например, у нас 2-а пользователя с именами user1 и user2. В ОС FreeBSD они находятся в разных группах, но этим пользователям надо разрешить выполнять reboot. В таком случае сначала объединяем их в одну группу(назовём её REBUSER) строчкой:
User_Alias REBUSER = user1, user2
А теперь разрешаем группе REBUSER перезагружать ОС:
REBUSER ALL=/sbin/reboot
Примечание: символ % перед REBUSER в этом случае не нужен.
Пользователи user1, user2 конечно же должны присутствовать в системе.
/sbin/reboot — команда для перезагрузки
Если надо создать несколько групп, то действие повторяем:
User_Alias название_группы = пользователь_1, пользователь_2
так можно создать множество групп, каждой из которых дать только определённые права.
6) Теперь представим ситуацию, что этой же группе REBUSER надо выполнять не одну команду, а список определённый.
В таком случае надо добавить строки:
User_Alias REBUSER = user1, user2
Cmnd_Alias COMND = /usr/bin/kill, /sbin/reboot, /sbin/shutdown -r now
REBUSER ALL=COMND
здесь как раз в строке Cmnd_Alias перечислен список разрешённых комманд, объединённых произвольным названием «COMND».
Псевдонимов для комманд можно создать несколько, например:
Cmnd_Alias COMND1 = ...
Cmnd_Alias COMND2 = ...
Cmnd_Alias COMND3 = ...
И разрешить группе, только те, которые нужны, например:
REBUSER ALL=COMND1, COMND3
Примечание:
Названия псевдонимов (в примерах выше «REBUSER», «COMND») обязательно должны быть с большой буквы, иначе работать не будет.
Вот вобщем то и весь необходимый минимум.