30 янв. 2013 г.

Различные настройки Samba для разных клиентов

Samba умеет определять, какие настройки применять для различных подключенных к ней клиентов. Иногда это очень выручает. Для этого используются, во-первых, внутренние переменные (%m, %I и так далее), во-вторых, опции config file и include
Если вкратце, include добавляет параметры (из файла, на который указывает) к описанным в smb.conf, при этом при совпадении переопределяются опции, указанные в smb.conf ранее строки include = /path/to/file; параметры, указанные после, остаются неизменными. Параметр config file, напротив, заменяет собой smb.conf, переопределяя при совпадении все, что ниже него по тексту конфига. Подробнее о параметрах и внутренних переменных (с примерами), можно поглядеть в официальной документации проекта Samba.
Пример из жизни. Есть файловый сервер, на котором две шары: public и private, и три клиента: pc1, pc2, pc3, каждый из которых должен иметь доступ к некоторым ресурсам: pc1 - к public, pc2 - к private, pc3 - к public и private. Чтобы это реализовать, потребуются вышеописанные опции. Итак, содержимое конфигов: 

smb.conf: 
 ##for pc2
config file  = /etc/samba/smb.conf-%m
   workgroup = WORK
   server string = %h server
   netbios name = server
   dns proxy = no
   log file = /var/log/samba/log.full
   log level = 1
   max log size = 10000
   syslog = 0
   panic action = /usr/share/samba/panic-action %d
   security = share
   encrypt passwords = true
   passdb backend = tdbsam
   obey pam restrictions = yes
   invalid users = root
[public]
        path = /public
        comment = Public Resource 
        guest ok = yes
        browseable = yes
        writable = yes
        force user = nobody
        force create mode = 0666
        force directory mode = 0777

##for pc3
include = /etc/samba/smb-share.conf-%m
smb.conf-pc2:
   log file = /var/log/samba/log.private
   syslog = 0 
[private]
        path = /private
        comment = Private Resource
        guest ok = yes
        browseable = yes
        writable = yes
        force user = nobody
        force create mode = 0666
        force directory mode = 0777 
 smb-share.conf-pc3:
[private]
        path = /private
        comment = Private Resource
        guest ok = yes
        browseable = no
        writable = yes
        force user = nobody
        force create mode = 0666
        force directory mode = 0777
Такая конфигурация предоставляет по умолчанию всем пользователям одну шару public. Фишка рассматриваемых параметров в том, что они срабатывают только при нахождении файла, указанного их аргументом. Отсутствие файла не является ошибкой конфигурирования - информации в лог не пишется, сам параметр игнорируется.
Таким образом, только когда к файловому серверу подключаются клиенты с NetBIOS-именами pc2 и pc3 (или с заданными IP-адресами, если используется переменная %I), срабатывают, соответственно, config file и include. В первом случае клиент pc2 видит одну шару private (плюс его действия начинают записываться в отдельный лог-файл log.private с увеличенным loglevel), во втором - клиент pc3 видит две шары - private и public и для него используются настройки из основного smb.conf.