Для команды mount мы не указываем ничего, кроме самой программы. Таким образом, пользователь сам может варьировать ее параметры. Если явно указать в качестве аргумента CD-ROM, то пользователь сможет монтировать именно это устройство:
robert ALL=/bin/cat /etc/shadow, /bin/mount /dev/cdrom
В рассмотренных примерах вместо имени компьютера я всегда применял ключевое слово ALL, что соответствует любой машине. Никогда не используйте такое значение параметра в своей реальной системе. Всегда указывайте конкретный компьютер, к которому относится данная запись. Чаще всего это локальный сервер.
С помощью утилиты sudo можно выполнять команды от лица различных пользователей. Для этого используется ключ -u. Например, следующая команда пытается просмотреть файл паролей от имени пользователя flenov:
sudo -u flenov cat /etc/shadow
Если пользователь не указан, то программа sudo по умолчанию запрашивает пароль root. Это не очень удобно, т.к. придется отдавать пароль администратора учетной записи robert. В этом случае теряется смысл в построении такой сложной системы безопасности, ведь зная пароль root, пользователь сможет зарегистрироваться в системе как администратор и сделать все, что угодно.
Никогда не передавайте пароль администратора. Используйте пароли других учетных записей, которым разрешена работа с необходимыми файлами и программами. В этом случае придется указывать конкретное имя пользователя, которое назначил администратор для выполнения команды.
Еще один способ сохранить пароль администратора — разрешить пользователю выполнять команды без аутентификации. Для этого необходимо между знаком равенства и списком разрешенных команд добавить ключевое слово NOPASSWD и двоеточие. Например:
robert ALL=NOPASSWD:/bin/cat /etc/shadow, /bin/mount /dev/cdrom
Теперь при выполнении команды sudo пароль вообще запрашиваться не будет. Это очень опасно, если вы не перечисляете необходимые директивы, а указываете ключевое слово ALL:
robert ALL=NOPASSWD:ALL
Если хакер получит доступ к учетной записи robert, то сможет с помощью утилиты sudo выполнять в системе любые команды. Если вы перечисляете возможные директивы, то серьезность взлома системы уменьшается в зависимости от того, насколько опасные команды вы разрешаете выполнять пользователю robert и в какой мере защищена эта учетная запись (длина и сложность пароля, прилежность владельца и т.д.).
С помощью утилиты sudo можно предоставить доступ для корректировки файлов. Никогда не делайте этого. Если текстовый редактор запустится для правки даже безобидного файла, хакер получит слишком большие возможности:
□ выполнять системные команды. Так как редактор открывается с правами root, команды также будут выполняться от имени этого пользователя, а значит, хакер получит в свое распоряжение всю систему;
□ открыть любой другой файл, пользуясь правами администратора.
Я никогда не делегирую возможность корректировки конфигурационных файлов с помощью редакторов. Если без этого не обойтись, то никогда не использую в этом случае права root. Конфигурационному файлу назначается другой владелец, и пользователь для исправлений будет запускать программу sudo только от его имени, а это значит, что редактор будет работать не с правами root.
К потенциально опасным командам, которые нежелательно предоставлять для выполнения с правами root другим пользователям, относятся:
□ редактирование файлов — позволяет злоумышленнику изменить любой конфигурационный файл, а не тот, что вы задали;
□ chmod — дает возможность хакеру понизить права доступа на конфигурационный файл и после этого редактировать его даже с правами гостя;
□ useradd — добавляет учетные записи. Если хакер создаст пользователя с ID, равным нулю, то он получит полные права в системе;
□ mount — позволяет монтировать устройства. Прописывайте в конфигурационном файле конкретные устройства и доверяйте эту команду только проверенным пользователям. Если хакер смонтирует устройство со своими программами, которые будут содержать SUID-биты или троянские программы, то он сможет получить в свое распоряжение всю систему;
□ chgrp и chown — санкционируют смену владельца файла или группы. Изменив владельца файла паролей на себя, хакер сможет легко его прочитать или даже изменить.
Напоминаю, что вы должны быть очень внимательны при работе с самой программой sudo, потому что для нее установлен SUID-бит, а значит, она будет выполняться с правами владельца, т.е. администратора системы. Версии sudo, начиная от 1.5.7 и до 1.6.5.p2, содержат ошибку выделения памяти. Хакер может воспользоваться этим для выполнения атаки переполнения стека. Проверьте вашу версию с помощью вызова команды sudo с ключом -v. Если вы являетесь администратором, то увидите на экране подробную информацию о программе, как в листинге 4.3.
Листинг 4.3. Информация о программе sudo
Sudo version 1.6.5p2 Authentication methods: 'pam'
Syslog facility if syslog is being used for logging: authpriv
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
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: Password:
Default user to run commands as: root
Path to the editor for use by visudo: /bin/vi
Environment variables to check for sanity:
LANGUAGE
LANG
LC_*
Environment variables to remove:
BASH_ENV
ENV
TERMCAP
...
...
When to require a password for 'list' pseudocommand: any
When to require a password for 'verify' pseudocommand: all
Local IP address and netmask pairs:
192.168.77.1 / 0xffffff00
Default table of environment variables to clear
BASH_ENV
ENV
TERMCAP
...
...
Default table of environment variables to sanity check
LANGUAGE
LANG
LC_*
Я не стал полностью приводить результат выполнения команды, но основную информацию можно увидеть. Вначале нам сообщается версия программы sudo, в данном случае это 1.6.5.p2. Наиболее интересными в этом листинге являются следующие три строки:
Authentication timestamp timeout: 5 minutes
Password prompt timeout: 5 minutes
Number of tries to enter a password: 3
В первой строке задается время сохранения пароля в кэше. В данном случае это 5 минут. Если пользователь в течение этого времени снова выполнит команду sudo, то повторно аутентификация проводиться не будет.
Следующая строка указывает время ожидания ввода пароля, а последняя — количество попыток его задать. Если за этот период верный пароль не будет указан, работа программы прервется.
Глава 5
Администрирование
В этой главе мы рассмотрим вопросы, с которыми администраторы Linux- систем ежедневно сталкиваются в своей нелегкой работе. Нам предстоит познакомиться с множеством команд Linux, научиться их использовать и узнать немало полезного о системе. Конечно же, весь рассказ будет сопровождаться интересными фактами и различными примерами.
Но разбором команд мы не ограничимся, потому что иначе книга превратится в перевод руководства по Linux. Чтобы этого не случилось, я постарался подобрать готовые решения задач администратора, которые вам пригодятся в повседневной жизни. Надеюсь, что материалы этой главы помогут вам найти ответы на многие вопросы и избавиться хотя бы от части проблем.
Некоторые специалисты считают, что администрирование — это достаточно простой процесс, только знай команды и выполняй их в нужное время и в нужном месте. Это действительно так, если иметь в виду управление в чистом виде. Но если говорить об обеспечении безопасности системы, то все намного серьезнее, чем может присниться в самом кошмарном сне. И прочитав эту главу, вы с этим согласитесь.
На просторах Интернета идет самая настоящая война между защитой и взломом, и побеждает тот, кто быстрее реагирует на действия противника и меньше спит.
5.1. Полезные команды
Познакомимся с некоторыми программами и командами, которые позволят вам упростить администрирование и сделать его эффективнее. Начнем с команд, необходимых для последующего понимания материала.