samba_ad
Различия
Показаны различия между двумя версиями страницы.
| — | samba_ad [2023/10/02 13:40] (текущий) – создано - внешнее изменение 127.0.0.1 | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | ====== Интеграция Samba в MS Active Directory ====== | ||
| + | |||
| + | ===== Введение ===== | ||
| + | |||
| + | Задача: | ||
| + | |||
| + | Имеем: домен domain.local, | ||
| + | |||
| + | ===== Настройка ===== | ||
| + | |||
| + | 1. В DNS домена регистрируем fileserver, в итоге получаем fqdn: fileserver.domail.local | ||
| + | |||
| + | 2. На файловом сервере настраиваем разрешение имен, правим / | ||
| + | |||
| + | domain domail.local | ||
| + | search domail.local | ||
| + | nameserver 192.168.0.2 | ||
| + | nameserver 192.168.0.3 | ||
| + | | ||
| + | После чего обязательно тестируем, | ||
| + | |||
| + | Также обязательно надо синхронизировать время между DC и файловым сервером, | ||
| + | |||
| + | 3. На файловом сервере ставим все необходимо ПО. | ||
| + | Debian 8: | ||
| + | |||
| + | # apt-get install samba winbind krb5-user libpam-krb5 libnss-winbind | ||
| + | | ||
| + | Centos 7: | ||
| + | |||
| + | # yum install samba samba-winbind krb5-workstation samba-winbind-clients | ||
| + | | ||
| + | 4. Редактируем / | ||
| + | |||
| + | [libdefaults] | ||
| + | default_realm = DOMAIN.LOCAL | ||
| + | clockskew = 300 | ||
| + | v4_instance_resolve = false | ||
| + | | ||
| + | [realms] | ||
| + | DOMAIN.LOCAL = { | ||
| + | kdc = dc1.domail.local | ||
| + | kdc = dc2.domail.local | ||
| + | admin_server = dc1.domail.local | ||
| + | default_domain = DOMAIN.LOCAL | ||
| + | } | ||
| + | | ||
| + | [domain_realm] | ||
| + | .domail.local. = DOMAIN.LOCAL. | ||
| + | | ||
| + | Получаем тикет керберос: | ||
| + | |||
| + | # kinit admin | ||
| + | Password for admin@DOMAIN.LOCAL: | ||
| + | |||
| + | Проверяем, | ||
| + | |||
| + | # klist | ||
| + | Ticket cache: FILE:/ | ||
| + | Default principal: admin@DOMAIN.LOCAL | ||
| + | | ||
| + | Valid starting | ||
| + | 20.03.2014 15: | ||
| + | renew until 21.03.2014 15:48:19 | ||
| + | |||
| + | Этот тикет нам нужен только для подключения самбы к доменту, | ||
| + | |||
| + | 5. Редактируем / | ||
| + | |||
| + | [global] | ||
| + | security = ads | ||
| + | netbios name = fileserver | ||
| + | server string = | ||
| + | realm = DOMAIN.LOCAL | ||
| + | workgroup = DOMAIN | ||
| + | # password server = dc1.domail.local dc2.domail.local | ||
| + | idmap config * : range = 3000-20000 | ||
| + | idmap config * : backend = tdb | ||
| + | client use spnego = yes | ||
| + | winbind enum users = yes | ||
| + | winbind enum groups = yes | ||
| + | winbind use default domain = yes | ||
| + | | ||
| + | domain master = no | ||
| + | local master = no | ||
| + | preferred master = no | ||
| + | os level = 1 | ||
| + | | ||
| + | unix charset = UTF-8 | ||
| + | dos charset = CP866 | ||
| + | display charset = UTF-8 | ||
| + | | ||
| + | load printers = no | ||
| + | show add printer wizard = no | ||
| + | printcap name = /dev/null | ||
| + | disable spoolss = yes | ||
| + | |||
| + | Тут коментировать особенно нечего, | ||
| + | |||
| + | # service samba restart | ||
| + | [ ok ] Stopping Samba daemons: nmbd smbd. | ||
| + | [ ok ] Starting Samba daemons: smbd. | ||
| + | |||
| + | # service winbind restart | ||
| + | [ ok ] Stopping the Winbind daemon: winbind. | ||
| + | [ ok ] Starting the Winbind daemon: winbind. | ||
| + | |||
| + | |||
| + | 6. Подключаемся к домену: | ||
| + | |||
| + | # net ads join -U admin --no-dns-updates | ||
| + | Enter admin' | ||
| + | Using short domain name -- DOMAIN | ||
| + | Joined ' | ||
| + | |||
| + | Опция --no-dns-updates говорит не обновлять днс-запись, | ||
| + | |||
| + | 7. Теперь чтобы система использовала winbind для поиска пользователей и групп редактируем / | ||
| + | |||
| + | passwd: | ||
| + | group: | ||
| + | shadow: | ||
| + | | ||
| + | hosts: | ||
| + | networks: | ||
| + | | ||
| + | protocols: | ||
| + | services: | ||
| + | ethers: | ||
| + | rpc: db files | ||
| + | | ||
| + | netgroup: | ||
| + | |||
| + | Тут всего лишь добавлено ключевое слово winbind в поля passwd и group. | ||
| + | |||
| + | Вот и все. Теперь еще раз на всякий случай перезапускаемся. | ||
| + | |||
| + | |||
| + | Debian 8: | ||
| + | # service samba restart | ||
| + | [ ok ] Stopping Samba daemons: nmbd smbd. | ||
| + | [ ok ] Starting Samba daemons: smbd. | ||
| + | |||
| + | # service winbind restart | ||
| + | [ ok ] Stopping the Winbind daemon: winbind. | ||
| + | [ ok ] Starting the Winbind daemon: winbind. | ||
| + | |||
| + | Centos 7: | ||
| + | # systemctl enable smb | ||
| + | # systemctl enable winbind | ||
| + | # systemctl restart smb | ||
| + | # systemctl restart winbind | ||
| + | |||
| + | И тестируем: | ||
| + | |||
| + | # wbinfo -p | ||
| + | Ping to winbindd succeeded | ||
| + | |||
| + | # wbinfo -t | ||
| + | checking the trust secret for domain DOMAIN via RPC calls succeeded | ||
| + | |||
| + | # id admin | ||
| + | uid=500(admin) gid=502(domain users) группы=502(domain users), | ||
| + | | ||
| + | # wbinfo -u | ||
| + | admin | ||
| + | гость | ||
| + | ... | ||
| + | | ||
| + | # wbinfo -g | ||
| + | domain users | ||
| + | гости домена | ||
| + | клонируемые контроллеры домена | ||
| + | контроллеры домена - только чтение | ||
| + | контроллеры домена | ||
| + | компьютеры домена | ||
| + | владельцы-создатели групповой политики | ||
| + | администраторы домена | ||
| + | ... | ||
| + | |||
| + | # net ads testjoin | ||
| + | Join is OK | ||
| + | |||
| + | # net ads info | ||
| + | LDAP server: X.X.X.X | ||
| + | LDAP server name: DC1.domain.org | ||
| + | Realm: DOMAIN.ORG | ||
| + | Bind Path: dc=DOMAIN, | ||
| + | LDAP port: 389 | ||
| + | Server time: Птн, 17 Июл 2015 18:29:53 MSK | ||
| + | KDC server: X.X.X.X | ||
| + | Server time offset: -32 | ||
| + | |||
| + | |||
| + | |||
| + | Если все ОК, система видит доменных пользователей и группы, | ||
| + | |||
| + | [shara] | ||
| + | path = / | ||
| + | writeable = yes | ||
| + | browsable = yes | ||
| + | valid users = @DOMAIN\group1, | ||
| + | read list = | ||
| + | write list = | ||
| + | create mask = 0777 | ||
| + | force directory mode = 0777 | ||
| + | | ||
| + | |||
| + | <note tip> | ||
| + | База tdb с привязкой ID к доменным пользователям храниться тут: | ||
| + | |||
| + | # ls -1 / | ||
| + | account_policy.tdb | ||
| + | group_mapping.tdb | ||
| + | passdb.tdb | ||
| + | printers | ||
| + | registry.tdb | ||
| + | secrets.tdb | ||
| + | share_info.tdb | ||
| + | usershares | ||
| + | winbindd_idmap.tdb | ||
| + | |||
| + | В случае каких либо глюков, | ||
| + | |||
| + | net cache flush | ||
| + | rm / | ||
| + | |||
| + | Но в этом случае возможно придется заново перенастраивать права доступа к файловой системе, | ||
| + | </ | ||
| + | |||
| + | <note tip> | ||
| + | Если запустить winbind с ключем -n, то он не будет кешировать результаты запросов к AD. | ||
| + | |||
| + | В debian редактируем файл / | ||
| + | WINBINDD_OPTS=" | ||
| + | |||
| + | В redhat редактируем файл / | ||
| + | WINBINDOPTIONS=" | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | Для сопоставления доменных идентификаторов пользователей локальным удобно использовать вместо бакенда tdb(локальная база данных) бакэнд rid, в таком случае они будут вычисляться на лету исходя из доменного SID пользователя(последних цифр) и будут всегда одинаковыми на всех серверах(при неизменности конфигурации). Пример конфигурации: | ||
| + | |||
| + | idmap config DOMAIN : base_rid = 0 | ||
| + | idmap config DOMAIN : range = 2000-999999 | ||
| + | idmap config DOMAIN : backend = rid | ||
| + | idmap config DOMAIN : default = yes | ||
| + | idmap config * : range = 1300000-1999999 | ||
| + | idmap config DOMAIN : backend = rid | ||
| + | | ||
| + | Локальный ID пользователя будет вычисляться по формуле: | ||
| + | ID = RID - BASE_RID + LOW_RANGE_ID | ||
| + | где | ||
| + | RID - последние цифры SID пользователя домена, | ||
| + | BASE_RID - это конфигурируемый параметр, | ||
| + | LOW_RANGE_ID - это нижняя граница диапазона, | ||
| + | И таким образом ID встроенного админа при такой конфигурации будет рассчитан так: 500 - 0 + 2000 = 2500 и это значение будет неизменным для всех серверов при условии, | ||
| + | |||
| + | Чтобы идентификаторы пользователей точно соответствовал доменным, | ||
| + | ... | ||
| + | idmap config DOMAIN : base_rid = 100 | ||
| + | idmap config DOMAIN : range = 100-999999 | ||
| + | ... | ||
| + | Но в этом случае они могут пересекаться с локальными. | ||
| + | | ||
| + | Дополнительная информация по [[https:// | ||
| + | </ | ||
| + | |||
| + | ===== Команды диагностики ===== | ||
| + | |||
| + | # id renderman | ||
| + | uid=503(renderman) gid=500(domain users) группы=500(domain users), | ||
| + | | ||
| + | # wbinfo --user-groups=renderman | ||
| + | 500 | ||
| + | 517 | ||
| + | 596 | ||
| + | 678 | ||
| + | 519 | ||
| + | 505 | ||
| + | 522 | ||
| + | 535 | ||
| + | 672 | ||
| + | 510 | ||
| + | | ||
| + | # wbinfo --name-to-sid=renderman | ||
| + | S-1-5-21-1421388833-3017584253-2885461630-3113 SID_USER (1) | ||
| + | | ||
| + | # wbinfo --ping-dc | ||
| + | checking the NETLOGON dc connection succeeded | ||
| + | | ||
| + | # wbinfo --user-info=renderman | ||
| + | renderman: | ||
| + | | ||
| + | # groups renderman | ||
| + | renderman : domain users kopir_users sw_all sw_render render_farm artoon_all artoon_compos artoon_cache groups: невозможно определить имя группы для ID 672 | ||
| + | 672 BUILTIN\users | ||
