Изучение sudo
Цель данной книги - позволить вам заменить доступ к привилегированным командам посредством su и пароля root с помощью команды sudo и личных учётных записей пользователя. Когда вы научитесь комфортно работать с sudo, вы сможете использовать механизм аутентификации системы, исключив получение привилегий root посредством su. Пароль root станет средством используемым только в экстренной ситуации или при работе на физической консоли. Аутентификация исключающая root позволит улучшить отчётность системного администратора в пределах организации. Однако не стоит быть торопливым при развёртывании sudo.
Конфигурирование sudo имеет свои подводные камни. Вам необходимо понимать, как sudo вписывается в рабочую среду. Ничто так не раздражает, как блокировка самого себя на собственном сервере. Не стоит спешить с отключением доступа к root посредством su, поскольку вы можете использовать этот способ для восстановления повреждённой или неверной конфигурации sudo. Конечно, sudo имеет функционал и инструменты, позволяющие убедиться, что синтаксис конфигурации политик sudo верен. Да, политика указывающая что "никто не может сделать что-то" будет иметь верный синтаксис. Но... Поэтому стоит, на время, оставить доступ посредством su, пока вы не будете абсолютно уверенны в новых механизмах sudo или полностью не освоитесь с работой в однопользовательском режиме работы для восстановления работы. Так же, для деструктивного обучения может быть весьма полезной работа с виртуальной машиной или jail-окружением.
Некоторые операционные системы (в частности Ubuntu и OS X) предоставляют root привилегии посредством sudo а не su. Если вы ещё только экспериментируете с sudo, и sudo является вашим основным методом выполнения привилегированных команд, вы можете оказаться в рискованной ситуации. Перед началом работы с sudo, включите root доступ и установите пароль root на вашей машине. Убедитесь, что всё работает и, что вы можете получить привилегированный доступ без использования sudo. Только после этого, вы можете безопасно исследовать sudo не опасаясь блокировки привилегированного доступа. После комфортного освоения sudo, вы можете спокойно развернуть его в полной мере.
Официальная документация sudo описывает различные функции sudo в расширенной форме Бэкуса-Наура (EBNF - Extended Backus-Naur Form) - вид формальной грамматики для конфигурации программы. Хотя знакомство с EBNF является полезным навыком для любого системного администратора, я не предлагаю вам изучать формальные поределения. Вместо этого, в данной книге, будут показаны наиболее важные особенности sudo - в виде частей конфигурации политик.
Так же, следует обратить внимание, что эта книга не охватывает все возможные конфигурации sudo и весь его функционал. Я рассматривал только то, что необходимо абсолютному большинству системных администраторов. Если же вы работаете со старой ОС, использующей старую версию sudo, или администрируете UNIX-подобную систему дико выпадающую из общих стандартов, вам потребуется погружение в формальную документацию, что позволит сгладить резкие грани сложившейся ситуации.
После прочтения данной книги, вы будете иметь твёрдую основу в понимании методов sudo.
Как избежать sudo
Многие системные администраторы при настройке своих систем требуют привилегий суперпользователя, хотя им следует использовать привилегии группы поддерживаемые базовой операционной системой. Часто, мы склонны рассматривать разрешения для пользователей и прочих, но мало обращаем внимания на права доступа группы. Прежде чем выполнить sudo следует определиться - возможно, вместо этого, вы можете решить вашу проблему с использованием разрешения групп. Требовать привилегии root чтобы разрешить доступ к файлам или программам может выглядеть, как потребовать использование кувалды для того, чтобы повесить картину.
Используйте разрешения группы для программ или файлов, к которым должны иметь доступ несколько пользователей. В качестве простейшего примера, предположим, что некоторые пользователи осуществляют поддержку web-сайта. Вы можете создать группу, назвав её, например, webadmins, и назначить эту группу в качестве владельца директории web-сайта и всех файлов в этой директории. Давайте посмотрим на директорий верхнего уровня нашего web-сайта.
#ls -l
total 94
drwxrwxr-x 2 mike webadmins 512 Jul 12 2013 content
-rw-rw-r-- 1 thea webadmins 16584 Oct 20 2013 logo.jpg
-rw-rw-r-- 1 pete webadmins 767 Oct 20 2013 errata.html
-rw-rw-r-- 1 mike webadmins 2736 Jul 12 2013 index.html
-rw-rw-r-- 1 pete webadmins 167 Jul 12 2011 index2.html
-rw-rw-r-- 1 thea webadmins 66959 Oct 20 2006 banner.jpg
Отдельные файлы принадлежат отдельным пользователям - mike, thea или pete. Но, кроме того, файлы могут читаться и записываться группой webadmins. Любой в этой группе может читать и редактировать эти файлы и любые другие в этом директории.
Специфика добавления групп варьируется в зависимости от операционных систем. Я бы сказал вам, что необходимо отредактировать /etc/groups, но некоторые ОС используют специальные инструменты для управления группами. Обратитесь к руководству по операционной системе.
В какие группы вхожу я?
Чтобы определить к каким группам принадлежите вы, выполните команду id(1).
#id
uid=1001(mike) gid=1001(mike) groups=1001(mike),10020(webadmins)
Как видите, моя учётная запись входит в группы mike и webadmins. Я мог бы редактировать файлы из приведённого выше примера на основе моей принадлежности к группе. Кроме того, я мог бы произвести изменение пары файлов поскольку я являюсь их владельцем и имею такие разрешения.
Программы против групп
Разрешения группы не решат все проблемы доступа к программам. Некоторые программы выполняют привилегированные функции и предоставив группе право на выполнение программы вы не передадите программе прав на выполнение этих функций. Помните, что программа работает с привилегиями пользователя запустившего программу.
Продолжим историю нашей команды по управлению web-сервером. Web-серверы работают на TCP портах 80 и/или 443/ Только root может осуществлять подключение к портам с номерами ниже 1024. Если пользователь выполняет программу web-сервера без дополнительных привилегий, программа будет запущена с учётной записью пользователя. Она не получит необходимых привилегий для подключения к требуемым сетевым портам и, соответственно web-сервер не сможет запуститься. Настройка разрешений программы таким образом чтобы пользователь мог бы её запустить не означает, что программа будет работать. Если вам требуется, чтобы группа webadmins получила привилегии суперпользователя для запуска, остановки и управления web-сервером, вам необходимо предоставить пользователям этой группы привилегии суперпользователя. Здесь то вам и подходит sudo - вы можете назначить участникам команды управления сервером и ничего другого.
Обзор книги
Sudo представляет собой комплекс взаимосвязанных программ. Вы достигнете лучшего результата в конфигурировании sudo если будете понимать, как различные части взаимодействуют друг с другом.
Традиционно, sudo включает два компонента: программу sudo и движок политик sudoers (файл политик). Глава 2 является элементарным введением в обе составляющие. Файл политик sudoers можно изменять только обладая привилегиями суперпользователя. Ошибка в файле sudoers может привести к блокировке получения привилегий пользователя с помощью sudo. Если вы отключили доступ к root с использованием иных средств, вы можете оказаться блокированными. В пакет sudo так же входит специальный инструмент, visudo, предназначенный для редактирования и проверки файла sudoers. Использование visudo снижает шансы возникновения проблем с конфигурированием. visudo рассматривается в Главе 3.
Политики sudo быстро становятся очень сложными. В Главе 4 описано, как можно снизить эту сложность с помощью использования списков и псевдонимов. Однако, вы не можете настроить все детали поведения sudo только посредством правил политик. Политики sudoers включают в себя различные настройки и параметры по умолчанию, и о том как их изменить я расскажу в Главе 5.
Некоторые программы предлагают пути обхода ограничений sudo с помощью побега из оболочки - не по причине того что они были написаны так специально, а из-за своих характерных особенностей. Глава 6 рассматривает способы предотвращения получения неограниченной оболочки root из текстовых редакторов и других подобных программ.
Большая часть книги посвящена политикам безопасности sudoers, но сама программа sudo тоже может быть настроена. В Главе 7 обсуждается файл sudo.conf.
Среда пользователя может вызывать различные виды проблем при использовании привилегированных программ. Глава 8 охватывает способы очистки среды пользователя и блокировки или разрешения переменных среды в контексте sudo.
Sudo может производить базовую проверку целостности программ перед их выполнением. Об этом мы поговорим в Главе 9.
Вместо того, чтобы поддерживать отдельные политики безопасности на каждой из десятков или сотен машин, вы можете использовать одну, централизованную политику и распространить её на все хосты. Глава 10 рассматривает распространение единой политики по сети.
Sudo может получать политику безопасности с сервера аутентификации LDAP, а не только посредством файла sudoers. Совместная работа LDAP и sudo рассматривается в Главе 11.
После того, как вы сможете проконтролировать доступ пользователей к привилегированным программам у вас возникнет следующий вопрос: "что же сделал пользователь?". sudo включает три различных системы журналирования используемых для различных потребностей. В Главе 12 мы рассмотрим все три.
Наконец, sudo может работать с учётными данными пользователя в различных формах, и если вы хотите настроить то как sudo будет управлять паролями и другими данными аутентификации, вам следует прочитать Главу 13.
Однако, прежде чем перейти к более широким знаниям, давайте начнём с основ sudo.
(конец Главы 1 ... Собираем... Собираем...)
(да... продолжение будет)