Делегирование роли администратора
Утилита sudo поможет делегировать некоторые системные полномочия другим людям, не предоставляя им root-доступ. Команды уполномоченного пользователя (после ввода им своего текущего пароля) выполняет исполняемый root-файл setuid.
Для редактирования списка пользователей, которые могут вызывать sudo, выполните команду /usr/sbin/visudo (имя root-полномочия). По умолчанию sudo-спи-сок утилиты выглядит примерно так:
root ALL=(ALL) PLL
К сожалению, многие системные администраторы стремятся использовать эту запись как шаблон и односторонне предоставляют неограниченный доступ остальным администраторам:
root ALL=(ALL) PLL
rob ALL=(ALL) ALL
jim ALL=(ALL) ALL
david ALL=(ALL) ALL
Поскольку существует возможность предоставить root-доступ, не предоставляя root-пароль, такой метод действительно полезен, но только в тех случаях, когда полностью доверяешь всем пользователям sudo. При правильном конфигурировании утилита sudo обеспечивает потрясающую гибкость предоставления доступа к любому количеству команд, запускаемых от имени произвольного UID.Синтаксис строки sudo:
Пользователь Машина=(эффективный пользователь) команда
Первый параметр определяет пользователя sudo. Следующий параметр — узел, для которого этот sudo-элемент является действительным. Такое уточнение позволяет использовать одну sudo-конфигурацию на множестве машин.
Предположим, что имеется разработчик, которому необходимо предоставить root-доступ только на машине разработки, но ни на одном из серверов:
peter beta.oreillynet.conHALL) PLL
Справа (в скобках) указывается эффективный пользователь, который может запускать определенные команды. Это очень удобно при предоставлении кому-либо возможности выполнения программного кода в качестве пользователя, не являющегося root-пользователем:
peter lists.oreillynet.conHmailman) PLL
И наконец, последний параметр позволяет указать все команды, которые может запускать этот пользователь:
david ns.oreillynet.com=(bind) /usr/sbin/rndc./usr/sbin/named
Если вы заметили, что вам приходится указывать слишком большой список команд (либо пользователей и машин), то можете воспользоваться синтаксисом псевдонимов sudo. Псевдоним (Alias) может использоваться на месте представляемого им элемента в любой строке sudo-конфигурации:
User_Alias ADMINS=rob,jim,david User_Ali as WEBMASTERS=peter,nancy Runas_Alias DAEMONS=bind,www,smmsp.i red
Host_Alias WEBSERVERS=www.oreillynet.com,www.oreilly.com,www.perl.com Cmnd_Alias PROCS=/bin/kill,/bin/killall,/usr/bin/skill,/usr/bin/top Cmnd_Alias APACHE=/usr/local/apache/bin/apachectl WEBMASTERS WEBSERVERS=(www) APACHE ADMINS ALL=(DAEMONS) ALL
Кроме того, есть возможность вместо перечисления пользователей указывать системные группы, что позволяет любому пользователю, относящемуся к данной группе, выполнять определенные для нее команды. Перед названием группы просто необходимо добавить символ %:
Uwwwadmin WEBSERVERS=(www) APACHE
Теперь любой пользователь, входящий в группу wwwadmin, может выполнить apachectl как пользователь www любой машины, являющейся web-сервером.
Одной из очень полезных функций является флаг NOPASSWD При его наличии перед выполнением команды пользователю не придется вводить пароль
rob ALL=(ALL) NOPASSWD: PROCS
Такая команда позволит пользователю rob, не вводя пароль, выполнять команды kill, kill all, skill и top на любой машине в качестве любого пользователя. И в заключение отметим, что sudo может стать удобной альтернативой для su по запуску команд при начальной загрузке без системных гс-файлов:
(cd /usr/local/mysql; sudo -u mysql ./bin/safemysqld &) sudo -u ww /usr/local/apache/bin/apachectl start
Для того чтобы это работало при загрузке системы, должна присутствовать строка по умолчанию: ALL=(ALL) AIL
Используйте утилиту sudo, принимая обычные меры предосторожности, относящиеся к двоичным файлам setuid, особенно если вы позволяете sudo запускать интерактивные команды (например, редакторы) или любые компиляторы и интерпретаторы. Необходимо учитывать, что sudo-пользователь может запускать обычные команды, как и обычный пользователь. В большинстве случаев это не является проблемой, и тем не менее желательно избегать предоставления неоправданно большого доступа к root-привилегиям.