SAMBA в подробностях
     

Юрий Лушня

Google
 
Web avtobazar.com.ua

При написании данного документа была использована одна из последних версий пакета SAMBA (2.0.6). Данный пакет (samba-2.0.6.tar.gz) можно получить на домашней странице SAMBA.

После получения данного пакета извлекаем все то, что находится под "грифом" *.tar.gz, например, в директорию /tmp (причем, для этого не обязательно быть root'ом :), т.е:

$ tar -zxvf samba-2.0.6.tar.gz

Если у вас не возникло никаких проблем при извлечении данного пакета, вы обнаружите новую директорию samba-2.0.6 и в ней извлеченные файлы. Если же у вас не все так хорошо, как хотелось бы, тогда придется созерцать другие надписи, например, error... Такое случается (у меня, например), но не отчаивайтесь. Нужно просто немного почитать и англоязычных доков по данному продукту.

В директории samba-2.0.6 находятся пакеты со скриптами. Нас больше всего интересует тот пакет, который позволит нам сделать RPM-пакет, чтобы инсталл

ировать Самбу как RPM.

Для этого делаем следующие шаги (вот здесь вам уже понадобится проявить себя в роли root'а):

$ su
# chown -R root:root samba-2.0.6
# cd samba-2.0.6/packaging/RedHat
# sh makerpms.sh

Вряд ли это займет много времени (смотря, какая у вас конфигурация ПК). Если все прошло успешно, тогда будут созданы следующие файлы:

/usr/src/redhat/RPMS/i386/samba-2.0.6-19990228.i386.rpm
/usr/src/redhat/SRPMS/samba-2.0.6-19990228.src.rpm

Если все нормально и никаких ошибок нет, тогда остается только проинсталлировать этот пакет:

# rpm -Uvh /usr/src/redhat/RPMS/i386/samba-2.0.6*.i386.rpm

Если же у вас возникли проблемы при создании RPM-пакета (это наблюдалось при установке Самбы 2.0.6 на Slackware 7.0), тогда придется обойтись без него и, как говорится "пойти другим путем".

Извлекаем файлы из архива samba-2.0.6.tar.gz:

tar -zxvf samba-2.0.6.tar.gz

переходим в созданную директорию:

cd samba-2.0.6
переходим в директорию с документацией:
cd /docs/textdocs

читаем (посредством редактора ViM) данный файл (который прольет свет на наши дальнейшие действия):

vi UNIX_INSTALL.txt

возвращаемся к директории samba-2.0.6:

cd samba-2.0.6

набираем (сначала можно это делать как простой пользователь (user), а перед использованием команды make install придется набрать su, чтобы "стать" root'ом):

$ ./configure

$ make

$ su

# make install
Дальше мы рассмотрим создание нового пользователя и группы, а также некоторых каталогов. Кроме этого, мы изменим пару файлов, чтобы можно было использовать Samba Web Administration Tool (SWAT).

Так как наш уровень секретности (security level) равен shares, создадим определенную учетную запись нашего гостя (guest).

Нового пользователя будем именовать smbuser, а группу, к которой он будет принадлежать - smb group.

Кроме этого, имеем еще несколько пользователей, например, "ika" и "serg". Все файлы, которые доступны посредством записи в smb.config public share=yes будут доступны пользователю "smbuser" и принадлежать группе "smb group".

Если у вас есть Linuxconf (очень нужная программа!), то создание пользователя и группы покажется вам сказкой. Работать в ней очень просто и, главное, все понятно. РЕКОМЕНДУЮ использовать ЕЕ при создании пользователя и группы.

Если же у вас возникнут какие-нибудь проблемы или окажется, что данной программы у вас нет (в это с трудом верится), тогда создайте пользователя с помощью консольной команды useradd и аналогично группу командой groupadd.

Создали группу "smb group" и пользователя "smbuser" (домашняя директория новосозданного пользователя должна находится в /home/public).

Теперь можете отключить вход в систему пользователю "smbuser", так как он нам фактически не понадобится.

Public Directory

Итак, директорию public мы уже имеем (в каталоге /home). Данная директория должна принадлежать пользователю "smbuser" и группе "smb group". Так как файлы в директории должны ВСЕГДА принадлежать группе "smb group", то нам придется установить соответствующий SGID для данной группы. Так же при прописке SGID'а стоит обратить внимание на то, что директория /home/public должна иметь открытый доступ для чтения и для записи.

Сделав выводы из вышеперечисленного, устанавливаем SGID:

chown smbuser:smb /home/public

# chmod 2777 /home/public

Что у нас получилось? Теперь каждый файл, который создается в /home/public будет принадлежать группе "smb group" в независимости от того, кто создал этот файл.

Data Directory

Моя "data directory" /home/samba/data. Данная директория должна быть доступна только некоторым пользователям (тем, которые принадлежат группе "smb group"). Исходя из этого, делаем следующие действия:

# mkdir /home/samba			

# chown smbuser:smb /home/samba	

# chmod 2770 /home/samba 

# mkdir /home/samba/data

# chown smbuser:smb /home/samba/data

# chmod 2770 /home/samba/data

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

Чтобы более красочно привести пример настройки SAMB'ы и получить доступ к созданным каталогам, я добавляю себя к "smb group". Делаю я все это через уже упоминавшуюся программу Linuxconf. Если у вас с ней проблемы, тогда вам остается только использовать команду usermod или же все прописывать "ручками" в файле /etc/group (последнее НЕ РЕКОМЕНДУЕТСЯ, хотя если вы уверены в том, что делаете, тогда...).

Теперь проверьте ваш файл hosts (/etc/hosts). В нем должны быть следующие записи (здесь приведится пример для моей машины):

/etc/hosts

127.0.0.1 localhost localhost.localdomain

192.168.0.1 elk

192.168.0.2 ika

192.168.0.3 serg
Теперь создайте lmhosts-конфигурационный файл. Данный файл будет отображать hostnames (или IP-адреса) к NetBIOS-компьютерам. Данный файл будет выглядеть примерно так:
# /etc/lmhosts

# здесь слева hostname (можно указывать IP-адресом),

# а справа NetBIOS-имя

localhost elk

ika ika

serg serg

Использование SWAT

Для использования SWAT'а проверим два конфигурационных файла:

services (/etc/services) и inetd.conf (/etc/inetd.conf).

По умолчанию SWAT запускается с 901-го порта. Это можно изменить, но в данном документе приводится пример использования SWAT'а именно на этом порту, поэтому пока оставьте все так как есть.

Итак, проверяем вышеуказанные конфигурационные файлы:

>/etc/service
swat 901/tcp 	# в данном случае SWAT-service
		# используется через inetd

Если эта строка присутствует в /etc/service, тогда все ОК. Если строки нет, тогда добавьте ее в конец данного файла. Данная строка говорит нам о том, что SWAT запускается на 901-м порту.

Теперь в файл inetd.conf (/etc/inetd.conf) добавляем следующую строку:

swat stream tcp nowait.400 root /usr/sbin/swat swat

Securing SWAT

Для усиления безопасной работы посредством SWAT'а не помешает изменить строку выше на (использование TCP wrappers):

swat stream tcp nowait.400 root /usr/sbin/tcpd /usr/sbin/swat

Обсуждение TCP wrappers выходит за рамки данной статьи, поэтому я рекомендую вам # man hosts.allow.

Теперь переходим в файл /etc/hosts.deny и просматриваем его. Он должен иметь запись:

ALL: ALL

Добавим в /etc/hosts.allow следующие строки:

swat: 127.0.0.1 192.168.0.

Это позволит нашим пользователям (elk, ika, serg) обращаться к SWAT.

Запуск SWAT

Сначала перезапустим inetd:

# killall -HUP inetd

Теперь в браузере (какой вам больше нравится, мне, например, Lynx) набираем:

http://192.168.0.1:901

Если все правильно настроено, то вы увидите форму, в которой нужно будет ввести имя пользователя (username) и пароль (password). Здесь введите имя пользователя "root" и соответственно пароль суперпользователя (root'a).

Конфигурирование Самбы (Configuring Samba)

Итак, SWAT запущен, и теперь вы можете ознакомить себя с его работой. Как вы видите, SWAT - это программа с прекрасным интерфейсом, которая создает /etc/smb.conf конфигурационный файл. ВНИМАНИЕ! Если вы уже имеете /etc/smb.conf, то SWAT затрет форматирование и комментарии в нем. Но в то же время, SWAT создаст для вас хороший конфигурационный файл. Вот пример моего /etc/smb.conf файла:

# Samba config file created using SWAT
# from elk (192.168.0.1)
# Date: 1999/10/22 20:12:11 
# Global parameters
 
 workgroup = elk@net
 server string = Samba SMB Server
 nterfaces = 192.168.0.1/24 127.0.0.1/24
 bind interfaces only = Yes
 security = SHARE
 log file = /var/log/samba/log.%m
 max log size = 50
 read bmpx = No
 time server = Yes
 socket options = TCP_NODELAY
 os level = 65
 preferred master = Yes
 dns proxy = No
 wins support = Yes
 guest account = smbuser
 hide dot files = No 

 [public]

 comment = Public
 path = /home/public
 read only = No
 create mask = 0664
 directory mask = 0775
 guest ok = Yes 

 [data]

 comment = Data
 path = /home/samba/data
 read only = No
 create mask = 0660
 directory mask = 0770
 guest ok = Yes

Starting Samba

Теперь вы можете запустить SAMB'у. Это можно сделать или посредством SWAT'a или же из командной строки. Если вы хотите использовать SWAT, тогда идите на "Status page" и запускайте SMBD и NMBD. Если это уже было запущено, тогда просто остановите и перезапустите вышеуказанные демоны, чтобы увидеть ваш новый конфигурационный файл.

С командной строки запуск данных демонов выглядит так:

 # /etc/rc.d/init.d/smb stop
 # /etc/rc.d/init.d/smb start

У вас все работает? Чудесно. Теперь протестируем нашу SAMB'у.

Testing Samba

Посмотрим, работает ли это реально:

# smbclient -L localhost

Выполняющаяся программа попросит вас ввести пароль. Здесь можете просто нажать ENTER. Потом вы увидите примерно следующее:

Domain=[HOROSHO] OS=[Unix] Server=[Samba 2.0.6]

Sharename      Type      Comment

---------      ----      -------

public         Disk      Public

data           Disk      Data

IPC$           IPC       IPC Service (Samba SMB Server)

Server               	 Comment

---------            	 -------

elk                      Samba SMB Server

Workgroup            	 Master

---------            	 -------
HOROSHO             	 elk

Если вам удалось все это увидеть (примерно это, потому что данный пример приведен для моей машины), тогда все ОК. Нам остается только внести некоторые изменения в ПК, которые работают под Windows OS.

Configuring Windows

На ПК elk (это я) запущен SAMBA-сервер. ПК serg и ika работают под Windows. Сейчас самое время уделить внимание машинам под Windows. На мой взгляд, доступ к SAMBA серверу из под Windows не представляет ничего сложного. Попробую вас в этом убедить на конкретных примерах.

Сначала удостоверимся, что свойства сети настроены так, как нам надо. Для этого, заходим в свойства сети (щелкаем правой клавишей на значке рабочего стола "Сетевое окружение" ("Network Neighborhood") и выбираем "Свойства"). Далее заходим на закладку "Компьютер" ("Identification"). В поле "Имя компьютера" ("Computer name") прописываем ika, в закладке "Рабочая группа" ("Workgroup") прописываем HOROSHO, ну а в закладке "Описание компьютера" ("Computer Description") можете прописать что угодно.

Дальше переходите на закладку "Управление доступом" ("Access Control") и поставьте флажок в поле "На уровне ресурсов" ("Share-level access control").

Теперь переходите в самую первую закладку "Конфигурация" ("Configuration") и нажмите на кнопке "Доступ к файлам и принтерам" ("File and print sharing"). В появившемся окне необходимо поставить флажки в поле "Файлы этого компьютера можно сделать общими" ("I want to be able to give others access to my files") и "Принтеры этого компьютера можно сделать общими" ("I want to be able to allow others to print to my printer(s)").

И, наконец, мы указываем Windows, что elk является сервером WINS и именно он будет browse master'ом. Для этого переходим в свойства TCP/IP протокола. В появившемся окне выбираем "Конфигурация WINS" ("WINS Configuration"). Ставим флажок в поле "Включить распознавание WINS" ("Enable WINS Resolution"). В появившемся поле "Основной сервер WINS" ("WINS Server Search Order") прописываем IP-адрес сервера (elk'a) - 192.168.0.1 и нажимаем "Добавить" ("Add") или просто [ENTER]. Переходим на закладку "Дополнительно" ("Advanced") и кликаем на "Browse Master" в левом окне, а в правом устанавливаем значение "Disabled". Вот и все. Теперь остается только несколько раз нажать кнопку "ОК" и перезагрузить Windows.

В Windows NT экраны свойств сети немножко отличаются, но главной концепции построения они не меняют.

После перезагрузки Windows смело жмите на "Сетевое окружение" ("Network Neighborhood") и вы сможете увидеть SAMBA-сервер, а также зашаренные ресурсы: "public" и "data". Теперь вы можете просто подключить данные ресурсы как сетевые диски и присвоить им drive letters.

Вот и все. Остается только ввести вас в краткий курс секретности SAMB'ы.

Securing Samba

Чем больше вы прибавляете сервисов на вашей машине, тем больше дырок у вас возникает. Это не секрет. Сейчас вы добавили SMB-сервис. Как его защитить?

Вариант ╧ 1.

В файл smb.conf (/etc/smb.conf) можно ввести следующие строки:

interfaces = 192.168.0.1/24 127.0.0.1/24
bind interfaces only = Yes

Вариант ╧ 2 (более параноидальный). Фильтрация портов

SAMBA использует 137-139 порты. Есть смысл просто заблокировать их из TCP и UDP. Если у вас стоит ядро версии 2.0 (это можно легко узнать набрав в консоли uname -a), тогда для фильтрации используйте ipfwadm, а если ядро версии 2.1 или 2.2 - ipchains.

Вот как это делается с помощью ipfwadm:

# Добавляем нижеприведенные записи
в /etc/rc.local: 

ipfwadm -I -P tcp -a deny -S any/0 137:139 -W eth0 
ipfwadm -I -P udp -a deny -S any/0 137:139 -W eth0
ipfwadm -O -P tcp -a deny -S any/0 137:139 -W eth0
ipfwadm -O -P udp -a deny -S any/0 137:139 -W eth0

Это запретит (deny) все входящие и исходящие TCP и UDP пакеты для 137-139 портов на интерфейсе eth0. Для более подробной информации рекомендую вам почитать man ipfwadm.

При наличии ядер 2.1-2.2 вы сможете сделать это с помощью ipchains:

# Добавляем нижеприведенные записи в /etc/rc.local: 

ipchains -A input -p tcp -j DENY --destination-port 137:139 -i eth0
ipchains -A input -p udp -j DENY --destination-port 137:139 -i eth0
ipchains -A output -p tcp -j DENY --destination-port 137:139 -i eth0
ipchains -A output -p udp -j DENY --destination-port 137:139 -i eth0

Как видите, ничего нового и сложного вы не увидели. И ipfwadm и ipchains выполняют одно и тоже, только для разных версий ядер.

Вы можете также установить один из трех уровней секретности при входе на ваш SAMBA сервер (user-level security, share level security, domain level security).

О назначении каждого из них вы можете прочитать в предыдущей моей статье о SAMB'е на сайте LinuxRSP . Также рекомендую вам не лениться и хоть изредка заглядывать в HOWTO, и, кроме этого, иногда заглядывайте на домашнюю страничку SAMB'ы.