Ввод Linux-клиентов в домен Samba 4.x
Добавлено: 22 окт 2012, 12:19
Для samba4:
Так как полноценных официальных сборок samba4 для RHEL/СentOS/etc еще нет, мне пришлось собирать пакеты вручную. Можно также собрать из официальных релизов и git.
Подключаем репозиторий raven-extras - создаем файл /etc/yum.repos.d/raven.repo со следующим содержимым:
Код: Выделить всё
[raven-extras]
name=Raven's extra package repository
baseurl=http://pkgs.dyn.su/el6-extras/$basearch/
enabled=1
gpgcheck=0
Устанавливаем пакеты:
Код: Выделить всё
# yum install samba4-winbind-clients samba4-winbind-krb5-locator samba4-client samba4-winbind nss-pam-ldapd nss-util nss-tools nss krb5-workstation krb5-libs ntpdate
Код: Выделить всё
# ntpdate kg.pool.ntp.org
Код: Выделить всё
[global]
workgroup = OFFICE # Рабочая группа в домене
realm = DC.DOMAIN.TLD # Полное имя нашего домена
netbios name = linux # Локальное имя компьютера
security = ADS
obey pam restrictions = Yes
restrict anonymous = 2
socket options = SO_KEEPALIVE SO_BROADCAST TCP_NODELAY IPTOS_THROUGHPUT SO_RCVBUF=4096 SO_SNDBUF=4096
load printers = No
disable spoolss = Yes
show add printer wizard = No
os level = 0
local master = No
domain master = No
kerberos method = secrets and keytab
template homedir = /home/%D/%U # Путь к домашним директориям. В данном случае будет выглядеть как /home/OFFICE/username
template shell = /bin/bash # Шелл пользователя
winbind separator = ~
winbind cache time = 3600
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = yes
winbind refresh tickets = Yes
winbind offline logon = Yes
winbind nested groups = yes
winbind expand groups = 3
idmap config * : range = 10000-20000
idmap config * : backend = tdb
Для использования в качестве клиента samba3 можно обойтись стандартными репозиториями для вашего дистрибутива напр. CentOS-base. Команда установки пакетов в данном случае быдет выглядеть так:
Код: Выделить всё
# yum install samba-winbind-clients samba-winbind-krb5-locator samba-client samba-winbind nss-pam-ldapd nss-util nss-tools nss krb5-workstation krb5-libs ntpdate
В некоторых особо устаревших версиях samba возможно не подгребутся строки конфига:
Код: Выделить всё
idmap config * : range = 10000-20000
idmap config * : backend = tdb
Код: Выделить всё
idmap gid = 10000-20000
idmap gid = 10000-20000
Реализация не опробована, но подозреваю что это достаточно тривиальная задача.
Текущие версии Fedora
Реализация идентична el6, с той лишь разницей, что все уже есть в репозиториях и вместо sysvinit используется systemd.
Проверяем наш конфиг
Код: Выделить всё
# testparm
Создаем конфиг /etc/krb5.conf
Код: Выделить всё
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = DC.DOMAIN.TLD
dns_lookup_realm = false
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
DC.SMARTJOBBOARD.COM = {
kdc = dc.domain.tld # адрес сервера
password_server = 192.168.0.10 # ip сервера
admin_server = dc.domain.tld
default_domain = DC.DOMAIN.TLD
}
[domain_realm]
.DC.DOMAIN.TLD = DC.DOMAIN.TLD
DC.DOMAIN.TLD = DC.DOMAIN.TLD
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
Код: Выделить всё
# kinit administrator@DC.DOMAIN.TLD
Password for admistrator@DC.DOMAIN.TLD: вводим пароль админа домена
Warning: Your password will expire in 991 days on Sat Jul 4 09:29:56 2015 # все ОК
# klist # смотрим список билетов
# kdestroy # Удаляем билеты - оно пока не надо)))
Код: Выделить всё
passwd: files
shadow: files
group: files
Код: Выделить всё
passwd: files winbind
shadow: files winbind
group: files winbind
Код: Выделить всё
auth required pam_env.so
auth sufficient pam_unix.so likeauth nullok
auth requisite pam_succeed_if.so uid >= 500 quiet
auth optional pam_group.so
auth sufficient pam_winbind.so cached_login use_first_pass
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_winbind.so cached_login
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3 type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password sufficient pam_winbind.so cached_login use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_mkhomedir.so umask=0022 skel=/etc/skel
session required pam_unix.so
Код: Выделить всё
cached_login = yes
Код: Выделить всё
# sestatus
Код: Выделить всё
SELinux status: enabled
SELINUX=enforcing
изменяем на
SELINUX=disabled.
Добавляем демоны в автозагрузку:
Код: Выделить всё
# chkconfig smb on
# chkconfig winbind on
Код: Выделить всё
# samba-tool dns add 192.168.0.10 dc.domain.tld <linux> A <ip> # добавляем запись в DNS
# net ads join -W DC.DOMAIN.TLD -U administrator@DC.DOMAIN.TLD # Добавляем машину в домен
Где <linux> - локальное имя машины, <ip> - ip-адрес хоста добавляемого в домен.
Может случиться так, что последняя команда вывалит следующую ругань:
Это не страшно, машина в домен добавлена, просто не обновлена запись в DNS. Лично для меня это не критично и в случае крайней необходимости можно запись поправить руками.Enter administrator@DC.DOMAIN.TLD's password:
Using short domain name -- OFFICE
Joined '<linux>' to realm 'dc.domain.tld'
No DNS domain configured for <linux>. Unable to perform DNS Update.
DNS update failed!
Стартуем сервисы (если на машине пришлось отключать selinux, то нужно ее просто перезагрузить):
Код: Выделить всё
service smb start
service winbind start
Код: Выделить всё
# wbinfo -u
# wbinfo -g
# getent passwd
# getent group
Для того, чтобы наши доменные пользователи имели права на монтирование флешек, проигрывание аудио и прочих благ присущих локальным пользователям, необходимо включить доменных пользователей в локальные группы. Лучше всего это сделать отредактировав файл /etc/security/groups.conf и добавив в него следующую строку:
Код: Выделить всё
*;*;%domain users;Al0000-2400;dialout,cdrom,audio,floppy,dip,video,plugdev,scanner,netdev,lpadmin,powerdev,pulse,pulse-access
Код: Выделить всё
uid=10000(raven) gid=10000(domain users) groups=10000(domain users),11(cdrom),18(dialout),19(floppy),39(video),40(dip),63(audio),994(pulse-access),995(pulse)
Код: Выделить всё
%domain\ users ALL=(ALL) ALL
конфигурационные файлы smb.conf, krb5.conf и nsswitch.conf используются идентичные, различия лишь в следующем:
Установка необходимых пакетов:
Код: Выделить всё
# aptitude install samba ntpdate smbclient winbind krb5-config krb5-user
common-auth
Код: Выделить всё
auth required pam_env.so
auth sufficient pam_unix.so likeauth nullok
auth requisite pam_succeed_if.so uid >= 500 quiet
auth optional pam_group.so
auth sufficient pam_winbind.so use_first_pass
auth required pam_deny.so
auth optional pam_cap.so
Код: Выделить всё
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account sufficient pam_winbind.so use_first_pass
account required pam_permit.so
Код: Выделить всё
password [success=2 default=ignore] pam_unix.so obscure sha512
password requisite pam_deny.so
password required pam_permit.so
password optional pam_gnome_keyring.so
Код: Выделить всё
session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_mkhomedir.so umask=0022 skel=/etc/skel
session required pam_unix.so
session required pam_winbind.so use_first_pass
Если на машине существует локальная учетка, то чтобы залогигиться под доменным пользователем необходимо обособить тот факт, что пользователь из домена. Для этого необходимо указать домен. В данной конфигурации это делается так: OFFICE~user, например
Код: Выделить всё
# ssh <ip> -l OFFICE~user