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

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

Пакет SUDO.

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

Делегирование доступа root.

     Пользователь root обладает неограниченными правами в Linux-системе, из-за этого он должен обезопасить систему прежде всего от самого себя. Рекомендуется входить в систему и работать в ней как обычный пользователь, а когда действительно нужны права root, с помощью команды su переходить в привилегированный режим. В некоторых дистрибутивах это единственный способ регистрации в качестве пользователя root, поскольку учетная запись root по умолчанию блокируется.

     Иногда есть необходимость предоставления полномочий пользователя root другим пользователям, например хостмастеру — для управления сервером DNS. Но предоставлять пароль root'a каждом желающему не очень хорошая идея.


     С помощью пакета SUDO, который обычно устанавливается при установке системы, можно передать часть полномочий пользователя root другому пользователю.

     /etc/sudoers — конфигурационный файл SUDO.

     Конфигурационный файл /etc/sudoers управляет каждым аспектом SUDO-операции. Этот файл нужно редактировать не вручную, а с помощью команды visudo. Программа осуществляет проверку синтаксиса, чтобы потом не возникали вопросы: «А почему не работает»?

     Рассмотрим такой пример:

pete 192.168.0.4=/bin/kill, /bin/killall

     Первое поле — это имя пользователя, второе — это адрес компьютера, с которого разрешено выполнять операцию. Потом идет знак =, а за ним - список команд, разделенных запятыми, которые может выполнять пользователь от имени root. Обязательно нужно указывать полный путь.

pete@dhsilabs:~$ ps aux | grep sendmail

root 422 0.0 0.1 3284 404 ? S Apr 29 0:00 sendmail:

accepting connections

smmsp 425 0.0 0.1 3284 352 ? S Apr 29 0:00 sendmail:

Queue runner@00:25:00

for /var/spool/clientmqueue pete 12425 0.0 0.1 1468 460 pts/10 R 11:08 0:00 grep sendmail

pete@dhsilabs:~$ sudo kill -HUP 422 Password:

pete@dhsilabs:~$ sudo /sbin/reboot

Sorry, user pete is not allowed to execute Vsbin/reboot' as root

on dhsilabs

     Что же произошло. Пользователь pete регистрируется как обычно и выполняет команду sudo. Он становится пользователем root, но с правом выполнять только определенные команды — те, которые были прописаны в файле /etc/sudoers. В этом случае он ввел команду reboot, но, так как она не указана в файле /etc/sudoers, система отказалась ее выполнить.

     Какой же пароль был введен пользователем pete? Свой или пользователя root? Он ввел свой пароль, а не пользователя root. Иначе что бы ему помешало зарегистрироваться непосредственно под именем root?

     Директивы, используемые в файле.

     User_Alias.

     Позволяет создавать список псевдонимов пользователей. Предположим, что нужно разрешить пользователям (младшим администраторам) rod, jane и freddy выполнять команды reboot и shutdown. Правила в файле /etc/sudoers будут выглядеть так:

rod 192.168.0.4=/sbin/halt, /sbin/reboot, /sbin/shutdown

jane 192.168.0.4=/sbin/halt, /sbin/reboot, /sbin/shutdown

freddy 192.168.0.4=/sbin/halt, /sbin/reboot, /sbin/shutdown 

     Чтобы не писать все три строчки (в некоторых случаях может быть и больше), можно создать псевдоним JUNIORS и использовать его вместо конкретного имени пользователя:

User_Alias JUNIORS = rod, jane, freddy

JUNIORS 192.168.0.4=/sbin/halt, /sbin/reboot, /sbin/shutdown

     Cmnd_Alias.

     Позволяет сокращать список команд (создавать псевдоним для списка команд), например:

Cmnd_Alias STOPSTAR=/sbin/halt, /sbin/reboot, /sbin/shutdown

JUNIORS 192.168.0.4=STOPSTART

     Host_Alias.

     Используется для создания псевдонима для списка узлов:

Host_Alias DMZ=192.168.10.1,192.168.10.2, 192.168.10.3, 192.168.10.4

Host_Alias LAN=192.168.1.1,192.168.1.2, 192.168.1.3, 192.168.1.4

JUNIORS LAN=STOPSTART

     Runas_Alias.

     Разрешить младшему администратору убить любой процесс крайне неразумно. Поэтому нужно разрешить «убивать» только свои процессы и процессы обычных пользователей. Делается это так:

JUNIORS LAN=(rita,bob,sue) /bin/kill,/bin/killall

     Для списка пользователей также можно создать псевдоним:

Run_Alias USERS=paul, John, george, den JUNIORS LAN=(USERS) /bin/kill,/bin/killall

     Младший администратор может указать, процесс какого пользователя нужно завершить (используя опцию -n команды kill):

# sudo -n george /bin/kilall eggdrop

     Defaults.

     Третья секция файла /etc/sudoers позволяет определять значения по умолчанию. Мы знаем, что при выполнении команды su система попросит пользователя ввести его пароль. Но умолчанию программа sudo помнит пароль пользователя на протяжении пяти минут — чтобы пользователю было удобно работать (если он часто вводит команду sudo, то ему придется каждый раз вводить и пароль). Параметры по умолчанию можно изменить так:

Defaults timestamp_timeout=l, passwd_tries=2

     Данное правило заставляет пользователя вводить пароль после одной минуты и ограничить число попыток ввода неправильного пароля числом 2 (по умолчанию — 3). Чтобы задать ограничения для конкретного пользователя, используется правило:

Defaults:pete timestamp_timeout=l, passwd_tries=2

     Также можно задать файл журнала sudo:

Defaults logfile=/var/log/sudo.log