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

UnixForum






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

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

На главную -> MyLDP -> Тематический каталог -> Серверные службы Linux

Безопасность Samba. Часть третья.

Оригинал: Paranoid Penguin - Samba Security, Part III
Автор: Mick Bauer
Дата: 1 января 2009
Перевод: Александр Тарасов aka oioki
Дата перевода: 10 мая 2009

В этом месяце мы продолжим построение защищенного файлового сервера локальной сети на основе Samba. Если вы не читали предыдущие две статьи серии, то знайте, что он задумывается как недоступный из интернета. При этом пользователи сети могут подключать ресурсы сервера как сетевые диски.

В рассматриваемом нами примере с пансионом нужно организовать файловый ресурс с вечерним меню (SUPPER), доступный только для чтения; перечень дел по хозяйству (CHORES), доступный для группы пользователей и ресурс с веб-логами (BUZZ-OFF), доступный только одному пользователю.

В предыдущей статье мы воспользовались средством Swat, изменив с ее помощью глобальные настройки Samba. Были созданы четыре аккаунта: mick, knute, pepe, skippy. Мик - это, конечно же, сам я. Кнут, Пепе и Скиппи - три агента ФСБ, снимающие мои комнаты и заинтересованные в вечерних меню и недельном списке дел по хозяйству, однако которым не дозволено видеть мои веб-логи.

В этой статье мы создадим публичный ресурс (под названием SUPPER) и непубличный, доступный только для чтения группе, ресурс (под названием CHORES). Частный ресурс BUZZ-OFF рассмотрим в следующий раз.

Создание публичного ресурса только для чтения

Как мы уже увидели, Swat - лучшее средство для конфигурации smb.conf (это основной файл конфигурации Samba). Другие задачи, такие как создание новых аккаунтов, лучше всего выполнять из консоли. В предыдущей статье мы воспользовались стандартными командами useradd и passwd для настройки аккаунта Linux, а затем командой smbpasswd для создания соответствующего Samba-пользователя.

Однако для создания общих ресурсов логично вернуться к Swat. Очевидно, для этого нам потребуется нажать кнопку Shares. После этого введите имя SUPPER в окошке справа от кнопки Create Share, затем нажмите эту самую кнопку. Вы увидите что-то похожее на рисунок 1.


Рисунок 1. Создание нового файлового ресурса

В секции Base Options можно словесно описать ресурс, установив параметр comment, например, в Mick's Menus. Затем укажем путь (path) - /home/mick/supper. В этом каталоге как раз и будет храниться наше вечернее меню.

Значение параметра path указывает на реальный каталог на вашем сервере. Поэтому, права доступа и владелец этого каталога нужно установить должным образом. К примеру, листинг каталога /home/mick/supper выглядит так:

drwxr-xr-x 2 mick users 4096 2008-09-12 01:44 supper/

Как нетрудно заметить, пользователь mick обладает правами на чтение, запись и выполнение, а группа users и другие пользователи могут лишь читать и исполнять. Я не буду здесь рассказывать, как именно устанавливаются такие права (об этом можно прочесть, к примеру, в моей статье "Linux Filesystem Security", написанной в октябре и ноябре 2004 - для Linux Journal). Достаточно упомянуть, что для создания каталогов, назначения владельца-пользователя, владельца-группы и назначения прав доступа используются команды mkdir, chown, chgrp, chmod соответственно.

Замечание по рисункам 1 и 2

Скриншоты 1 и 2 показывают значения по умолчанию в Swat, идущем в комплекте с Ubuntu. Поэтому они сами по себе не реализуют безопасную настройку Samba. В сопровождающем тексте упомянуты рекомендуемые (безопасные) настройки.

Давайте установим настройки безопасности (Security Options), показанные на рисунке 1. По умолчанию (по крайней мере в системах Ubuntu) в базовом режиме Swat показывает лишь четыре из них. Разумно начать с них.

Первая из них - read only, в Ubuntu я оставляю значение по умолчанию, то есть yes, даже если мне хочется, чтобы Мик мог публиковать новые меню. Делаем так, потому что настройка write list переопределяет эту настройку.

Вторая настройка из этой секции - guest ok, меняю его на yes. Чтобы мои гости (новые квартиросъемщики) могли просматривать меню и знать, что их ожидает.

На этом моменте остановимся. Поясню, как работает гостевой доступ в Samba. В предыдущей статье, при изменении глобальных настроек Samba, мы устанавливали значение map to guest на Bad User. С такой логикой клиенты, которые пытались войти под несуществующим именем пользователя, становились гостями. Значение параметра guest account установим в nobody - это означает, что если клиент зайдет как гость (введя неверное имя пользователя, либо действительно войдя в систему под именем nobody), он войдет в систему с правами UNIX-пользователя nobody.

Ни один из этих глобальных параметров не влияет на данный общий ресурс до тех пор, пока параметр guest ok установлен в значение yes. Как мы скоро увидим, на самом деле этот параметр не дает гостям каких-либо прав, пока не будут сделаны определенные настройки.

Во-первых, обратим внимание на некоторые другие опции, на рисунке 1: hosts allow и hosts deny, которые позволяют задать разрешения использования ресурса в стиле TCP Wrappers. Все, что нужно, можно найти в man-странице hosts_access(5).

Как видно на рисунке 1, параметру hosts allow присвоено значение 192.168.44. - это означает, что к ресурсу будут иметь доступ клиенты с IP-адресом, первые три октета которого равны 192.168.44. В нашем примере это означает локальные IP-адреса подсети 192.168.44.0/24. Параметру hosts deny присвоено значение ALL, таким образом все клиенты, которые не попали в параметр hosts allow, не будут иметь доступа к ресурсу.

Как мне кажется, нет причин не использовать hosts allow и hosts deny. Конечно, для безопасности намного важнее правильная настройка пользователей и групп, использование сильных паролей, но тем не менее фильтрация по IP-адресам будет нелишней.

Здесь вы можете задаться вопросом, как же Samba понимает, кому дать доступ на запись, а кому только на чтение? Те четыре параметра никак с этим не связаны. Короче, мы уже сделали основные настройки в секции globals, а права доступа на конкретный ресурс могут быть установлены при переключении из базового в расширенный режим просмотра. Нажмите кнопку Advanced в Swat, она находится в верхней части экрана. После этого вы увидите что-то похожее на рисунок 2.


Рисунок 2. Настройки прав к ресурсу, в режиме Advanced View

Но подождите! Откуда взялись эти значения valid users, read list и тому подобные?

Как это часто бывает в Samba, многие параметры могут быть объявлены глобальными, либо относящиеся к конкретному ресурсу. Когда вы создаете новый ресурс, Swat копирует значение таких параметров из значений соответствующих глобальных параметров. Итак, рисунок 2 показывает настройки Swat сразу после настройки глобальной секции, но сам ресурс еще не настроен под наши нужды.

Так давайте настроим его! С одной стороны, параметру invalid users присвоено значение root, как и в соответствующем глобальном параметре, будет логично распространить это значение и сюда. То, что никуда не стоит заходить под именем root - это хорошая идея.

Однако я хочу сделать этот ресурс открытым для всех, поэтому параметр valid users следует очистить, таким образом на ресурс сможет войти всякий пользователь, предоставивший совершенно любое имя. (Запомните, однако, что любой пользователь с именем, не найденным в базе данных Samba или файле /etc/password будет рассматриваться как гость, т.е. работать от имени nobody)

Аналогично, нужно очистить параметр read list, ведь просматривать содержимое ресурса может также кто угодно, а параметру read only присвоено значение yes. Замечание: read list - это подобие "черного списка" - любой содержащийся в нем пользователь будет иметь права лишь на чтение, независимо от того, какие параметры установлены на этот ресурс или в глобальной секции настроек.

Также требуется очистить параметр admin users. Как говорилось в предыдущей статье, это опасная настройка, и зачастую необязательная. (на самом деле, вообще не следовало бы устанавливать значение mick в глобальной секции). Обратите внимание, что пользователи из списка admin users работают от имени root, но также и файлы, созданные ими, будут принадлежать пользователю root, что может значительно усложнить взаимодействие файловых систем Samba и Linux. В большинстве случае следует не использовать этот параметр, а просто давать права на запись необходимым пользователям.

А это можно сделать в параметре write list. Здесь можно оставить значение mick, оставшееся от глобальной секции.

Последней настройкой безопасности является параметр create mask. Эта настройка определяет права доступа UNIX, которые будут даны всем файлам, перемещаемым или создаваемым в этом ресурсе. Значением этого параметра должен быть восьмеричный режим доступа в стиле chmod, за разъяснениями - в man-страницы chmod(1).

Значением по умолчанию является 0744, как показано на рисунке 2. Это означает, что владелец файла может читать+записывать+исполнять, члены группы - читать, и остальные - читать. Однако так как этот общий ресурс будет содержать лишь текстовые файлы, нет необходимости устанавливать права на исполнение, поэтому значение 0644 (владелец читает+записывает, члены группы читают, остальные читают) будет более подходящим.

Для ясности на рисунке 3 показаны модифицированные параметры всех перечисленных параметров.


Рисунок 3. Новые настройки безопасности

Мы почти закончили настраивать этот общий ресурс. Осталась пара параметров, можно переключиться обратно в базовый режим просмотра, так вы быстрее их найдете. Параметру Browse Option browseable в системах Ubuntu по умолчанию присвоено значение yes, что подходит для публичного ресурса.

Есть параметр Miscellaneous Options available, которым можно включать и выключать ресурс. Когда создаете новый ресурс, логично установить этот переключатель в no. Кажется неплохой идеей включать ресурс лишь тогда, когда он будет настроен. Однако в нашем случае мы уже все настроили, и поэтому присваиваем параметру значение yes.

Последним шагом будет нажатие кнопки Commit Changes сверху от списка всех параметров. На моей системе почему-то, когда я нажимаю эту кнопку, открывается окно настройки принтеров! Если и у вас также, тогда чтобы убедиться, что ваши настройки действительно сохранились, нажмите кнопку Shares еще раз.

После создания, удаления или модификации настроек общего ресурса, изменения будут автоматически применены. Нет необходимости перезапускать какие-либо демоны Samba.

Проверка

Теперь общий ресурс SUPPER настроен и доступен для использования, он должен отображаться в Сетевом окружении (или любом другом браузере сети Windows) пользователей нашей локальной сети. Ваш Samba-сервер, которому мы указали стать Browse Master'ом для данной рабочей группы, осуществляет это посредством рассылки широковещательных сообщений.

Однако по моему опыту, сетевые браузеры ненадежны - порой проходит долгое время, прежде чем ресурс появится в вашей рабочей группе, а иногда и наоборот - ресурсы таинственным образом исчезают без видимых причин. Даже для клиентов Windows использование сетевых дисков с явным указанием адреса ресурса - это наиболее быстрый и надежный способ подключиться, нежели использование Сетевого окружения.

Итак, вы можете проверить работу ресурса с помощью браузера сети, но я рекомендую воспользоваться консольными утилитами Samba, а именно smbclient и smbtree. В дистрибутивах Debian и Ubuntu они присутствуют в пакете smbclient, а в Red Hat и SUSE - в пакете samba-client. Поизучайте сами man-страницы smbtree(1) и smbclient(1), а я приведу лишь пару примеров использования этих консольных утилит.

smbtree - это консольный браузер сети Windows, иногда он работает получше графических браузеров. Чтобы увидеть все доступные рабочие группы, сервера и публичные ресурсы в вашей локальной сети, введите такую команду:

bash-$ smbtree -N -b

smbclient - более универсальная программа, она позволяет как просматривать, так и использовать ресурсы Samba. Чтобы подключиться к нашему ресурсу от имени nobody (гостевой вход) с помощью smbclient, нужно ввести:

bash-$ smbclient //CASA_DE_MICK/SUPPER -U nobody

Обратите внимание на синтаксис имени ресурса: //имя_сервера/имя_ресурса. Вместо имени можно использовать также и IP-адрес, так будет даже быстрее.

Обратите внимание, что использование несуществующего имени пользователя (Bad User) ведет к ожидаемому поведению Samba, а именно вошедший пользователь будет работать как и в предыдущем случае - от имени пользователя nobody:

bash-$ smbclient //CASA_DE_MICK/SUPPER -U totallyfakeusername

У вас спросят пароль. Просто нажмите Enter (пользователь nobody в Linux не должен иметь пароля!) Если все пройдет нормально, вы увидите следующее приглашение:

Anonymous login successful
Domain=[FED-CENTRAL] OS=[Unix] Server=[Samba 3.0.28a]
smb: \> 

Итак, вы подключились к Samba-ресурсу как к FTP - на самом деле, это окружение разрабатывалось как подобие FTP-клиента. Чтобы увидеть список всех доступных команд, введите ? или help. Теперь просмотрим содержимое ресурса, с помощью команды dir:

smb: \> dir
  .                            D     0  Tue Oct  7 13:22:28 2008
  ..                           D     0  Tue Oct  7 13:21:16 2008
  0-mon_filetmingon.txt             51  Mon Oct  6 21:05:34 2008
  1-tues_gruel.txt                  47  Tue Oct  7 13:05:54 2008
  2-wed_beefmushcasserole.txt        5  Tue Oct  7 13:06:32 2008

         52008 blocks of size 262144. 13782 blocks available

В качестве самостоятельного задания разберитесь, как скопировать файлы в обоих направлениях. Однако записывать может только mick, а другие могут получать список файлов, скачивать их и просматривать их содержимое.

Создание общего ресурса для группы

На основе опыта создания ресурса SUPPER, создание ресурса CHORES (содержащего список работ по домашнему хозяйству) должно пройти легко и быстро. Данный ресурс могут читать члены группы. Этот ресурс будет очень похожим на SUPPER: mick будет иметь права чтения и записи, а pepe, skippy и knute лишь доступ на чтение. Однако, в отличие от SUPPER, гостевой доступ должен быть запрещен.

Соответственно, после ввода имени общего ресурса (CHORES) в поле Create Share и нажатия кнопки Create Share, нужно будет поменять значение параметра guest ok на no. Зададим параметрам comment и path соответственно Список домашних работ и /home/mick/chores. Сперва, конечно же, Мик должен создать этот каталог в своем домашнем каталоге, и установить владельца и права доступа как и для каталога /home/mick/supper.

Параметры hosts allow и hosts deny можно оставить точно такими же, как и для ресурса SUPPER. Параметру browseable можно оставить значение yes, однако параметр available должен быть выключен (no).

На рисунке 4 показаны эти настройки (кроме available) для нашего нового ресурса CHORES.


Рисунок 4. Базовый режим просмотра для ресурса CHORES

Теперь, мы перейдем в расширенный режим просмотра Swat по нажатию на кнопке Advanced. Как и в случае SUPPER, мы очистим параметр admin users (допустим, у меня паранойя), а также очистим read users, потому что параметру read only все равно присвоено значение yes.

Как можно видеть на рисунке 5, я проявляю полезную леность в поле valid users.


Рисунок 5. Расширенный режим просмотра для CHORES

В поле valid users (на рисунке 5), символ + перед именем группы users означает, что Samba должна найти имя группы users в системном файле /etc/group, и подставить всех ее членов в это поле. На этом сервере группа users состоит из mick, knute, pepe и skippy, Samba окончательно определит состав valid users как mick, knute, pepe, skippy.

Необходимо отметить, что при таком подходе нужно быть осторожным. Перед тем, как использовать имена групп в Swat (или напрямую в smb.conf), убедитесь, что вы включаете именно тех, кто нужен, что именно этим пользователям будет дан доступ.

Самый быстрый способ проверить - это вручную найти имя группы в /etc/group, запомнить ее численное значение, заодно увидите, в каких вторичных группах состоят эти пользователи. Затем нужно просмотреть файл /etc/passwd и найти пользователей, которые состоят в группе с таким значением.

Это делается примерно следующим образом:

mick@ubuntu:~$ grep users /etc/group

users:x:100:

mick@ubuntu:~$ grep :100: /etc/passwd

dhcp:x:100:101::/nonexistent:/bin/false
mick:x:1003:100:Mick Bauer:/home/mick:/bin/sh
knute:x:1004:100:Knute:/home/knute:/bin/sh
pepe:x:1005:100:Pepe:/home/pepe:/bin/sh
skippy:x:1006:100:Skippy:/home/skippy:/bin/sh

Как вы видите здесь, на моей системе пользователи mick, knute, pepe, skippy входят в группу users, и не входят ни в одну вторичную группу. Второй вызов grep вернул 5 записей, однако одна из них - это dhcp, которая просто попалась по значению User ID (а не Group ID) 100.

Другая настройка, которую следует изменить - это create mask, которую мы опять же установим в значение 0644, а параметру available можно присвоить значение yes. Наконец, нажимаем кнопку Commit Changes, и ресурсом CHORES можно пользоваться. Проверьте его работу, например, с другой операционной системы.

Заключение

Эту статью пора завершать. В следующей статье мы создадим третий ресурс, доступный лишь для пользователя mick, научимся подключать сетевые диски Samba на клиентских системах с помощью smbmount и обсудим некоторые другие аспекты Samba, например, как сделать, чтобы Samba автоматически обслуживала домашние каталоги пользователей.

Источники информации

1. "Linux Filesystem Security, Part I": www.linuxjournal.com/article/7667
2. "Linux Filesystem Security, Part II": www.linuxjournal.com/article/7727

Переводы на http://rus-linux.net/:
1. "Безопасность Samba. Часть первая."
2. "Безопасность Samba. Часть вторая."

Mick Bauer (darth.elmo [at] wiremonkeys [dot] org) - архитектор сетевой безопасности одного из крупнейших банков США. Он является автором книги Linux Server Security, 2nd edition издательства O'Reilly (ранее называлась Building Secure Servers With Linux), иногда выступает на конференциях по информационной безопасности.