Версия для печати
Среда, 27 декабря 2017 09:36

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

Автор
Оцените материал
(7 голосов)

Продолжение разговора об импортозамещении. В предыдущих статьях мы рассматривали вопрос о создании домена на основе FreeIPA и настривали доверительные отношения между доменами FreeIPA и Active Directory. Но импортозамещение не ограничивается только заменой Active Directory  и MS Exchange. Необходимо заменить по максимому все остальные сервися от Microsoft. В этой статье пойдет речь о создании файлового сервера на основе Samba и его связи с доменами FreeIPA и Active Directory (невозможно же сразу переехать на новый домен - некоторое время части пользователей придется работать в домене от MS и им необходимо предоставить доступ на ресурсы, управляемые FreeIPA).

На начало работ мы имеем:

Установленный и настроенный контроллер домена FreeIPA

  • Имя ПК - dc.rpn.loc
  • IP адрес - 192.168.20.105
  • Realm - RPN.LOC

Установленный и настроенный контроллер домена MS Active Directory

  • Имя ПК - dcwin.win.loc
  • IP адрес - 192.168.20.199
  • Имя домена - WIN.LOC

Между долменами настроены транзитивные доверительные отношения уровня леса. Т.е. пользователи обоих доменов могут получать доступ на ресурсы другого домена.

Все работы будут проводиться на ОС Rosa Cobalt  (он же CentOS 7, RedHat 7)

Установка файлового сервера.

Входные данные:

  • Имя ПК - fs.rpn.loc
  • IP адрес - 192.168.20.198
  1. Устанавливаем ОС в режиме минимальной установки.
  2. Добавляем необходимые пакеты:
    # yum install ipa-client ipa-server-trust-ad sssd-libwbclient samba samba-client
    
  3. Вносим изменения в файл /etc/hosts (т.е. добавляем данные вновь установленного файлового сервера)
    192.168.20.198    fs.rpn.loc    fs
    
  4. Добавляем сервер в качестве рядового сервера в домен FreeIPA
    # ipa-client-install --mkhomedir
    
  5. Добавляем правила в локальный файервол:
    # firewall-cmd --permanent --add-service=samba
    # firewall-cmd --reload
    
  6. Добавляем правило для работы Samba в Selinux (если не отключили ранее и планируем использовать):
    setsebool -P samba_enable_home_dirs on &
    

Настраиваем контроллер FreeIPA  для работы с файловым сервером.

Переходим в консоль сервера FreeIPA и производим следующие действия:

  1. Добавляем сервис cifs для работы Samba:
    # ipa service-add cifs/fs.rpn.loc
    
  2. Разрешаем серверу Samba читать пароли:
    # ipa permission-add "CIFS server can read user passwords" --attrs={ipaNTHash,ipaNTSecurityIdentifier} --type=user --right={read,search,compare} --bindtype=permission
    # ipa privilege-add "CIFS server privilege"
    # ipa privilege-add-permission "CIFS server privilege" --permission="CIFS server can read user passwords"
    # ipa role-add "CIFS server"
    # ipa role-add-privilege "CIFS server" --privilege="CIFS server privilege"
    # ipa role-add-member "CIFS server" --services=cifs/fs.rpn.loc
    

Настраиваем Samba для авторизации в домене FreeIPA

Переходим в консоль файлового сервера и производим следующие действия:

  1. Извлекаем keytab на сервер samba.
    # kinit -kt /etc/krb5.keytab
    # ipa-getkeytab -s dc.rpn.loc -p cifs/fs.rpn.loc -k /etc/samba/samba.keytab
    
  2. Проверяем, может ли файловый сервер читать атрибуты пользователя в домене FreeIPA:
    # kinit admin
    # ldapsearch -Y gssapi "(uid=username)"
    
  3. Если пользователь сгенерировал новый пароль с момента установки adtrust, даже администратор не может видеть атрибут ipaNTHash.
    Чтобы подтвердить, что служба samba может читать ipaNTHash, используем ее keytab и находим этот атрибут.
    # kdestroy -A
    # kinit -kt /etc/samba/samba.keytab cifs/fs.rpn.loc
    # ldapsearch -Y gssapi "(ipaNTHash=*)" ipaNTHash
    
  4. Создаем (вносим изменения) в файл /etc/samba.smb.conf. В итоге этот файл должен выглядеть примерно так:
    [global]
    	debug pid = yes
    	realm = RPN.LOC
    	workgroup = RPN
    	domain master = No
    	domain logons = Yes
    	ldap suffix = dc=rpn,dc=loc
    	ldap group suffix = cn=groups,cn=accounts
    	ldap user suffix = cn=users,cn=accounts
    	ldap machine suffix = cn=computers,cn=accounts
    	ldap admin dn = cn=Directory Manager
    	ldap ssl = off
    	log file = /var/log/samba/log.%m
    	max log size = 100000
    	domain logons = Yes
    	registry shares = Yes
    	disable spoolss = Yes
    	dedicated keytab file = FILE:/etc/samba/samba.keytab
    	kerberos method = dedicated keytab
    	#passdb backend = ipasam:ldapi://%2fvar%2frun%2fslapd-RPN-LOC.socket
    	#passdb backend = ldapsam:ldapi://%2fvar%2frun%2fslapd-RPN-LOC.socket
    	passdb backend = ipasam:"ldap://dc.rpn.loc"
    	security = ads
    	create krb5 conf = No
    	rpc_daemon:lsasd = fork
    	rpc_daemon:epmd = fork
    	rpc_server:tcpip = yes
    	rpc_server:netlogon = external
    	rpc_server:samr = external
    	rpc_server:lsasd = external
    	rpc_server:lsass = external
    	rpc_server:lsarpc = external
    	rpc_server:epmapper = external
    	ldapsam:trusted = yes
    	idmap config * : backend = tdb
    
    
    [homes]
    	comment = Home Directories
    	valid users = %S, %D%w%S
    	browseable = No
    	read only = No
    	inherit acls = Yes
    
    [FS_Share]
            comment = Test share on FS server
            path = /opt/share
            writeable = yes
            browseable = yes
            valid users = @admins # Разрешаем группе "admins" из домена FreeIPA доступ к ресурсу
            write list = @admins # Разрешаем группе "admins" из домена FreeIPA доступ с правом записи к ресурсу
            guest ok = No
            inherit acls = Yes
            create mask = 0660
            directory mask = 0770
    
  5. Проверяем конфигурацию с помощью команды testparm
  6. Запускаем Samba и добавляем в автозапуск:
    # systemctl start smb
    # systemctl enable smb
    

Проверка доступа к общему ресурсу.

Переходим в консоль любого ПК, входящего в наш домен FreeIPA. На нем должен быть установлен пакет samba-client. Проверяем доступ к общему ресурсу с автоизацией по kerberos:

$ kinit admin
$ smbclient -k //fs.rpn.loc/FS_Share

Если все нормально, то мы получаем доступ и видим содержание общего каталога:

lp_load_ex: changing to config backend registry
Domain=[RPN] OS=[Windows 6.1] Server=[Samba 4.4.4]
smb: \> ls
  .                                   D        0  Tue Dec 26 16:24:47 2017
  ..                                  D        0  Mon Dec 25 12:21:13 2017
  111                                 D        0  Tue Dec 26 12:05:02 2017
  222                                 D        0  Tue Dec 26 12:13:04 2017
  333                                 D        0  Tue Dec 26 12:36:10 2017
  444                                 D        0  Tue Dec 26 12:36:55 2017
  555                                 D        0  Tue Dec 26 12:49:43 2017
  666                                 D        0  Tue Dec 26 12:51:21 2017
  777                                 D        0  Tue Dec 26 16:22:12 2017
  888                                 D        0  Wed Dec 27 09:56:20 2017

		18855936 blocks of size 1024. 17173020 blocks available
smb: \> 

Для доступа с ПК под управлением Windows открываем File Explorer и в строке адреса вводим: \\fs.rpn.loc\FS_Share

Важно: при подключении в данной конфигурации обязательно использовать полное имя ПК, а не IP адрес.
Подключение может осуществить любой клиент в домене или в домене с которым настроены доверительные отношения.

Доступ к общему ресурсу пользователям из доверенного домена.

Доступ к общему ресурсу возможно получить из ПК, находящегося в довереннолм домене. Необходимо только ввести имя и пароль пользователя из домена FreeIPA, которому разрешен доступ. Но это не удобно и зачастую на практике неприемлимо.
Настроим разрешение на доступ пользователям из доверенного домена Active Directory.

В Active Directory есть группа пользователей "WinUsers", которым необходимо предоставить доступ к общему ресурсу Samba. Для этого:

  1. Открываем в браузере консоль управления сервером FreeIPA.
  2. Создаем группу trust-fs-users для связи с доверенным доменом. Тип группы - внешняя
    Создание внешней группы пользователей в домене FreeIPA
  3. Открываем свойства созданной группы. Переходим на вкладку "External" и нажимаем кнопку "Добавить".
    Добавляем группу из Active Directory
  4. Задаем имя группы в домене Active Directory:
    Добавляем группу из Active Directory
  5. Переходим в раздел групп и создаем POSIX группу "fs-users" для доступа файловому ресурсу:
    Добавление POSIX группы
  6. Нажимаем "Добавить и редактировать" и добавляем ранее созданную внешнюю группу:
    Добавление внешней группы в группу POSIX
  7. Далее в файл /etc/samba/smb.conf в раздел описания общего ресурса добавляем имя созданной POSIX группы:
    [FS_Share]
            comment = Test share on FS server
            path = /opt/share
            writeable = yes
            browseable = yes
            valid users = @admins @fs-users
            write list = @admins @fs-users
            guest ok = No
            inherit acls = Yes
            create mask = 0660
            directory mask = 0770
    
    
  8. Перезапускаем сервис Samba:
    # systemctl restart smb
    

В итоге мы получили на файловом сервере общий ресурс, к которому имеют доступ с прозрачной авторизацией как пользователи из домена FreeIPA, так и из доверенного домена Active Directory. Остается только настроить права доступа разным группам на уровне файловой системы.

Дополнительная информация

Прочитано 21452 раз Последнее изменение Четверг, 28 декабря 2017 11:56
Андрей Иванов

Последнее от Андрей Иванов

Авторизуйтесь, чтобы получить возможность оставлять комментарии