Все команды выполнялись от прав
пользователя root.
В статье
использованы следующие данные:
имя домена – fmd1.local
первичный контролер
домена c DNS (PDC) – srvc.fmd1.local, его IP 197.168.17.50
резервные
контролеры домена (BDС) 197.168.18.5, 197.168.17.110
настраиваемый
сервер – gateway, его IP 197.168.17.104
2. Проверяю и
при необходимости меняю имя сервера – 'nano /etc/hostname'? например у меня:
gateway
3. Проверяю и
редактирую 'nano /etc/hosts' чтобы в нем были записи полного и короткого доменного имени,
пример:
127.0.0.1 localhost
197.168.17.104 gateway.fmd1.local gateway
4. Правлю 'nano /etc/resolv.conf' до вида:
domain fmd1.local
search fmd1.local
nameserver
197.168.17.50
5. Устанавливаю
демона обновления времени 'apt-get install ntpdate' и настраиваю его 'nano /etc/default/ntpdate' в моем случае:
NTPSERVERS="0.debian.pool.ntp.org
1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
4.srvc.fmd1.local"
NTPOPTIONS=""
6. Запускаю
ручную синхронизацию 'ntpdate -s srvc.fmd1.local'
7. Устанавливаю необходимые пакеты и библиотеки 'apt-get install krb5-user samba winbind libpam-krb5 libpam-winbind libnss-winbind'
8. Обнуляю базовый конфиг 'cat /dev/null > /etc/krb5.conf' и пишу свой 'nano /etc/krb5.conf' получилось следующее:
7. Устанавливаю необходимые пакеты и библиотеки 'apt-get install krb5-user samba winbind libpam-krb5 libpam-winbind libnss-winbind'
8. Обнуляю базовый конфиг 'cat /dev/null > /etc/krb5.conf' и пишу свой 'nano /etc/krb5.conf' получилось следующее:
[libdefaults]
default_realm = FMD1.LOCAL # (обязательно большими)
ticket_lifetime = 24000
clock_skew = 300
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true
[realms]
FMD1.LOCAL = {
kdc = 197.168.17.50
kdc = 197.168.18.5
kdc = 197.168.17.110
admin_server = 197.168.17.50
}
[domain_realm]
.fmd1.local = FMD1.LOCAL
fmd1.local = FMD1.LOCAL
[login]
krb4_convert = true
krb4_get_tickets = false
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5dc.log
admin_server = FILE:/var/log/ksadmind.log
Внимание!!! Везде где имя домена прописано заглавными буквами оно должно быть прописано БОЛЬШИМИ буквами, чтобы потом не разбираться, почему не работает.
9. Создаю файлы для логов 'touch /var/log/krb5libs.log' 'touch /var/log/krb5dc.log' 'touch /var/log/ksadmind.log' и даю к ним права доступа 'chmod 777 /var/log/krb5libs.log' ' chmod 777 /var/log/krb5dc.log' ' chmod 777 /var/log/ksadmind.log'
10. Проверяю возможность авторизации в AD командой 'kinit username@DOMAIN.COM' Важно имя домена писать ЗАГЛАВНЫМИ буквами!!! Получиться должно как-то так:
root@gateway:/# kinit admin@FMD1.LOCAL
Password for admin@FMD1.LOCAL:
11. Проверяю получен ли билет от кербероса командой 'klist' должно получиться похожее на следующее:
root@gateway:/# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin@FMD1.LOCAL
Valid starting Expires Service principal
19.08.2015 11:09:01 19.08.2015 17:48:57 krbtgt/FMD1.LOCAL@FMD1.LOCAL
12. Настраиваю дальше конфиг самбы, предварительно обнулив - 'nano /etc/samba/smb.conf' у меня получился он таким:
[global]
server string = Gateway
interfaces = eth2
wins server = 197.168.17.50
password server = *
realm = FMD1.LOCAL
workgroup = FMD1
security = ads
encrypt passwords = yes
admin users=admin
#Разрешить заводить учетки с пустыми паролями
null passwords = true
log file = /var/log/samba/log.%m
debug level = 2
log level = 1
max log size = 50
dns proxy = no
socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192
name resolve order = hosts bcast lmhosts
#Не контролировать чувствительность к регистру.
case sensitive = no
client use spnego = yes
client ntlmv2 auth = yes
client signing = yes
#Чтобы самба не пыталась стать главной в группе и домене или даже контролером домена
local master = no
domain master = no
preferred master = no
os level = 0
domain logons = no
unix charset = UTF-8
dos charset = 866
#Включить режим обработки симлинков сервером. Когда клиенты - это компьютеры с windows
unix extensions = no
follow symlinks = yes
auth methods = winbind
idmap config * : range = 10000-40000
idmap config * : backend = tdb
# winbind separator = »
winbind enum groups = yes
winbind enum users = yes
template homedir = /home/%D/%U
template shell = /bin/bash
winbind use default domain = yes
winbind refreshtickets = yes
# Возможность оффлайн-авторизации при недоступности контроллера домена
winbind offline logon = yes
winbind cache time = 300
# Отключить поддержку принтеров
load printers = no
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes
#[printers]
# comment = All Printers
# browseable = no
# path = /var/spool/samba
# printable = yes
# guest ok = no
# read only = yes
# create mask = 0700
#[print$]
# comment = Printer Drivers
# path = /var/lib/samba/printers
# browseable = yes
# read only = yes
# guest ok = no
[cdrom]
comment = %h - CD-ROM
read only = yes
locking = no
path = /cdrom
guest ok = yes
[Upload]
comment = %h - Upload
path = /mnt/upload
browseable = yes
writeable = yes
directory mask = 0777
create mask = 0666
valid users = @"Domain admins", FMD1\admin
13. Проверяю конфиг командой 'testparm' получаю результат проверки:
root@gateway:/# testparm
Load smb config files from /etc/samba/smb.conf
WARNING: The "null passwords" option is deprecated
Processing section "[cdrom]"
Processing section "[Upload]"
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions
Обращает внимание на параметр null passwords, но собственно он мне-нужен так что не страшно.
14. Рестартую samba и winbind командой '/etc/init.d/winbind stop && /etc/init.d/samba restart && /etc/init.d/winbind start'
15. Ввожу сервер в домен – 'net ads join -U admin' спросил пароль - набрал. Бывает что не находит домен автоматически, помогает иногда принудительное указание командой 'net ads join -U admin -S srvc.fmd1.local'
16. Перезапускаю winbind для считывания доменных пользователей и групп - '/etc/init.d/winbind force-reload'
17. Проверяю считал ли с AD пользователей и групп:
'wbinfo -t' установил ли доверительные отношения с доменом:
root@gateway:/# wbinfo -t
checking the trust secret for domain FMD1 via RPC calls succeeded
'wbinfo –u' считал ли пользователей
'wbinfo -g' считал ли группы
Если все настроено нормально winbind покажет пользователей и группы прописанные в AD.
18. Интегрирую winbind в систему для возможности назначения пользователей и групп домена для доступа к файлам правя конфиг – 'nano /etc/nsswitch.conf' до вида:
passwd: compat winbind
group: compat winbind
shadow: compat winbind
gshadow: files
hosts: files dns mdns4_minimal[NotFoud=return] mdns4
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
19. Проверяю на сколько успешно прошла интеграция командами:
'getent passwd' должна вернуть перечень не только локальных но и доменных пользователей
'getent group' должна вернуть перечень не только локальных но и доменных групп
!!! При первоначальной настройке я не установил библиотеки libpam-winbind libnss-winbind в результате чего эти команды возвращали только локальных пользователей и групп.
20. Для настройки аутентификации и авторизации пользователей AD на сервере модифицирую PAM – 'nano /etc/pam.d/samba' добавив 2 строчки:
для х86 систем:
auth required /lib/security/pam_winbind.so
account required /lib/security/pam_winbind.so
для х64:
auth required /lib/x86_64-linux-gnu/security/pam_winbind.so
account required /lib/x86_64-linux-gnu/security/pam_winbind.so
У меня получился такой конфиг:
@include common-auth
@include common-account
@include common-session-noninteractive
auth required /lib/x86_64-linux-gnu/security/pam_winbind.so
account required /lib/x86_64-linux-gnu/security/pam_winbind.so
21. Перегружаю сервер, ввожу аккаунт и пароль доменного пользователя и попадаю в систему. Все работает.
22. Внимание, если настроен фаервол, то надо разрешить входящие UDP пакеты с 137-го порта. В iptables правило выглядит примерно так:
iptables -A INPUT -i eth2 -p udp --sport 137 -j ACCEPT