Понадобилось мне сделать домашнее хранилище для музыки, фильмов и всякой разнородной инфы. Итак, на сегодня задача следующая - настроить самбу, сделать шары и авторизацию пользователей. Настройка будет проводиться на ОС 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
Да, спасибо за уточнение про права - теперь понял.
Про Капчу: да нет, я не про сложность, а просто приятно видеть нормальные человеческие вопросы. =)
Добавить комментарий