Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Приемы работы в Ubuntu.
Глава 7: Безопасность

Оригинал: "Ubuntu Hacks: Chapter 7 - Security"
Авторы: Кайл Ранкин, Джонатан Оксер, Билл Чайлдерс (Kyle Rankin, Jonathan Oxer, Bill Childers)
Дата публикации: June 2006
Перевод: Н.Ромоданов
Дата перевода: октябрь 2010 г.

Когда вы слышите рассказы о том, что Linux намного более безопасен, чем другие операционные системы, это не может не взволновать. Но, истина в том, что любая конкретная система Linux будет безопасной, скорее всего, только тогда, когда она находится в хороших руках. В этой главе собраны различные советы, которые помогут вам лучше справляться с вашими системами Ubuntu.

Вы узнаете о том, как в Ubuntu используется команда sudo, которая предоставляет привилегии root в том минимуме, который достаточен для поддержания нормальной работы системы. Вы также узнаете, как настроить систему для загрузки и установки обновлений безопасности, и, следовательно, сможете воспользоваться таким известным преимуществом сообщества Linux, как быстрое реагирование на уязвимости. Но даже при наличии таких возможностей, это еще не все, что можно сделать.

Для того, чтобы злоумышленникам было труднее получить доступ к вашей сети, вы можете защитить ее с помощью брандмауэра. И если этого окажется недостаточным, вы можете для защиты секретной информации, имеющейся в вашей системе, применить шифрование промышленного уровня (так что если ваша система будет похищена или скомпрометирована каким-либо иным образом, нападавшие не смогут воспользоваться тем, что они найдут, если, конечно, вы не использовали слабую фразу-пароль и не записали ее на листке бумаги). В этой главе вы найдете советы о том, как сделать все это и многое другое.

Совет # 67: Ограничение прав доступа с помощью команды sudo

Воспользуйтесь возможностями команды sudo, устанавливаемой в Ubuntu по умолчанию, для детального контроля над привилегированным доступом.

Если вы в прошлом пользовались рядом других дистрибутивов Linux, то, когда первый раз воспользуетесь Ubuntu, вы с удивлением обнаружите, что в этой системе отключена учетная запись root. В большинстве других дистрибутивов программа установки запросит у вас пароль root, и, когда вам потребуется выполнять работу с правами root, вы войдете в систему как пользователь root или воспользуетесь командой su, а затем введете пароль root. Поскольку в Ubuntu пользователь root по умолчанию не имеет пароля, для выполнения команд с правами root вы должны использовать команду sudo. Команда sudo позволяет получать доступ с правами root или с правами других учетных записей с полным контролем над тем, что может делать пользователь, когда он пользуется конкретной учетной записью. В добавок, команда sudo работает так, что запрашивает ваш пароль, а не пароль пользователя, к учетной записи которого вы хотите подключиться. В результате у администратора появляется возможность предоставлять различным пользователям под учетной записью root различные варианты доступа и не требовать от них знание пароля root.

Конфигурация sudo, используемая в Ubuntu по умолчанию, сравнительно обычная и определена в файле /etc/sudoers. Обратите внимание, что вы не должны редактировать этот файл с помощью стандартного текстового редактора. Вы должны использовать visudo. Инструмент visudo необходим, поскольку он, прежде чем закрыть файл, выполнит дополнительную проверку файла sudoers с тем, чтобы убедиться, что в нем нет синтаксических ошибок. Это очень важно поскольку синтаксическая ошибка в файле sudoers может заблокировать всех пользователей в вашей системе. Ниже указаны роли, определяемые в Ubuntu по умолчанию в файле /etc/sudoers:

# User privilege specification                                
root    ALL=(ALL) ALL

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) ALL

Первое правило позволяет любому пользователю системы получить с помощью sudo привилегию root, а второе правило позволяет любому, кто является членом группы admin, запускать любые команды с правами root. Итак, когда вы в системе Ubuntu, настроенной по умолчанию, хотите запустить команду с правами root, наберите sudo, а затем - команду, которую следует выполнить. Например, если вы хотите запустить apt-get update с правами root, вы должны набрать:

$ sudo apt-get update

Синтаксис файла /etc/sudoers

Чтобы полностью объяснить синтаксис файла /etc/sudoers, мы воспользуемся следующим примером с правилом и расскажем о каждом его столбце:

jorge  ALL=(root) /usr/bin/find, /bin/rm

В первом столбце указывается пользователь или группа, к которым применяется данное правило sudo. В данном случае, это пользователь jorge. Если слову в этой колонке, предшествует символ %, он определяет, что это значение является не пользователем, а группой. Это связано с тем, что в системе могут быть пользователи и группы с одинаковыми именами.

Второе значение (ALL - все) определяет, к каким хостам будет применяется данное правило sudo. Этот столбец полезен в тех случаях, когда действие sudo распространяется на несколько систем. Для настольной системы Ubuntu, или системы, в которой вы не планируете распространять роли sudo на несколько систем, вы можете смело оставить это значение равным ALL, которое является универсальным обозначением, соответствующее всем хостам.

Третье значение, указанное в скобках, определяет, в качестве какого пользователя или пользователей может выполнять команду пользователь, указанный в первом столбце. Здесь указано значение root, что означает, что пользователю jorge будет разрешено выполнять команды, указанные в последнем столбце, в роли пользователя root. Вместо этого значения также можно задать ALL, указывающее, что jorge имеет право выполнять команды в роли любого пользователя системы.

Последнее значение (/usr/bin/find, /bin/rm) представляет собой список команд, разделенных запятой, которые пользователь, указанный в первом столбце, может выполнять в роли пользователя (пользователей), указанного в третьем столбце. В данном случае, мы разрешаем пользователю jorge запускать команды find и rm в роли пользователя root. Вместо этого значения также можно задать ALL, указывающее, что jorge может выполнять все команды в системе в роли пользователя root.

Смотрим, как это работает

Для того, чтобы воспользоваться этой ролью sudo, пользователь jorge должен в командной стоке набрать команду sudo и за ней — команду, которую нужно выполнить:

jorge@ubuntu:~$ sudo find . ! -name '*.mp3' -exec rm -f \\{\\} \\;

Если jorge попытается выполнить команду, отличную от find или rm, sudo не выполнит команду и предупредит, что ему не разрешено запускать эту команду в роли root.

Вы можете использовать команду sudo для запуска команд в роли, отличающейся от роли root. Если вы не укажете пользователя, команда sudo по умолчанию будет использовать роль root, но вы можете использовать флаг -u для того, чтобы указать конкретного пользователя, в роли которого будет выполняться команда:

$ sudo -u fred ls /home/fred

Видно, что с помощью этих правил вы можете создавать в системе определенные роли. Например, вы можете определит группу администраторов, имеющих учетную запись administrators. Вам не нужно, чтобы у этих пользователей были полные права роли root, но вы хотите, чтобы они могли в системе добавлять и удалять пользователей. Вы можете создать в системе группу, которая будет называться accounts, и добавить этих пользователей в созданную группу ( для получения дополнительной информации, связанной с управлением пользователями и группами в Ubuntu, смотрите раздел "Управление пользователями и группами" [Совет # 75]). Затем вам следует воспользоваться visudo и добавить в файл /etc/sudoers следующую строку:

%accounts  ALL=(root) /usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/usermod

Теперь любой член группы accounts может запускать команды useradd, userdel и usermod. Если вы обнаружите, есть другие команды, к которым нужно разрешить доступ пользователям в этой роли, вы можете добавить эти команды к концу списка.

Предостережение

Заметьте, что когда мы указываем конкретные команды, которые пользователь может запускать, мы указываем полный путь к команде. Это делается по соображениям безопасности. Если, например, мы просто укажем useradd вместо /usr/sbin/useradd, пользователь может создать свой собственный скрипт с названием useradd, который может делать все, что захочет пользователь, и записать в локальный директорий. Затем он с помощью локального скрипта useradd сможет в роли root выполнить, в сущности, любую команду, которую он захочет.

Другой удобной особенностью команды sudo является возможность указывать команды, для запуска которых не требуется пароль. Это удобно, если вам нужно запускать некоторые команды в роли root не в интерактивном режиме. Например, вы хотите, чтобы пользователь мог запускать команду kill в роли root без запроса пароля (таким образом пользователь может, например, быстро уничтожить процесс, вышедший из под его контроля). Чтобы включить эту привилегию, добавьте перед списком команд атрибут NOPASSWD:. Для того, чтобы предоставить эту возможность нашему пользователю jorge, в файл /etc/sudoers нужно добавить следующую строку:

jorge   ALL=(root) NOPASSWD: /bin/kill, /usr/bin/killall

После этого jorge может запускать следующую команду:

jorge@ubuntu:~$ sudo killall rm

для того, чтобы в роли root быстро уничтожить процесс rm, который вышел из под контроля.

Включаем учетную запись root

С командой sudo все отлично, но что, если вы просто хотите снова включить учетную запись root, к которой можно получать доступ с помощью команды su? В сущности, все, что вам нужно, это задать для root пароль:

$ sudo passwd root

Теперь у вас должна появиться возможность входить в систему в роли root и использовать команду su.

Команда sudo является невероятно мощным инструментом и мы рассмотрели лишь некоторые из тех настроек, которые могут пригодиться пользователю настольной системы. Если вы хотите распространить действие команды sudo на сеть всего предприятия, прочитайте страницы описаний sudoers (man 5 sudoers) и просмотрите примеры, поясняющие настройку алиасов, задание обычных групп пользователей и групп пользователей, от имени которых запускаются программы, а также задание алиасов хостов и команд. На самом деле такой модульный подход, используемый для задания ролей, очень удобен в случае использования большого количества компьютеров.


Назад Оглавление Вперед