Настройка samba

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

Как видно все работает. Можно пользоваться :)

Алексей (не проверено)

Добрый день. А можете пояснить, для чего в указанном примере нужен параметр "force group = smb_read" ?

Спасибо.

Некит (не проверено)

Данная директива необходима, чтобы владелец (групповой) записанных файлов и папок был smb_read

Да, это я понял.Получается, на все расшаренные папки сначала ставим владельца @smb_write, а потом то, что создается через самбу - имеет владельца @smb_read, так?

Я вот и пытаюсь понять - зачем? Что это дает? Почему не делается Force group - @smb_write ?

Спасибо.

 

PS. Ваша Капча - просто космос. =) 

 

nekit

Да, это я понял.Получается, на все расшаренные папки сначала ставим владельца @smb_write, а потом то, что создается через самбу - имеет владельца @smb_read, так?

Не совсем так. Раньше идея была в том, чтобы файлы шар на сервере принадлежали отдельному пользователю (думалось, что так безопаснее). То есть все файлы и директории имели владельца smb_user:smb_read. Этот пользователь и группа создавались руками и никак не использовались для авторизации на сервере.. Сейчас я от этого ушел, и везде ставлю root:wheel.

Сами же пользователи - создаются на сервере и включаются в группу smb_read, чтобы они имели право доступа к шаре (задано в директивах - valid users и read list). Если же нужно разрешить пользователю запись, то на сервере этот пользователь включался в группу smb_write (директива - write list).

Я вот и пытаюсь понять - зачем? Что это дает? Почему не делается Force group - @smb_write ?

Такая запись директивы не корректна. Здесь нужно указывать конкретного пользователя, который будет владельцем файлов.

В настоящее время настройки шар у меня выглядят так (может понятнее будет):

[Video] comment = Video path = /mnt/media/samba/video browseable = yes public = no writable = yes force create mode = 0644 force directory mode = 0755 create mask = 0644 directory mask = 0755 force user = root force group = wheel valid users = @smb_video_read, @smb_video_write write list = @smb_video_write read list = @smb_video_read [Music] comment = Music path = /mnt/media/samba/music browseable = yes public = no writable = yes force create mode = 0644 force directory mode = 0755 create mask = 0644 directory mask = 0755 force user = root force group = wheel valid users = @smb_music_read, @smb_music_write write list = @smb_music_write read list = @smb_music_read

В данном случае, чтобы юзер имел доступ к этим шарам, его нужно добавить в группу smb_video_read или smb_music_read, либо в обе для доступа к обоим шарам. Для записи пользователь добавляется в соответствующие группы.

# id vasya uid=1003(vasya) gid=1003(vasya) groups=1003(vasya),10003(smb_music_read),10005(smb_video_read),10010(smb_video_write)

PS. Ваша Капча - просто космос. =)

Неужели вопросы сложные ))).

Алексей (не проверено)

Да, спасибо за уточнение про права - теперь понял.

Про Капчу: да нет, я не про сложность, а просто приятно видеть нормальные человеческие вопросы. =)

Добавить комментарий

CAPTCHA
RFC 5321
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
Яндекс.Метрика