Присоединение Turnkey Linux Fileserver к домену AD
Зависимости
apt-get update && apt-get install winbind krb5-user ntpdate samba-common-bin
Конфигурационные файлы
Регистр символов имеет значение!
/etc/hosts
192.168.1.88 dc1.cot.local dc1 192.168.1.53 torrentserver
/etc/krb5.conf
[logging] default = FILE:/var/log/kerberos/krb5libs.log kdc = FILE:/var/log/kerberos/krb5kdc.log admin_server = FILE:/var/log/kerberos/kadmind.log [libdefaults] ticket_lifetime = 24000 default_realm = COT.LOCAL dns_lookup_realm = false dns_lookup_kdc = false kdc_req_checksum_type = 2 checksum_type = 2 ccache_type = 1 forwardable = true proxiable = true [realms] COT.LOCAL = { kdc = 192.168.1.88 admin_server = 192.168.1.88 default_domain = COT.LOCAL } [domain_realm] .COT.LOCAL = COT.LOCAL [pam] debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false [login] krb4_convert = false krb4_get_tickets = false
/etc/samba/smb.conf
[global] workgroup = COT realm = COT.LOCAL preferred master = no security = ads encrypt passwords = true password server = 192.168.1.88 winbind separator = / idmap uid = 10000-20000 idmap gid = 10000-20000 client use spnego = true auth methods = winbind winbind use default domain = yes winbind uid = 10000-15000 winbind gid = 10000-15000 winbind enum users = yes winbind enum groups = yes netbios name = TORRENTSERVER server string = Cottage File Server dos charset = UTF-8 unix charset = UTF-8 display charset = UTF-8 os level = 20 passdb backend = tdbsam null passwords = yes admin users = root obey pam restrictions = yes pam password change = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . add user script = /usr/sbin/useradd -m '%u' -g users -G users delete user script = /usr/sbin/userdel -r '%u' add group script = /usr/sbin/groupadd '%g' delete group script = /usr/sbin/groupdel '%g' add user to group script = /usr/sbin/usermod -G '%g' '%u' guest account = nobody map to guest = Bad Password syslog = 0 log file = /var/log/samba/samba.log max log size = 1000 wins support = yes dns proxy = no socket options = TCP_NODELAY panic action = /usr/share/samba/panic-action %d [Distr] read list = nobody writeable = yes public = yes path = /mnt/distr/ write list = Mike [allstuff] read list = nobody writeable = yes public = yes path = /mnt/allstuff/ write list = Mike
/etc/nsswitch.conf
first 3 lines are most important, other vary according to the system
# /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc-reference' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. passwd: compat winbind shadow: compat winbind group: compat winbind
/etc/pam.d/passwd
password sufficient pam_winbind.so password required pam_unix.so auth include system-auth account include system-auth password include system-auth # # The PAM configuration file for the Shadow `passwd' service # @include common-password
/etc/pam.d/common-account
account required pam_access.so account sufficient pam_winbind.so account required pam_unix.so # # /etc/pam.d/common-account - authorization settings common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of the authorization modules that define # the central access policy for use on the system. The default is to # only deny service to users whose accounts are expired in /etc/shadow. # # As of pam 1.0.1-6, this file is managed by pam-auth-update by default. # To take advantage of this, it is recommended that you configure any # local modules either before or after the default block, and use # pam-auth-update to manage selection of other modules. See # pam-auth-update(8) for details. # # here are the per-package modules (the "Primary" block) account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so account [success=1 new_authtok_reqd=done default=ignore] pam_winbind.so # here's the fallback if no module succeeds account requisite pam_deny.so # prime the stack with a positive return value if there isn't one already; # this avoids us returning an error just because nothing sets a success code # since the modules above will each just jump around account required pam_permit.so # and here are more per-package modules (the "Additional" block) # end of pam-auth-update config
Синхронизация времени с AD
kerberos is dependent on “the clock”
its recommended to sync with the active directory
dpkg-reconfigure tzdata
ntpdate ad.example.com
gotcha: on win2ksrv the ntp server is disabled (use regedit)
System Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters
Value Name: LocalNTP
Data Type: REG_DWORD (DWORD Value)
Value Data: (0 = disabled, 1 = enabled)
tips:
- timezones are calculated, including daylight saving
- ntp is 123/udp
- win2ksrv will deny NTP service if its clock hasn't sync'ed with a
NTP server in a while
net (stop|start) w32time
net time /setsntp:pool.ntp.org
- ntpdate -d (debug)
Перезапуск служб
Опытным путем установлено, что winbind надо запускать перед samba, хотя документация утверждает обратное.
Аутентификация kerberos
kinit Administrator@EXAMPLE.COM
Присоединение к домену
net ads join -U Administrator -S ad.example.com
- its recommended to change the Administrator password on win2k after
first joining (regenerates the kerberos settings or something, not
sure…)
Автоматизируем вход
Запускаем kutil. Она позволит создать keytab - файл, в котором будут храниться данные для входа.
> ktutil ktutil: addent -password -p username@ADS.IU.EDU -k 1 -e rc4-hmac Password for username@ADS.IU.EDU: [enter your password] ktutil: addent -password -p username@ADS.IU.EDU -k 1 -e aes256-cts Password for username@ADS.IU.EDU: [enter your password] ktutil: wkt username.keytab ktutil: quit
username.keytab - это имя файла, созданного в текущей директории, в котором хранятся данные для входа.
Сам вход:
kinit -k -t username.keytab username@ADS.IU.EDU
Чтобы все правильно работало в rc.local лучше всего дописать так:
/etc/init.d/winbind stop && /etc/init.d/samba stop && /etc/init.d/winbind start && /etc/init.d/samba start && kinit -k -t username.keytab username@ADS.IU.EDU
Проверка
# smbclient -k -L nas.example.com # wbinfo -u EXAMPLE+administrator EXAMPLE+guest EXAMPLE+tsinternetuser EXAMPLE+iusr_ad EXAMPLE+iwam_ad EXAMPLE+krbtgt # wbinfo -g BUILTIN+administrators BUILTIN+users EXAMPLE+domain computers EXAMPLE+domain controllers EXAMPLE+schema admins EXAMPLE+enterprise admins EXAMPLE+cert publishers EXAMPLE+domain admins EXAMPLE+domain users EXAMPLE+domain guests EXAMPLE+group policy creator owners EXAMPLE+dnsupdateproxy
и контролируем его работу:
команда
wbinfo -p
должна вернуть:
'ping' to winbindd succeeded
команда
wbinfo -t
должна вернуть:
checking the trust secret via RPC calls succeeded
Если это не так, заглядываем в логи winbind и разбираемся в чем дело.
Еще сообщают вот что:
основное: 1) net ads join -U administrator 2) kinit username@REALM 3) раз в пол часа cron должен запускаь скрипт с простой коммандой # net ads join -U administrator%password ,как говорят это особенность реализации, иначе просто ресурсы на smb linux машине не будут доступны тем пользователям которым открыт доступ к шарам на ней. /etc/crontab содержит -> 20 * * * * root /etc/samba/chk-ad.sh
Добавление пользователей из AD в локальные группы
В разделе global в smb.conf был указан параметр username map = /etc/samba/smbusers. Данный параметр очень удобен, т.к. позволяет присоединить пользователей Windows к локальным пользователям UNIX. Например, можно назначить root'ом Вашего пользователя в домене и управлять всеми общими ресурсами с полными правами:
root@samba:~# cat /etc/samba/smbusers root = AD^domain_admin
При внесении доменных пользователей в данный файл необходимо указывать полное имя в независимости от параметра winbind use default domain. Так же, возможно указать несколько пользователей или доменную группу разделенные пробелами.
Для сопоставления доменных групп по-умолчанию (т.е. таких как Domain Admins, Domain Users и др, которые создаются в SAMBA автоматом, их еще можно просмотреть командой net groupmap list или getent group) и групп UNIX, необходимо выполнить:
net groupmap add ntgroup="COT.LOCAL/Users" unixgroup=users # net groupmap modify ntgroup="Domain_Group" unixgroup=namegroup
Для сопоставления новых доменных групп и групп UNIX, необходимо выполнить:
$ # добавление новой группы $ net rpc group add "NewGroup" $ # сопоставление групп $ net groupmap modify ntgroup="NewGroup" unixgroup=newunixG
При этом, сопоставление сохраняется в одном из tdb файлов SAMBA.
Но! username map не работает, если в конфиге SAMBA на ресурс задан параметр valid users и пользователь, указанный в файле username map не входит в членов параметра valiud users. Чтобы обойти эту проблему, необходимо указать параметр admin users, который синтаксически аналогичен valid users, и определяет указанному пользователю работать с ресурсом в качестве пользователя root.
Раздача прав на папки.
Есть два варианта раздачи прав - стандартная девятибитная rwx система UNIX и система принятая в Windows - ACL.
Для использования ACL файловую систему надо монтировать с параметром acl.
Для того чтобы с ACL все работало правильно делаем так:
Добавляем группу в список доступа (названия групп смотрим в wbinfo -g):
setfacl -m g:'пользователи домена':rw /var/lib/vz/shared/files/exchange/
даем группе права:
setfacl -m group::rx /var/lib/vz/shared/files/exchange/
Если дать права только group::r, то не будет читаться каталог. Поэтому надо давать group::rx
Сбросить все права ACL можно командой
setfacl --remove-all /var/lib/vz/shared/files/exchange/
Для работы с поддиректориями и вложенными файлами надо использовать ключ -R, но указывать его надо перед -m
Например, настраиваем чтобы в папку /var/lib/vz/shared/files/exchange/ могли писать все, но не могли читать, а для пользователей владельцев папок сделаем разрешения и на чтение:
setfacl -R --remove-all /var/lib/vz/shared/files/exchange/ && setfacl -R -m g:'пользователи домена':wx /var/lib/vz/shared/files/exchange/ && setfacl -R -m group::wx /var/lib/vz/shared/files/exchange/ &&
Права по-умолчанию применяемые к вновь создаваемым файлам:
setfacl -R -m default:user:van:rwx /var/lib/vz/shared/files/exchange/van/
Дальше даем конкретным пользователям права:
setfacl -R -m user:van:rwx /var/lib/vz/shared/files/exchange/van/
Тут все просто. Раздавайте себе права на уровне Юникса, но прописывайте сразу доменных юзеров и группы. Например,
chown FC\JackSoft DiskK chown :FC\Domain Admins ForAdmins
и т.д.
Или с использованием ACL
Для групп
setfacl -m g:"domain users":r-x /c/install
Для пользователей
setfacl -m u:"admin":rwx /c/install
Да и еще, у тебя включены директивы наследования не забудь про них
Вход доменных пользователей в linux
ЧТобы можно было менять права на папки из проводника Windows надо чтобы пользователи домена логинились в линукс.
Для этого:
Файл /etc/pam.d/common-account
account sufficient pam_winbind.so account required pam_unix.so
Файл /etc/pam.d/common-auth
auth sufficient pam_winbind.so auth required pam_unix.so use_first_pass
Файл /etc/pam.d/common-session
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022 session sufficient pam_winbind.so session required pam_unix.so
Для того чтобы работали права доступа из Windows и можно было менять права на папки из проводника надо раздел, на котором лежит шара монтировать с с опцией acl
пример файла /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass> /dev/pve/root / ext3 errors=remount-ro 0 1 /dev/pve/data /var/lib/vz ext3 defaults,acl 0 1 /dev/md0 /boot ext3 defaults 0 1 /dev/pve/swap none swap sw 0 0 proc /proc proc defaults 0 0
Русские символы в именах
Для того чтобы работали русские символы в именах нужно правильно прописать ресурсы в файле /etc/samba/smbd.conf. У меня получалось правильно прописывать так:
Устанавливал локаль RU.UTF-8 с помощью:
dpkg-reconfigure locales
Потом в свойствах сесии putty тоже устанавливал Window→Translation→UTF-8
Потом оформлял файл в блокноте и потом просто в nano - копировать-вставить… Nano почему-то не работает с UTF-8… Говорят надо перекомпилить…
Или просто расшаривал /etc/samba/ и Блокнотом правил smbd.conf - блокнот делает все идеально :)
Пользователи из Active Directory в ajaxplorer
Для того чтобы увидеть пользователей из Active Directory в ajaxplorer есть плагин auth.ldap.
Сначала надо установить поддержку LDAP для php:
apt-get install php5-ldap
ПОтом редактируем файл с настройками плагинов:
nano /var/www/ajaxplorer/plugins/auth.ldap/class.ldapAuthDriver.php
Раздел “AUTH_DRIVER” целиком комментируем и заменяем на:
"AUTH_DRIVER" => array( "NAME" => "multi", "OPTIONS" => array( "MODE"=> "MASTER_SLAVE", "MASTER_DRIVER" => "ldap", "SLAVE_DRIVER" => "serial", "USER_BASE_DRIVER1" => "ldap", "USER_BASE_DRIVER2" => "serial", "TRANSMIT_CLEAR_PASS" => true, "USER_ID_SEPARATOR" => "_-_", "DRIVERS" => array( "serial" => array( "LABEL" => "Local", "NAME" => "serial", "OPTIONS" => array( "LOGIN_REDIRECT" => false, "USERS_FILEPATH" => "AJXP_DATA_PATH/plugins/auth.serial/users.ser", "AUTOCREATE_AJXPUSER" => true, "TRANSMIT_CLEAR_PASS" => true, ), ), /*configure: "ip"': the ip or 1.2.com (domain name) "userorganisationalunit": the OU that you have your users in (will automaticly read sub OU's) "admin": the admin's name "adminou": the OU of your admin (yes CN is correct infront of it) "adminpassword": your admins password you may remove all "" */ "ldap" => array( "LABEL" => "BLUESLATE", "NAME" => "ldap", "OPTIONS" => array( "LDAP_URL" => 'ldap://"ip"', "LDAP_PORT" => '389', "LDAP_USERATTR" => 'sAmAccountName', "LDAP_DN" => 'OU="userorganisationalunit",DC="yourdomain",DC="com"', "LDAP_FILTER" => 'objectClass=user', "LDAP_USER" => 'CN="admin",OU="adminou",DC="yourdomain",DC="com"', "LDAP_PASSWORD" => '"adminpassword"', "LOGIN_REDIRECT" => false, "AUTOCREATE_AJXPUSER" => true, "TRANSMIT_CLEAR_PASS" => true, ), ), ), ), ),
Тут задаются параметры:
“ip”': адрес контроллера домена (не обязательно IP)
“userorganisationalunit”: подразделение (OU) в котором находятся импортируемые пользователи
“admin”: логин админа
“adminou”: OU админа (указание CN обязательно)
“adminpassword”: пароль админа
Кавычки бывает нужно убрать, но не обязательно.
Узнать так называемые Distinguished Names можно в на машине с Windows запросом:
dsquery user
Квотирование диска.
Квоты раздаются на уровне ОС FreeBSD в файле /etc/fstab:
# Device Mountpoint FStype Options Dump Pass# /dev/ad0s1b none swap sw 0 0 /dev/ad0s1a / ufs rw 1 1 /dev/ad0s1f /home ufs rw,userquota,groupquota /dev/ad0s1e /usr ufs rw 2 2 /dev/ad0s1d /var ufs rw 2 2 /dev/acd0 /cdrom cd9660 ro,noauto 0 0 /dev/ad2s1d /home/mounted/diskq ufs rw,userquota,groupquota /dev/ad2s1e /home/mounted/diskx ufs rw,userquota,groupquota
проверяем работает ли квота:
quota -v
, а уже потом создаются/меняются для группы и ли пользователя:
edquota FC\JackSoft man edquota
редактируем тектстовый файл и записываем его.
Все квота изменена.
P.S. Установленная система так работает уже пол-года. Скорость файлового сервера на Юниксе на порядок выше чем тот же сервак на Винде. Дело стоит заморочек с переносом.
Discussion