Приступаем к настройке
Для начала определимся со структурой каталогов на разделе /FileServer - для примера рассмотрим такой вариант:
/FileServer/etc | Папка будет содержать файлы конфигурации Samba |
/FileServer/netlogon | Папка для скриптов входа в домен |
/FileServer/otdel_1 | Папка 1 отдела |
/FileServer/otdel_N | Папка N отдела |
/FileServer/Public | Общий для всех отделов ресурс |
Соответственно, в основном файле конфигурации /etc/samba/smb.conf прописываем:
include=/FileServer/etc/smb.global include=/FileServer/etc/%U.conf
- то есть мы будет управлять каждым пользователем отдельно. Такое управление выбрано как более гибкое, нежели управление группами пользователей, потому что оно позволяет более жестко контролировать отдельных пользователей в случае необходимости в таком контроле. В обычный ситуации я создаю один конфигурационный файл для всей группы, а для отдельных пользователей делаю на него symlink ("мягкую" ссылку на файл) по имени пользователя.
При этом не забываем следить, чтобы все указанные в конфигурационных файлах каталоги и файлы существовали и имели правильные права. То есть после создания папок на разделе файл-сервера нужно установить на них атрибуты доступа для пользователей:
# chmod 777 /FileServer/otdel* # chmod 777 /FileServer/Public*
Теперь сформируем файл /FileServer/etc/smb.global:
[global] null passwords = false workgroup=MY_DOMAIN netbios name=MyServ server string=File Server character set=KOI8-R client code page=866 unix password sync = yes passwd chat = *new*password* %n\n *new*password* %n\n *success* passwd program = /usr/bin/passwd %u interfaces=eth0 bind interfaces only=True hosts deny=ALL hosts allow=192.168.0.0/255.255.0.0 127.0.0.1 protocol=NT1 security=domain encrypt passwords=yes lm interval=0 oplocks=False level2 oplocks=No
syslog=1 wins support=Yes domain master=Yes local master=Yes preferred master=Yes os level=255 log level=0 log file=/dev/null domain logons=yes logon script=%U.bat create mask=0666 directory mask=0777 security mask=0777 force create mode=0777 nt acl support =yes socket options =SO_KEEPALIVE SO_BROADCAST TCP_NODELAY SO_RCVBUF=4096 SO_SNDBUF=4096 domain admin group = root add user script = /usr/sbin/useradd -d /dev/null -g machines -s /bin/false -M %u logon path = \%L\Profiles\%U
[Profiles] path = /var/lib/samba/profiles browseable = no read only = no create mask = 0600 directory mask = 0700
Проведем анализ - что же мы тут написали. Как видим, у нас есть два раздела: [global] и [Profiles] - первый отвечает за информацию непосредственно о сервере и общих настройках, а второй описывает каталог, в котором будут храниться профили пользователей на сервере. Соответственно, каталог /var/lib/samba/profiles должен существовать - и при этом права доступа должны разрешать писать туда всем (# chmod 777 /var/lib/samba/profiles).
Раздел [global] - главные моменты:
workgroup | Название домена, в котором участвует сервер |
netbios name | Как будет откликаться сервер по NetBIOS-протоколу. Не делайте его таким же, как и имя рабочей группы! |
hosts allow | Список сетей, которым разрешен доступ к серверу |
interfaces | Список сетевых интерфейсов, которым разрешен доступ к серверу |
security | Говорит, какой будет аутентификация |
encrypt passwords | Разрешаем шифрованные пароли |
local master | Samba сразу берет на себя роль мастер-браузера |
preferred master | При запуске устраивает перевыборы с наибольшим шансом для себя |
wins support | Запускаем wins-сервер |
os level | Уровень ОС. Чем выше номер, тем выше вероятность стать главным браузером сети |
domain logons | Разрешаем подсоединения в режиме домена |
logon script | Скрипт, который выполнится при входе в домен |
domain admin group | Какой пользователь может добавлять машины и пользователей в домен |
add user script | Позволяет samba работать как PDC Windows, то есть добавляет имя машины в список зарегистрированных в домене |
Следующим этапом мы создадим файл smb.netlogon со таким содержимым:
[netlogon] path=/FileServer/netlogon writeable=no guest ok=no browsable=no available=yes
Здесь описывается "шара" (сетевой ресурс) для возможности выполнения скрипта при входе в домен.
И последний штрих - пример файла конфигурации для пользователя user, принадлежащего к отделу № 1, файл user.conf:
include=/FileServer/etc/smb.global include=/FileServer/etc/smb.netlogon
[Otdel] path=/FileServer/otdel_1 comment=Информация отдела browsable=yes available=yes writeable=yes recycle bin=/FileServer/otdel_1/.recycled mangled names=no directory mask=0777 create mask=0666 fstype=NTFS
[Public] path=/FileServer/Public comment=Общая информация browsable=yes available=yes writeable=yes mangled names=no directory mask=0777 create mask=0666 fstype=NTFS
[Inst_Prog] path=/install comment=Инсталяционное ПО browsable=yes available=yes writeable=no mangled names=no fstype=NTFS
[HP_5000] printer=lp comment = Queue for HP LaserJet 5000 browseable = yes printable = yes public = yes writable = no create mode = 0700
Проанализируем, что получилось. Итак, у нас есть четыре сетевых ресурса, три из них - это дисковые пространства, а последний - очередь на сетевой принтер. Параметр printer=lp дает нам ссылку на имя очереди принтера, который предварительно был установлен в системе и получил имя lp. Менеджер управления принтерами вызывается с помощью команды:
# /usr/bin/redhat-config-printer
Ресурс [Inst_Prog] предоставляет пользователям возможность получить доступ к инсталляционным пакетам программ и драйверам в режиме "только чтение".
Ресурс [Otdel] - это папка отдела, к которому принадлежит пользователь; при описании этого ресурса была использована команда для организации на этом ресурсе "сетевой корзины" (recycle bin=/FileServer/otdel_1/.recycled). Как видно из синтаксиса команды, мы можем указать в качестве корзины как полный путь, так и относительный (например: recycle bin=.recycled). При использовании относительного пути в качестве базы для имени будет использован путь к сетевому ресурсу, в котором и описано правило по использованию "сетевой корзины".
Следующим шагом будет написание файла скрипта, который будет выполняться при входе в домен,- обычно в этом файле производят подключение сетевых ресурсов и синхронизацию времени, хотя можно выполнять и другие задачи (например, запуск на рабочей станции программы удаленного администрирования - Remote Admin).
Скрипт /FileServer/netlogon/user.bat:
@ echo off net use h: \MyServ\Otdel net use i: \MyServ\Public net use k: \MyServ\Inst_Prog net time \MyServ /SET /YES
Здесь следует обратить внимание на одну деталь, связанную с кодовыми таблицами Windows и Linux: созданный в Linux файл для операционной системы выглядит как одна строка и, соответственно, написанные нами команды выполняться не будут. Чтобы обойти эту проблему, воспользуемся программой конвертации файлов из кодовой системы Linux/Unix в DOS/Windows:
# unix2dos /FileServer/netlogon/user.bat
На выходе получим файл в кодировке DOS, который ОС Windows сможет правильно интерпретировать.
Нам осталось сделать еще одну маленькую операцию - и можно будет переходить к тестированию наших настроек.
В процессе эксплуатации "сетевая корзина" будет заполняться данными, и нам нужно предусмотреть вариант переполнения корзины и - как следствие - исчерпание дискового пространства, предоставленного пользователю на сетевом ресурсе.
Для решения этой задачи создадим скрипт clear_recycled, который поместим в каталог /etc/cron.daily. Это позволит выполнять скрипту каждую ночь и выполнять запланированные нами действия над "сетевой корзиной". В тело скрипта поместим следующие строки:
#del after 1 day recycled file find /FileServer/otdel*/.recycled -type f -atime +1 -exec rm {} \; >& /dev/null
Приведенный скрипт просматривает во всех папках отделов "сетевую корзину" - и файлы, которые были помещены туда более одного дня назад, будут удалены. Параметр, отвечающий за данную опцию,- -atime +1. Здесь вы можете указать любое нужное количество дней. (Более подробно о возможностях команды find смотрите: man find.)