Я думаю у многих админов возникает задача организации файлового сервера для рабочих станций Windows. Сегодня будет показано, как это организовать при наличии контроллера домена на базе свзки samba + ldap. Итак, приступим.
Считаем, что samba домен уже настроен, например, как здесь. Поднимать файл-сервер будем на CentOS 6. Главное требование - это разделение прав доступа на сервере, поэтому наш сервер будет тоже частью этого домена со всеми вытекающими.
Для начала установим следующие пакеты:
Выключим SELinux, хотя бы на время настройки. В файл /etc/sysconfig/selinux внесём такое изменение и перегрузим сервер:
Изменяем /etc/hosts:
Настроим /etc/nsswitch.conf:
Теперь внесём необходимые изменения в конфигурационный файл /etc/nslcd.conf:
Заметьте, что изменения в этом файле делаются в соответствии с настройками вашего контроллера домена. Здесь настройки задаются в соответствии с этим описанием. Не забудьте добавить пользователя authuser в базу openLDAP.
Запустим демон nslcd и добавим его а автозагрузку:
и теперь система "видит" пользователей домена. Проверить это можно с помощью команды id:
Позволим samba TLS соединения - добавим в файл /etc/openldap/ldap.conf:
Теперь займемся непосредственно настройкой самбы:
Это минимально необходимый список параметров для нормальной работы файл-сервера Samba в домене Samba. Если вам необходимы дополнительные параметры, вот здесь на русском языке почти полный перевод всех параметров файла /etc/samba/smb.conf.
Нам осталось ввести сервер в домен:
задать пароль администратора, которого указали в "ldap admin dn":
и запустить samba:
Теперь можно удостоверится в нормальном функционировании файлового сервера samba как члена домена. Выполним тестовую авторизацию в домене:
После первого запроса мы наблюдаем ошибку, но так должно быть, потому что на контроллере домена запрещена аутентификация паролем открытым текстом (client plaintext auth = no).
Просмотрим информацию о домене:
Информацию о пользователях и группах домена можно просмотреть набрав в консоли wbinfo -u и wbinfo -g соответственно.
Остался один важный нюанс. Вся работа была затеяна с целью разделения прав доступа к документам на сервере. Традиционная модель контроля доступа Unix оперирует только тремя наборами разрешений - владелец, группа и остальные, что сильно ограничивает нас в возможностях, поэтому на помощь приходят так называемые ACL - списки контроля доступа. Они позволят нам назначать режим доступа не только для одной группы и владельца, а для множества групп и пользователей, что в общем-то похоже на механизм, которым обладают Windows-системы. Для того, чтобы ими воспользоваться, необходимо смонтировать файловую систему с указанием в опциях acl, например вот так:
После того, как вы смонтировали файловую систему с нужной опцией, можете воспользоваться командами setfacl и getfacl для установки и просмотра списков контроля доступа. Например, разрешить группе "Domain Admins" чтение, запись и возможность перехода в каталог documents:
Теперь вы можете смело размещать документы и гибко управлять правами доступа к ним используя линуксовый файловый сервер.
Считаем, что 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
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/
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
[root@server-DS ~]# chkconfig nslcd on
и теперь система "видит" пользователей домена. Проверить это можно с помощью команды id:
[root@server-DS ~]# id sysadmin
uid=1025(sysadmin) gid=555(IT) группы=555(IT), 512(Domain Admins)
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
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:
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:
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
[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
Параметры подключения к базе 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
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
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
Теперь вы можете смело размещать документы и гибко управлять правами доступа к ним используя линуксовый файловый сервер.
Спасибо за статью - очень много всяких тонкостей, которые практически нигде не описаны. p.s. Встрял с этим nslcd на 2 недели(.
ОтветитьУдалить