SUDO

Sudo - стандартное средства наделить пользователя некоторыми административными правами доступа, без выдачи ему пароля на root. Sudo весьма полезна, когда на удаленном сервере работает много пользователей. Вызывается она просто:

# sudo /etc/init.d/dhcpd restart            # Запустить стартовый скрипт от имени root
# sudo -u sysadmin whoami                   # Запустить команду от имени другого пользователя

Конфигурация Sudo

Программа sudo конфигурируется в файле /etc/sudoers и зачастую только с помощью специального редактора visudo. Базовый синтаксис (разделитель в строке, знак "," ):

user hosts = (runas) commands          # В /etc/sudoers
  • users один или более пользователей или группа (например %wheel) для расширения прав доступа
  • hosts списак хостов (или ALL)
  • runas список пользователей (или ALL) от чьего имени могут выполняться команды. Заключается в ( )!
  • commands список команд (или ALL), которые можно запустить от имени root или от имени других пользователей

Кроме того существуют псевдонимы User_Alias, Host_Alias, Runas_Alias и Cmnd_Alias. Полезно, если конфиг слишком большой. Пример файла sudoers:

# cat /etc/sudoers

# Псевдонимы хоста, подсети или имена хостов
Host_Alias   DMZ     = 212.118.81.40/28
Host_Alias   DESKTOP = work1, work2

# Псевдонимы пользователя, список пользователей имеющих некоторые права доступа
User_Alias   ADMINS  = colin, luca, admin
User_Alias   DEVEL   = joe, jack, julia
Runas_Alias  DBA     = oracle,pgsql

# Псевдонимы команд, список полных путей до команд
Cmnd_Alias   SYSTEM  = /sbin/reboot,/usr/bin/kill,/sbin/halt,/sbin/shutdown,/etc/init.d/
Cmnd_Alias   PW      = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root # Not root pwd!
Cmnd_Alias   DEBUG   = /usr/sbin/tcpdump,/usr/bin/wireshark,/usr/bin/nmap
# Актуальные права доступа
root,ADMINS  ALL     = (ALL) NOPASSWD: ALL    # ADMINS может что-то делать без пароля
DEVEL        DESKTOP = (ALL) NOPASSWD: ALL    # Разработчики имеют полные права доступа на рабочих станциях
DEVEL        DMZ     = (ALL) NOPASSWD: DEBUG  # Разработчики могут отлаживать DMZ сервера.

# Пользователь sysadmin может использовать некоторые команды
sysadmin     DMZ     = (ALL) NOPASSWD: SYSTEM,PW,DEBUG
sysadmin     ALL,!DMZ = (ALL) NOPASSWD: ALL   # Какие-то права за рамками DMZ.
%dba         ALL     = (DBA) ALL              # Группа dba может работать от имени пользователя базы данных

# Все могут монтировать/размонтировать CDROM на рабочих станциях
ALL          DESKTOP = NOPASSWD: /sbin/mount /cdrom,/sbin/umount /cdrom