вторник, 13 ноября 2012 г.

Файловый сервер samba в samba домене

Я думаю у многих админов возникает задача организации файлового сервера для рабочих станций Windows. Сегодня будет показано, как это организовать при наличии контроллера домена на базе свзки samba + ldap. Итак, приступим.


Считаем, что samba домен уже настроен, например, как здесь. Поднимать файл-сервер будем на CentOS 6. Главное требование - это разделение прав доступа на сервере, поэтому наш сервер будет тоже частью этого домена со всеми вытекающими.
Для начала установим следующие пакеты:

[root@server-DS ~]# yum install samba samba-common samba-winbind openldap openldap-clients nss-pam-ldapd

Выключим SELinux, хотя бы на время настройки. В файл /etc/sysconfig/selinux внесём такое изменение и перегрузим сервер:

SELinux=disabled

Изменяем /etc/hosts:

server_ip_address server-fs server-fs.example.net

Настроим /etc/nsswitch.conf:

passwd: files ldap
shadow: files ldap
group: files ldap
hosts: files dns wins

Теперь внесём необходимые изменения в конфигурационный файл /etc/nslcd.conf:

#какую версию ldap использовать
ldap_version 3
#число потоков, выполняющие запросы к серверу ldap
threads 20
#от чьего имени связываться с сервером ldap
binddn cn=authuser,dc=example,dc=net
bindpw secret
#базовый DN поиска
base dc=example,dc=net
#базовые DN для пользователей, паролей и групп
base group ou=Groups,dc=example,dc=net
base passwd ou=Users,dc=example,dc=net
base passwd ou=Computers,dc=example,dc=net
base shadow ou=Users,dc=example,dc=net
#область поиска
scope sub
scope passwd sub
#использовать TLS
ssl start_tls
tls_reqcert never
#пользователь и группа от имени которых будет запущен демон nslcd(только локальные)
uid nslcd
gid ldap
#адрес сервера ldap
uri ldap://ldap_server_ip_address/

Заметьте, что изменения в этом файле делаются в соответствии с настройками вашего контроллера домена. Здесь настройки задаются в соответствии с этим описанием. Не забудьте добавить пользователя authuser в базу openLDAP.
Запустим демон nslcd и добавим его а автозагрузку:

[root@server-DS ~]# /etc/init.d/nslcd start
[root@server-DS ~]# chkconfig nslcd on

и теперь система "видит" пользователей домена. Проверить это можно с помощью команды id:

[root@server-DS ~]# id sysadmin
uid=1025(sysadmin) gid=555(IT) группы=555(IT), 512(Domain Admins)

Позволим samba TLS соединения - добавим в файл /etc/openldap/ldap.conf:

TLS_REQCERT allow

Теперь займемся непосредственно настройкой самбы:

[global]
workgroup = example.net
netbios name = server-fs
security = domain
server string =
name resolve order = wins bcast hosts
printcap name = /dev/null
disable spoolss = yes
wins server = 192.168.10.253
interfaces = lo, eth1, eth0
bind interfaces only = yes
socket address =

#параметры подключения к ldap
passdb backend = ldapsam:"ldap://192.168.10.253"
ldap suffix = dc=example,dc=net
ldap machine suffix = ou=Computers
ldap user suffix = ou=Users
ldap group suffix = ou=Groups
ldap idmap suffix = ou=Idmap
ldap admin dn = cn=administrator,dc=example,dc=net
idmap backend = ldap:ldap://192.168.10.253
ldap ssl = start_tls

[documents]
path = /documents
inherit owner = no
inherit acls = yes
inherit permissions = yes
writable = yes

Это минимально необходимый список параметров для нормальной работы файл-сервера Samba в домене Samba. Если вам необходимы дополнительные параметры, вот здесь на русском языке почти полный перевод всех параметров файла /etc/samba/smb.conf.
Нам осталось ввести сервер в домен:

[root@server-DS ~]# net rpc join -U administrator
Enter administrator's password:

задать пароль администратора, которого указали в "ldap admin dn":

[root@server-DS ~]# smbpasswd -W
Setting stored password for "cn=administrator,dc=example,dc=net" in secrets.tdb
New SMB password:
Retype new SMB password:

и запустить samba:

[root@server-DS ~]# /etc/init.d/smb start && /etc/init.d/nmb start && /etc/init.d/winbind start
[root@server-DS ~]# chkconfig smb on && chkconfig nmb on && chkconfig winbind on

Заметка

Параметры подключения к базе ldap на сервере, являющимся членом домена, по большому счёту не нужны. Их выгода состоит в том, что во вкладке "Безопасность" контекстного меню свойств файлов или каталогов Windows будут отображаться группы и пользователи в нормальном виде, т.е. "example.net\Domain Admins". Если не использовать параметры ldap, то всё будет работать и без них, но во вкладке "Безопасность" будет отображаться "Unix group\Domain Admins".
Можно также не использовать winbind(пакет samba-winbind), но тогда вместо "example.net\Domain Admins" в той же вкладке "Безопасность" вы будете видеть только SID пользователя или группы, например, S-1-5-21-3954423230-3418645706-2461697144-512

Теперь можно удостоверится в нормальном функционировании файлового сервера samba как члена домена. Выполним тестовую авторизацию в домене:

[root@server-DS ~]# wbinfo -a sysadmin
Enter sysadmin's password:
plaintext password authentication failed
Could not authenticate user sysadmin with plaintext password
Enter sysadmin's password:
challenge/response password authentication succeeded

После первого запроса мы наблюдаем ошибку, но так должно быть, потому что на контроллере домена запрещена аутентификация паролем открытым текстом (client plaintext auth = no).
Просмотрим информацию о домене:

[root@server-DS ~]# wbinfo -D example.net
Name : EXAMPLE.NET
Alt_Name :
SID : S-1-5-21-3954423230-3418645706-2461697144
Active Directory : No
Native : No
Primary : Yes

Информацию о пользователях и группах домена можно просмотреть набрав в консоли wbinfo -u и wbinfo -g соответственно.

Остался один важный нюанс. Вся работа была затеяна с целью разделения прав доступа к документам на сервере. Традиционная модель контроля доступа Unix оперирует только тремя наборами разрешений - владелец, группа и остальные, что сильно ограничивает нас в возможностях, поэтому на помощь приходят так называемые ACL - списки контроля доступа. Они позволят нам назначать режим доступа не только для одной группы и владельца, а для множества групп и пользователей, что в общем-то похоже на механизм, которым обладают Windows-системы. Для того, чтобы ими воспользоваться, необходимо смонтировать файловую систему с указанием в опциях acl, например вот так:

LABEL=documents    /documents     ext4    defaults,acl      1 1

После того, как вы смонтировали файловую систему с нужной опцией, можете воспользоваться командами setfacl и getfacl для установки и просмотра списков контроля доступа. Например, разрешить группе "Domain Admins" чтение, запись и возможность перехода в каталог documents:

[root@server-DS ~]# setfacl -m -g:"Domain Admins":rwx /documents

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

1 комментарий:

  1. Спасибо за статью - очень много всяких тонкостей, которые практически нигде не описаны. p.s. Встрял с этим nslcd на 2 недели(.

    ОтветитьУдалить