Table of Contents

Присоединение 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. Установленная система так работает уже пол-года. Скорость файлового сервера на Юниксе на порядок выше чем тот же сервак на Винде. Дело стоит заморочек с переносом.