Личный блог Suvan`a.

Работая и играя с Linux... И что из этого иногда получается.

Защита SUDO.

Рубрика: Безопасность -> Основные меры защиты Linux
Метки:
Вторник, 12 мая 2009 г.
Просмотров: 7852

     Параметры по умолчанию.

     Полный список установок команды sudo можно вывести с помощь опции -V (запускать программу нужно от имени пользователя root):

# sudo -V

Sudo version 1.6.8p12

Authentication methods: 'pam'

Syslog facility if syslog is being used for logging: auth

Syslog priority to use when user authenticates successfully: notice

Syslog priority to use when user authenticates unsuccessfully: alert

Ignore '.' in $PATH

Send mail if the user is not in sudoers

Use a separate timestamp for each user/tty combo

Lecture user the first time they run sudo

Require users to authenticate by default

Root may run sudo

Set $HOME to the target user when starting a shell with -s

Allow some information gathering to give useful error messages

Visudo will honor the EDITOR environment variable

Set the LOGNAME and USER environment variables

Length at which to wrap log file lines (0 for no wrap): 80

Authentication timestamp timeout: 5 minutes

Password prompt timeout: 5 minutes

Number of tries to enter a password: 3

Umask to use or 0777 to use user's: 022

Path to mail program: /usr/sbin/sendmail

Flags for mail program: -t

Address to send mail to: root

Subject line for mail messages: *** SECURITY information for %h ***

Incorrect password message: Sorry, try again.

Path to authentication timestamp dir: /var/run/sudo

Default password prompt: %p's password:

Default user to run commands as: root

Path to the editor for use by visudo: /usr/bin/vi

When to require a password for 'list' pseudocommand: any

When to require a password for 'verify' pseudocommand: all

File containing dummy exec functions: /usr/lib/sudo/sudo_noexec.so

Environment variables to check for sanity:

  LANGUAGE

  LANG

  LC_*

Environment variables to remove:

  PERL5OPT

  PERL5LIB

  PERLLIB

  JAVA_TOOL_OPTIONS

  SHELLOPTS

  PS4

  BASH_ENV

  ENV

  TERMCAP

  TERMPATH

  TERMINFO_DIRS

  TERMINFO

  _RLD*

  LD_*

  PATH_LOCALE

  NLSPATH

  HOSTALIASES

  RES_OPTIONS

  LOCALDOMAIN

  CDPATH

  IFS

Local IP address and netmask pairs:


     Это — установки по умолчанию. Они могут быть изменены с помощью директивы Defaults. Более подробно описано в справочной системе.

     Отрицание.

     SUDO дает возможность использования символа отрицания (!) для команд:

pete potato=/usr/bin/su [!-]*, !/usr/bin/su *root*

     Это правило означает, что пользователю pete разрешено выполнять на машине potato команду su для любого пользователя, кроме root.

     Ограничение аргументов команд.

     Нужно убедиться, что данные пользователям команды не могут быть неправильно использованы с целью получения полных полномо­чий пользователя root. К примеру, если какому-то пользователю разрешить запускать программу adduser (useradd), то что ему может помешать создать новую учетную запись с правами root? После того, как такая учетная запись будет создана, он войдет под ней в систему и сможет сделать все, что захочет - даже стереть SUDO-записи в файле /var/log/messages .

     Таким же образом пользователь, который отвечает за DNS и которому было разрешено от имени root редактировать файл конфигурации DNS и файлы зоны с помощью редактора vi, сможет изменить свои полномочия в файле /etc/sudoers или непосредственно отредактировать файлы /etc/passwd и /etc/shadow.

     Перед тем, как будет предоставлен SUDO-доступ к определенной команде, нужно убедиться, что эту команду нельзя использовать против системы. Нужно помнить, что даже more или less можно использовать против системы, к примеру, для просмотра файла /etc/shadow. Казалось бы - это простые программы. А они, оказыва­ется, дают возможность выполнять любую команду оболочки, если при просмотре файла ввести команду !command, к примеру, !cat /etc/shadow.

     SUDO дает возможность контролировать не только программы, которые разрешено использовать пользователю, но и передаваемые им аргументы. Рассмотрим это на примере команды kill. Типичное ее использование - это отправка процессу сигнала SIGHUP (kill -1 или kill -HUP) для того, чтобы он снова прочитал файл конфигурации, или сигнала SIGKILL (kill -9 или kill - KILL) для завершения процесса. Следовательно, нужно разрешить ис­пользование данной программы только с этими параметрами, а все осталь­ные - запретить:

DNSADMIN = /bin/kill -1, /bin/kill -HUP, /bin/kill -9, /bin/kill -KILL

     Протоколирование.

     SUDO записывает все свои действия, а также действия использующих sudo пользователей в файл /etc/log/messages. Для просмотра SUDO-действий нужно ввести команду:

# grep sudo /var/log/messages

May 28 22:34:19 dhsilabs sudo: pete : TTY=pts/4; PWD=/home/pete; USER=root; COMMAND=list

May 28 22:34:36 dhsilabs sudo: pete : TTY=pts/4; PWD=/home/pete; USER=root; COMMAND=/bin/kill -9 2989

     Разобраться с записями протокола несложно: каждая запись содержит название пользователя, команду, которую он выполнял, и временную метку (время выполнения команды). Если пользователь попытается ввести недопустимую для него команду, SUDO все запишет в протокол.

     Можно настроить SUDO так, чтобы он отправлял сообщение на е-mail адрес в случае, если кто-то попытается нелегально использовать команду sudo. Возможны следующие опции:

  • mail_always — сообщение будет отправлено при каждой попытке пользователя выполнить команду;
  • mail_badpass — сообщение будет отправлено, если пользователь ввел неправильный пароль при использовании sudo;
  • mail_no_user — сообщение будет отправлено, если пользователь, который ввел команду sudo, не указан в файле /etc/sudoers;
  • mail_no_host — сообщение будет отправлено, если пользователь прописан в /etc/sudoers, но выполняет команду с неразрешенного узла (который не прописан в /etc/sudoers);
  • mail_no_perms — когда пользователь ввел неразрешенную для него команду.

     Пример:

Defaults mail_no_persm Defaults mail_no_badpass

     Для организации самого процесса отправки сообщения нужно использовать следующие опции:

  • mailerpath — полный путь к MTA. По умолчанию используется sendmail.
  • mailerflags — параметры программы отправки сообщения, по умолчанию -t.
  • mailto — получатель сообщения, по умолчанию root.
  • mailsub — тема сообщения. По умолчанию *** SECURITY INFORMATION for %h ***, где %h - это имя узла.

     Например:

Defaults mailerpath="/usr/lib/sendmail" Defaults mailto = "pete@localhost"