Я пытаюсь войти в систему с активными пользователями каталога, работающими почти неделю. Прежде всего, я новичок в pam, samba, kerberos и winbind. Раньше мы работали с локальными пользователями и sudo, но решили использовать активный каталог для аутентификации пользователей, поэтому нам не нужно поддерживать AD и локальных пользователей на каждой машине. Я погуглил и нашел несколько тихих аналогичных документов о том, как это сделать.
Прежде всего, я установил тестовый бокс с Debian Jessie. Вторым шагом была установка этих пакетов. В фигурных скобках указаны цели, как я их понял, поправьте, пожалуйста, если я ошибаюсь:
• krb5-user (Kerberos client, for recieving TGT and user authentication)
• samba (Samba for joining the AD with the Linux-box)
• smbclient (mounting the home-directory)
• winbind (second way of user-authentication, if Kerberos fails for any reason)
• libpam-winbind (PA-Module for winbind)
• libpam-mount (Not sure about this one)
• libpam-ccreds (Storing credentials, if the DC is not reachable)
• libpam-krb5 (PAM-Module for Kerberos)
• cifs-utils (Mounting cif shares)
Я могу присоединиться к домену с помощью этой команды:
net ads join member -k -S DC1.DOMAIN.LOCAL -U {User_with_admin_rights} createcomputer=IT/BLA osName=Debian osVer=`cat /etc/debian_version` -d 1
После успешного присоединения к AD можно получить Kerberos TGT:
kinit -V user@DOMAIN.LOCAL
И получите листинг:
root@testbox / % klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: user@DOMAIN.LOCAL
Valid starting Expires Service principal
14.12.2015 09:47:01 14.12.2015 19:47:01 krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL
renew until 15.12.2015 09:46:57
Но когда я пытаюсь войти в систему с помощью AD-пользователя (имя пользователя: username@DOMAIN.LOCAL), это не сработает:
Dec 14 13:19:58 testbox login[2875]: pam_krb5(login:auth): user username@DOMAIN.LOCAL authenticated as username@DOMAIN.LOCAL
Dec 14 13:20:01 testbox login[2875]: FAILED LOGIN (1) on '/dev/pts/2' FOR 'UNKNOWN', User not known to the underlying authentication module
Насколько я понимаю, имя пользователя может быть аутентифицировано через Kerberos, но эта информация не отправляется в следующий модуль, я прав?
Восстановив pam-конфигурацию, я просто сделал pam-auth-update и активировал все:
[*] Kerberos authentication
[*] Ccreds credential caching - password saving
[*] Unix authentication
[*] Winbind NT/Active Directory authentication
[*] Mount volumes for user
[*] Ccreds credential caching - password checking
И после этого перезапустил службы (smbd, winbind).
Разрешение имен контроллеров домена работает в linuxbox в обоих направлениях.
Любая помощь будет оценена по достоинству! Заранее спасибо!
Вот мой /etc/krb5.conf (я удалил комментарии):
[libdefaults]
default_realm = DOMAIN
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]
DOMAIN.LOCAL = {
kdc = DC1.domain.local
kdc = DC2.domain.local
kdc = DC.domain.local
kdc = DC4.domain.local
kdc = DC5.domain.local
admin_server = DC1.domain.local
default_domain = domain
}
[domain_realm]
kerberos.server = DOMAIN.LOCAL
[login]
krb4_convert = true
krb4_get_tickets = false
[logging]
kdc = FILE:/var/log/krb5.log
admin_server = FILE:/var/log/krb5/kadmind.log
default = SYSLOG:NOTICE:DAEMON
Это мой smb.conf:
#======================= Global Settings =======================
[global]
security = ADS
encrypt passwords = yes
realm = DOMAIN.LOCAL
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
winbind refresh tickets = yes
template homedir = /home/%D/%U
template shell = /bin/bash
client use spnego = yes
client ntlmv2 auth = yes
encrypt passwords = yes
restrict anonymous = 2
domain master = no
local master = no
preferred master = no
os level = 0
workgroup = DOMAIN
; wins server = w.x.y.z
dns proxy = no
; interfaces = 127.0.0.0/8 eth0
; bind interfaces only = yes
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
#####
server role = standalone server
passdb backend = tdbsam
obey pam restrictions = 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* .
pam password change = yes
map to guest = bad user
########
; logon path = \\%N\profiles\%U
; logon drive = H:
; logon script = logon.cmd
; add user script = /usr/sbin/adduser --quiet --disabled-password --gecos "" %u
; add machine script = /usr/sbin/useradd -g machines -c "%u machineaccount" -d /var/lib/samba -s /bin/false %u
; add group script = /usr/sbin/addgroup --force-badname %g
##########
; include = /home/samba/etc/smb.conf.%m
; idmap uid = 10000-20000
; idmap gid = 10000-20000
; template shell = /bin/bash
; usershare max shares = 100
usershare allow guests = yes
#======================= Share Definitions =======================
[homes]
comment = Home Directories
browseable = no
read only = yes
create mask = 0700
directory mask = 0700
valid users = %S
;[netlogon]
; comment = Network Logon Service
; path = /home/samba/netlogon
; guest ok = yes
; read only = yes
;[profiles]
; comment = Users profiles
; path = /home/samba/profiles
; guest ok = no
; browseable = no
; create mask = 0600
; directory mask = 0700
И наконец, что не менее важно, nsswitch.conf: passwd: compat winbind group: compat winbind shadow: compat winbind gshadow: files
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
Есть и другая вещь. Вам необходимо установить libpam-mount. После этого добавьте следующую строку в /etc/pam.d/common-session
session optional pam_mount.so
Есть файл конфигурации для монтирования: /etc/security/pam_mount.conf.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
<pam_mount>
<debug enable="0" />
<mntoptions deny="suid,dev" />
<mntoptions allow="*" />
<mntoptions deny="*" />
-->
<mntoptions require="nosuid,nodev" />
<logout wait="100000" hup="yes" term="yes" kill="no" />
<volume options="username=%(USER)" fstype="cifs" server="server.domain.local" path="User/%(USER)" mountpoint="/home/domain/%(USER)/Shares/%(DOMAIN_USER)" />
<volume options="username=%(USER)" fstype="cifs" server="server.domain.local" path="Data" mountpoint="/home/domain/%(USER)/Shares/Data" />
<umount>umount %(MNTPT)</umount>
<mkmountpoint enable="1" remove="false" />
</pam_mount>
Хорошо, я заработал сам, по крайней мере, логин. Протестируйте отображение idmapping на двух разных ящиках, а uid и gid находятся на одном и том же. Единственное, что не работает atm, - это монтирование домашнего каталога, как установлено на вкладке Unix пользователя в настройках Active Directory. В качестве обходного пути создается каталог в / home /доменное имя/имя пользователя. Я выложу сюда свои конфиги и, когда у меня заработает монтирование "домашнего каталога AD", конечно же, обновление.
smb.conf:
[global]
workgroup = DOMAIN
security = ADS
realm = DOMAIN.LOCAL
netbios name = HOSTNAME
dedicated keytab file = /etc/krb5.keytab
kerberos method = secrets and keytab
idmap config DOMAIN : default = yes
idmap config DOMAIN : backend = ad
idmap config DOMAIN : schema_mode = rfc2307
idmap config DOMAIN : readonly = yes
idmap config DOMAIN : range = 10000-1999999
idmap cache time = 604800
template homedir = /home/%D/%U
template shell = /bin/bash
winbind trusted domains only = no
winbind use default domain = yes
winbind enum users = no
winbind enum groups = no
winbind refresh tickets = yes
winbind expand groups = 4
winbind offline logon = true
winbind nss info = rfc2307
domain master = no
local master = no
vfs objects = acl_xattr
map acl inherit = yes
store dos attributes = yes
client ldap sasl wrapping = sign
encrypt passwords = yes
client use spnego = yes
client ntlmv2 auth = yes
restrict anonymous = 2
dns proxy = no
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
server role = member server
passdb backend = tdbsam
obey pam restrictions = 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* .
pam password change = yes
map to guest = bad user
krb5.conf
[libdefaults] default_realm = DOMAIN.LOCAL krb4_config = /etc/krb.conf krb4_realms = /etc/krb.realms kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true default_keytab_name = FILE: /etckey/
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true
[realms]
DOMAIN.LOCAL = {
kdc = DC1.DOMAIN.local
admin_server = DC1.DOMAIN.local
default_domain = DOMAIN.local
}
[domain_realm]
.DOMAIN.local = DOMAIN.LOCAL
DOMAIN.local = DOMAIN.LOCAL
[login]
krb4_convert = true
krb4_get_tickets = false
[logging]
default = SYSLOG:DEBUG:DAEMON
Nsswitch не изменился. Если есть какие-либо предложения или подсказки о том, как заставить работать монтирование другого домашнего каталога, я буду очень признателен :)