Понадобилось мне сделать домашнее хранилище для музыки, фильмов и всякой разнородной инфы. Итак, на сегодня задача следующая - настроить самбу, сделать шары и авторизацию пользователей. Настройка будет проводиться на ОС FreeBSD :).
Версия FreeBSD у меня следующая:
# uname -a
FreeBSD srv-home 6.4-RELEASE-p7 FreeBSD 6.4-RELEASE-p7 #0: Sat Oct 3 20:59:38 YEKST 2009 root@home.ru:/usr/obj/usr/src/sys/HAUNTED i386
Идем в порты (обновляем их если нужно) и ставим самбу:
# cd /usr/ports/net/samba32
# make install clean
Я выбрал следующие опции:
- CUPS
- WINBIND
- ACL_SUPPORT
- QUOTAS
- UTMP
- POPT
После установки правим конфиг /usr/local/etc/smb.conf. У меня получился такой:
#======================= Global Settings =====================================
[global]
# Имя рабочей группы
workgroup = HOME
# Имя сервера в сети
server string = Documents
# NetBIOS имя
netbios name = srv-home
# Режим работы самбы. Возможные значения - share, user, server, domain и ads.
# Многим пользователям обычно хватает режима - user
security = user
# Подсети, которым разрешен доступ к самбе
hosts allow = 192.168.7. 127.
# Загружать принтеры? Мне принтеры не нужны, я выключил эту опцию
load printers = no
printing = bsd
#guest account = nobody
# Путь к лог файлу. Я все отправляю в /dev/null, так samba работает чуток быстрее. Но для отладки логи нужны.
#log file = /var/log/samba/log.%m
log file = /dev/null
log level = 0
max log size = 50
# Шифровать пароли
encrypt passwords = yes
# Определяем в каком хранилище будут хранится пароли
passdb backend = tdbsam
include = /usr/local/etc/smb.conf.%m
# Оптимизация работы самбы, чуток добавляет скорости
max xmit = 65535
socket options = TCP_NODELAY SO_SNDBUF=32768 SO_RCVBUF=32768 SO_KEEPALIVE
# Интерфейс, на котором будет работать самба
interfaces = 192.168.7.250/24
local master = yes
domain master = yes
preferred master = yes
# Уровень ОС
os level = 65
# Разрешить netlogons?
domain logons = no
# Включить поддержку wins
wins support = yes
# Включить сервер времени
time server = yes
# Кодировка, в которой будут выводиться сообщения самбы в stdout и stderr
display charset = cp866
# Системная кодировка
unix charset = koi8-r
# Кодировка для DOS клиентов
dos charset = cp866
# Чувствительность к регистру
case sensitive = no
# Читать DOS атрибуты первыми?
#store dos attributes = yes
# Эти скрипты используются контроллером домена для работы с машинами, пользователями и группами
#add machine script = /usr/local/bin/ldapaddmachine '%u' computers
#add user script = /usr/local/bin/ldapadduser '%u' people
#add group script = /usr/local/bin/ldapaddgroup '%g'
#add user to group script = /usr/local/bin/ldapaddusertogroup '%u' '%g'
#delete user script = /usr/local/bin/ldapdeleteuser '%u'
#delete group script = /usr/local/bin/ldapdeletegroup '%g'
#delete user from group script = /usr/local/bin/ldapdeleteuserfromgroup '%u' '%g'
#set primary group script = /usr/local/bin/ldapsetprimarygroup '%u' '%g'
#rename user script = /usr/local/bin/ldaprenameuser '%uold' '%unew'
#============================ Share Definitions ==============================
[homes]
comment = Home Directories
browseable = no
writable = 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
writable = no
printable = yes
[Video]
comment = Video
path = /mnt/media/samba/video
browseable = yes
public = no
writable = yes
force user = smb_user
force group = smb_read
valid users = @smb_read, @smb_write
write list = @smb_write
read list = @smb_read
[Music]
comment = Music
path = /mnt/media/samba/music
browseable = yes
public = no
writable = yes
force user = smb_user
force group = smb_read
valid users = @smb_read, @smb_write
write list = @smb_write
read list = @smb_read
[Distrib]
comment = Distrib
path = /mnt/media/samba/distrib
browseable = yes
public = no
writable = yes
force user = smb_user
force group = smb_read
valid users = @smb_read, @smb_write
write list = @smb_write
read list = @smb_read
[Wallpapers]
comment = Wallpapers
path = /mnt/media/samba/wallpapers
browseable = yes
public = no
writable = yes
force user = smb_user
force group = smb_read
valid users = @smb_read, @smb_write
write list = @smb_write
read list = @smb_read
Некоторые пояснения к конфигу:
- force user - это пользователь, под которым samba будет записывать данные в шары
- force group - тоже самое, только для группы
- valid users - пользователи и/или группы, которым разрешен доступ
- write list - пользователи и/или группы, которым разрешена запись в папку
- read list - пользователи и/или группы, которым разрешено чтение
В строках, где значение параметра начинается с @, это значит, что это правило применяется не к одному пользователю, а к группе.
Так же нужно создать сами папки и дать нужные права на них:
# mkdir /mnt/media/samba/video
# mkdir /mnt/media/samba/music
# mkdir /mnt/media/samba/distrib
# mkdir /mnt/media/samba/wallpapers
# chown smb_user:smb_write /mnt/media/samba/*
# chmod 750 /mnt/media/samba/*
Когда все готово, то можно добавить самбу в автозагрузку и запустить ее.
# echo 'smbd_enable="YES"' >> /etc/rc.conf
# echo 'nmbd_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/samba start
Проверяем работоспособность
# sockstat | grep -E "smbd|nmbd"
В итоге должны получить что-то подобное:
root smbd 967 20 tcp4 *:445 *:*
root smbd 967 21 tcp4 *:139 *:*
root nmbd 962 9 udp4 *:137 *:*
root nmbd 962 10 udp4 *:138 *:*
Как видно все работает. Можно пользоваться :)
чт, 27/08/2020 - 21:28
Добрый день. А можете пояснить, для чего в указанном примере нужен параметр "force group = smb_read" ?
Спасибо.
пт, 28/08/2020 - 08:19
Данная директива необходима, чтобы владелец (групповой) записанных файлов и папок был smb_read
пт, 28/08/2020 - 12:07
Да, это я понял.Получается, на все расшаренные папки сначала ставим владельца @smb_write, а потом то, что создается через самбу - имеет владельца @smb_read, так?
Я вот и пытаюсь понять - зачем? Что это дает? Почему не делается Force group - @smb_write ?
Спасибо.
PS. Ваша Капча - просто космос. =)
пт, 28/08/2020 - 21:42
Не совсем так. Раньше идея была в том, чтобы файлы шар на сервере принадлежали отдельному пользователю (думалось, что так безопаснее). То есть все файлы и директории имели владельца smb_user:smb_read. Этот пользователь и группа создавались руками и никак не использовались для авторизации на сервере.. Сейчас я от этого ушел, и везде ставлю root:wheel.
Сами же пользователи - создаются на сервере и включаются в группу smb_read, чтобы они имели право доступа к шаре (задано в директивах - valid users и read list). Если же нужно разрешить пользователю запись, то на сервере этот пользователь включался в группу smb_write (директива - write list).
Такая запись директивы не корректна. Здесь нужно указывать конкретного пользователя, который будет владельцем файлов.
В настоящее время настройки шар у меня выглядят так (может понятнее будет):
В данном случае, чтобы юзер имел доступ к этим шарам, его нужно добавить в группу smb_video_read или smb_music_read, либо в обе для доступа к обоим шарам. Для записи пользователь добавляется в соответствующие группы.
Неужели вопросы сложные ))).
Вск, 30/08/2020 - 01:39
Да, спасибо за уточнение про права - теперь понял.
Про Капчу: да нет, я не про сложность, а просто приятно видеть нормальные человеческие вопросы. =)
Добавить комментарий