Настраеваем Samba
Материал из LLUG.
Тема данной статьи, на сегодняшний день, является довольно хорошо освещенной. Настолько хорошо, что до недавнего времени я даже не думал писать сей документ. Однако, мой личный опыт показывает, что самым распространенным видом серверов является файл-сервер. Соответственно, большинство вопросов у начинающих линуксоидов возникает по настройке samba, на основе которой и строится последний. Я попытаюсь разъяснить некоторые моменты касательно начальной настройки samba. Касаться всех возможных опций я не буду, по причине огромного их количества. В конце концов, все они очень хорошо описаны в документации, прилагаемой к программному пакету. Также не буду я касаться настройки сервера печати. Так как заниматься настройкой такого сервера мне пока не приходилось..
Вся настройка сводится к редактированию конфигурационного файла по адресу /etc/samba/smb.conf либо /etc/smb.conf или /etc/smb/smb.conf(зависит от версии дистрибутива).
Сразу оговорюсь, что использование Samba не ограничивается только созданием файлового сервера. С помощью Samba можно сканировать удаленные ресурсы а также монтировать их. Но об этом немного позже.
Рассматриваться будет Samba версий 2.* и 3.*. С точки зрения настройки, различие в версиях не большое. Такие места я оговорю в ходе описания настройки.
Давайте рассмотрим типичный файл smb.conf.
Любая строка, которая начинается с ; или # является комментарием и будет проигнорирована.
=================Глобальные настройки=================
[global]
- workgroup = NT-Domain- or Workgroup- Здесь описывается имя рабочей группы или # имя вашей рабочей группы
workgroup =
- Описание вашей машины (при просмотре сетевого окружения, стоит после имени машины)
server string = File-server
- Имя вашей машины в сети. Иногда отсутствует. Если не пишем - имя будет взято из вывода команды hostname.
- Если нужно - дописывайте эту строку самостоятельно. Для чего это вам и нужно ли вообще - решайте сами.
netbios name = Server
- Дополнительное имя вашей машины в сети. То-есть в сети появиться еще одна машина с аналогичным содержимым.
- Для чего это вам и нужно ли вообще - решайте сами.
netbios aliases = AliasServer
- Ограничение на присутствие вашей машины в подсетях. Или из какой подсети вы будете
- доступны. Если вы хотите разрешить несколько подсетей пропишите их через пробел. Допускается написание имени интерфейса.
- Из соображений безопасности настоятельно не рекомендуется включать доступ извне вашей сети.
hosts allow = 10.10.20. 127.0.0. eth1
- Автоматическая загрузка списка принтеров
printcap = /etc/printcap
load printers = yes
- Схема печати. Я не пробовал.
- bsd, sysv, plp, lprng, aix, hpux, qnx
- printing = lprng
- Имя гостевого входа (чаще всего, по умолчанию "nobody"). Другими
- словами можно ли получить доступ к вашим сетевым ресурсам не имея учетной
- записи на вашей машине. Но помните, такой пользователь в вашей системе должен существовать
- (если вы отрываете эту опцию), иначе ничего не выйдет. #Обратите внимание, описывается именно Linux-пользователь. Samba имеет свой список пользователей, но об этом позже.
guest account = nobody
- Куда писать сообщения о ошибках. При ошибках в работе samba настоятельно рекомендую почитать.
- Создается как общий лог работы samba и netbios так и логи отдельных пользователей.
log file = /var/log/samba/%m.log
- Максимальный размер этого файла (в Kb). Если не хотите ограничивать - 0
max log size = 500
- Уровень доступа. Обычно стоит на уровне пользователя (security = user). В случае
- security=share в скрытой форме используется механизм аутентификации на основе имени и
- пароля. Если база паролей хранится на другом SMB-сервере, то используется значение
- securety=server и password server=имя NT-сервера. Если сервер является членом домена, то
- используется securety=domain, и самба-машина зачисляется в домен с паролем, указанном в
- smb passwd file. Последнее не пробовал.
security = user
; password server =
- Если мы проставим security=share у нас появиться возможность более гибко #конфигурировать вход пользователей. Для этого нам необходимо добавить параметр
map user = bad user
- возможны варианты:
- map user = never - не использовать (по умолчанию стоит эта опция)
- map user = bad user - Если пользователь не угадал пользователя - вход как guest
- map user = bad password - даже если пользователь не угадает пароль вход будет разрешен.
- Минимальный допустимый размер имени пользователя и его пароля.
; password level = 8 ; user level = 8
- Использовать ли шифрование паролей и где храниться файл с паролями.
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
- По мануалу, вроде, синхронизация с UNIX-базой паролей. Не пробовал.
; unix password sync = Yes
; passwd program = /usr/bin/passwd %u
; passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *asswd:*all*authentication*tokens*updated*successfully*
- Где искать список соответствия пользователей самбы и Linux-пользователей. Пропало в последних 2.* и всех версиях 3.*.
user map = /etc/samba/smbusers
- Гибкое конфигурирование работы сервера. Я здесь оставил все по умолчанию. По мануалу, вроде, можно назначать свой конфиг для каждой машины.
include = /etc/samba/smb.conf.%m
- Строка возвращаемая клиенту. Подробнее смотри speed.txt и manual pages
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
- Указывает на каком интерфейсе должна работать самба (или в какой сети находится сервер).
- Можно прописать несколько значений разделяя их пробелами. Допускается написание имени интерфейса.
- Из соображений безопасности настоятельно не рекомендуется включать доступ извне вашей сети.
interfaces = 10.10.20.1/24 eth2
- Поставив здесь yes вы разрешите машинам с Windows95 заходить на вашу машину.
domain logons = yes
- Эти две строки решают проблемы с кодировками в версиях 2.*. Если на открытую вами шару слить файлы с
- названием содержащим русские символы то они будут читаемы и в Linux. Если кодировкой вашей системы является ср1251 - пишите соответствующее значение.
client code page=866
character set=koi8-r
- Эти две строки решают проблемы с кодировками в Samba 3.*.
dos charset=866
unix charset=koi8-r
- Рассылать на эти хосты оповещение о том что в сети появилась новая машина.
- Для чего это надо. Дело в том что машины с Windows 9x не видят в сети себе-подобных
- (в том числе и пингвина, прикинувшегося "мастдаем") пока с них не придет по сети какой-нибудь пакет.
- Если включим эту строку, сервер разошлет пустой пакет по указанным адресам. Обычно здесь прописывают броадкаст
- необходимых подсеток.
remote announce = 10.10.20.255 10.10.10.44
- Насколько я понял, эта опция разрешает самбе быть контролером домена
domain master = yes
- Включение поддержки WINS.
wins support = yes
- =================Сетевые ресурсы на вашей машине====================
- Здесь вы можете открыть домашние папки для юзеров зарегистрированных на вашей машине,
- общедоступные ресурсы (например если вы поднимаете общий файл-сервер) либо ресурсы для
- определенных юзеров
- Здесь вся настройка сводится к указанию папки, доступ к которой вы открываете и настройке
- прав доступа.
- Применяются такие команды:
comment - комментарий ресурса path - путь к папке volume - dos-метка диска guest ok - доступ к ресурсу без аутентификации read only - запрет на запись writable - разрешение на запись write list - список юзеров, которым разрешена запись read list - список юзеров, которым запрещена запись hide dot files - считать файлы, имя которых начинается с точки скрытыми hide files - файлы определенные этим шаблоном считать скрытыми veto files - файлы определенные этим шаблоном будут недоступны delete veto files - разрешение или запрет на удаление недоступных для пользователя файлов.
- Используется когда пользователь пытается удалить папку содержащую запрещенные файлы
- Эта шара открывается для каждого зарегистрированного самба-пользователя и ведет в его домашнюю папку (/home/...).
- У меня выключено за ненадобностью.
[homes] comment = Home Directories readonly=no browseable = no writable = yes
- Дальше идут примеры шар.
- Un-comment the following and create the netlogon directory for Domain Logons
- [netlogon]
- comment = Network Logon Service
- path = /home/netlogon
- guest ok = yes
- writable = no
- share modes = no
- Un-comment the following to provide a specific roving profile share
- the default is to use the user's home directory
- [Profiles]
- path = /home/profiles
- browseable = no
- guest ok = yes
- NOTE: If you have a BSD-style print system there is no need to
- specifically define each individual printer
- [printers]
- comment = All Printers
- path = /var/spool/samba
- browseable = no
- Set public = yes to allow user 'guest account' to print
- guest ok = no
- printable = yes
- This one is useful for people to share files
- [tmp]
- comment = Temporary file space
- path = /tmp
- read only = no
- public = yes
- A publicly accessible directory, but read only, except for people in
- the "staff" group
- [public]
- comment = Public Stuff
- path = /home/samba
- public = yes
- writable = yes
- printable = no
- write list = @staff
- Other examples. #
- A private printer, usable only by fred. Spool data will be placed in fred's
- home directory. Note that fred must have write access to the spool directory,
- wherever it is.
- [fredsprn]
- comment = Fred's Printer
- valid users = fred
- path = /homes/fred
- printer = freds_printer
- public = no
- printable = yes
- A private directory, usable only by fred. Note that fred requires write
- access to the directory.
- [fredsdir]
- comment = Fred's Service
- path = /usr/somewhere/private
- valid users = fred
- public = no
- writable = yes
- printable = no
- a service which has a different directory for each machine that connects
- this allows you to tailor configurations to incoming machines. You could
- also use the %u option to tailor it by user .
- The %m gets replaced with the machine that is connecting.
- [pchome]
- comment = PC Directories
- path = /usr/pc/%m
- public = no
- writable = yes
- A publicly accessible directory, read/write to all users. Note that all files
- created in the directory by users will be owned by the default user, so
- any user with access can delete any other user's files. Obviously this
- directory must be writable by the default user. Another user could of course
- be specified, in which case all files would be owned by that user instead.
- [public]
- path = /usr/somewhere/else/public
- public = yes
- only guest = yes
- writable = yes
- printable = no
- The following two entries demonstrate how to share a directory so that two
- users can place files there that will be owned by the specific users. In this
- setup, the directory should be writable by both users and should have the
- sticky bit set on it to prevent abuse. Obviously this could be extended to
- as many users as required.
- [myshare]
- comment = Mary's and Fred's stuff
- path = /usr/somewhere/shared
- valid users = mary fred
- public = no
- writable = yes
- printable = no
- create mask = 0765
Привожу свои открытые ресурсы.
[public]
path=/home/samba/public
comment=File-share
writable = yes
guest ok=yes
[CD]
path=/mnt/cdrom
comment=For read CDROM
guest ok=yes
writable=no
В принципе, все. Осталось проверить и запустить.
После конфигурирования пробуем команду testparm -v|less. Для чего тут необходим less, думаю, объяснять не надо... Будут протестированы указанные параметры самбы. Если вы видите, что какойто параметр вы не указывали а он здесь есть, не пугайтесь, это значения по умолчанию. Кстати, таким образом очень хорошо изучать Samba на более глубоком уровне - прогоняем, смотрим параметр, читаем мануал. Кстати мануал по самбе, на мой взгляд, один из лучших. Хоть и огромного размера, зато все описано очень доходчиво и хорошо структурировано.
Если проверка не выявила ошибок, перезапускам samba.
Для RedHat-подобных систем:
#/etc/rc.d/init.d/smb restart
Для BSD-подобных (например Slackware):
#/etc/rc.d/samba restart
Еще несколько необходимых вам команд:
smbpasswd - Добавить пользователя или изменить пароль существующему.
smbpasswd -a user - добавить пользователя. Обратите внимание, что должен быть создан Linux-пользователь с таким же именем.
smbpasswd -x user - удалить пользователя.
smbpasswd user - сменить пароль.
Пароли хранятся в smbpasswd. Сведения о пользователях в smbusers.
smbclient -L host - укажет все открытые шары на удаленной машине + некоторую интересную информацию.
smbmount - монтирование удаленной шары. Формат такой же как и у mount. Отличие в наличии дополнительных примочек. Подробнее смотрите man smbmount
Если, при монтировании, возникают проблемы с кодировкой русскоязычных названий папок и файлов, попробуйте в конце дописать -o codepage=866,iocharset=koi8-r
За сим все.
Автор: Shturman

