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 на
Извлекаем файлы из архива 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'ы.
Slackware 7.0), тогда придется обойтись без него и, как говорится "пойти другим путем".