Authentifizierung am AD mit CentOS 4

Hier beschreibe ich, wie ich die Authentifizierung am Active Directory mit CentOS 4 hinbekommen habe.

Das folgende Howto habe ich mit Hilfe der Mini-Howtow’s von Mike Foley (unter http://www.yelof.com/pam-to-active-directory/index.html) und darkness (unter http://darkness.codefu.org/wordpress/2005/07/23/192) erstellt:

Netzwerkbeschreibung

  • Die Active Directory Domäne ist Domain.local
  • Der Primary Domain Controller ist server.domain.local (192.168.0.1)
  • Netzwerk: 192.168.0.0/255.255.255.0
  • Linux-Distribution: CentOS 4.2

Kerberos: /etc/krb5.conf:

[logging]
default = SYSLOG:NOTICE:DAEMON
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = DOMAIN.LOCAL
default_etypes = des-cbc-crc des-cbc-md5
default_etypes_des = des-cbc-crc des-cbc-md5
dns_lookup_kdc = true
clockskew = 300

[realms]
DOMAIN.LOCAL = {
    kdc = server.domain.local
}

[domain_realm]
.domain.local = DOMAIN.LOCAL
domain.local = DOMAIN.LOCAL
.Domain.local = DOMAIN.LOCAL
Domain.local = DOMAIN.LOCAL
.Domain.Local = DOMAIN.LOCAL
Domain.Local = DOMAIN.LOCAL
.domain.Local = DOMAIN.LOCAL
domain.Local = DOMAIN.LOCAL

[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf

[appdefaults]
pam = {
    debug = false
    ticket_lifetime = 1d
    renew_lifetime = 1d
    forwardable = true
    proxiable = false
    retain_after_close = false
    minimum_uid = 0
    krb4_convert = false
}

/etc/nscd.conf:

server-user             nscd
debug-level             0
paranoia                no

enable-cache            passwd          yes
positive-time-to-live   passwd          600
negative-time-to-live   passwd          20
suggested-size          passwd          211
check-files             passwd          yes
persistent              passwd          yes
shared                  passwd          yes
enable-cache            group           yes
positive-time-to-live   group           3600
negative-time-to-live   group           60
suggested-size          group           211
check-files             group           yes
persistent              group           yes
shared                  group           yes

enable-cache            hosts           yes
positive-time-to-live   hosts           3600
negative-time-to-live   hosts           20
suggested-size          hosts           211
check-files             hosts           yes
persistent              hosts           yes
shared                  hosts           yes

Neues Verzeichnis anlegen (Benutzerverzeichnisse für die AD Domain):

  • mkdir /home/DOMAIN
  • chmod 755 /home/DOMAIN

Kerberos testen:

  • kinit Administrator@DOMAIN.LOCAL
  • Das sollte fehlerfrei durchlaufen
  • beim Aufruf von klist sollte das entsprechende Ticket zu sehen sein

Samba / Winbind: /etc/samba/smb.conf:

[global]
    log file = /var/log/samba/%m.log
    load printers = yes
    idmap gid = 16777216-33554431
    idmap uid = 16777216-33554431
    socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
    client use spnego = yes
    encrypt passwords = yes
    realm = DOMAIN.LOCAL
    winbind use default domain = yes
    template shell = /bin/bash
    allow hosts = 192.168.0.0/255.255.255.0
    dns proxy = no
    writeable = yes
    printing = cups
    server string = Samba Server
    password server = server.domain.local
    template homedir = /home/%D/%U
    workgroup = DOMAIN
    valid users = @Domänen-Admins,@Domänen-Benutzer
    printcap name = /etc/printcap
    security = ads
    max log size = 50

[Share1]
    path = /srv/share1
    writeable = yes
    valid users = @Domänen-Admins,@Domänen-Benutzer

[Share2]
    path = /srv/share2
    writeable = yes
    valid users = @Domänen-Benutzer

smb und winbind neustarten:

  • /sbin/service smb restart
  • /sbin/service winbind restart

smb und winbind in die Start-Konfiguration eintragen:

  • /sbin/chkconfig –level 345 smb on
  • /sbin/chkconfig –level 345 winbind on

/etc/nsswitch.conf

passwd:     files winbind
shadow:     files winbind
group:      files winbind
hosts:      files dns
bootparams: nisplus [NOTFOUND=return] files
ethers:     files
netmasks:   files
networks:   files
protocols:  files winbind
rpc:        files
services:   files winbind
netgroup:   files winbind
publickey:  nisplus
automount:  files
aliases:    files nisplus

Samba zur Domain joinen: net ads join -U administrator

Neustart, dann test, ob die entsprechenden Werte ankommen:

  • wbinfo -u (sollte alle AD-Benutzer anzeigen)
  • wbinfo -g (sollte alle AD-Gruppen anzeigen)
  • getent passwd (sollte sowohl die lokalen als auch die AD-Benutzer anzeigen)
  • getent group (sollte sowohl die lokalen als auch die AD-Gruppen anzeigen)

PAM (vorher von den entsprechenden Dateien ein Backup machen und eine Konsole auflassen)

/etc/pam.d/login

#%PAM-1.0auth       required     pam_securetty.soauth       required     pam_stack.so service=system-authauth       required     pam_nologin.soaccount    required     pam_stack.so service=system-authpassword   required     pam_stack.so service=system-authsession    required     pam_stack.so service=system-authsession    optional     pam_console.sosession    required     pam_mkhomedir.so skel=/etc/skel/ umask=0077

/etc/pam.d/gdm

#%PAM-1.0
auth       required     pam_env.so
auth       required     pam_stack.so service=system-auth
auth       required     pam_nologin.so
account    required     pam_stack.so service=system-auth
password   required     pam_stack.so service=system-auth
session    required     pam_stack.so service=system-auth
session    optional     pam_console.so
session    required     pam_mkhomedir.so skel=/etc/skel/ umask=0077

/etc/pam.d/system-auth

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      /lib/security/$ISA/pam_env.so
auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok
auth        sufficient    /lib/security/$ISA/pam_winbind.so use_first_pass
auth        required      /lib/security/$ISA/pam_deny.so

account     sufficient    /lib/security/$ISA/pam_succeed_if.so uid < 100
account     required      /lib/security/$ISA/pam_unix.so
account     [default=bad success=ok user_unknown=ignore] /lib/security/$ISA/pam_winbind.so

password    requisite     /lib/security/$ISA/pam_cracklib.so retry=3
password    sufficient    /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
password    sufficient    /lib/security/$ISA/pam_winbind.so use_authok
password    required      /lib/security/$ISA/pam_deny.so

session     required      /lib/security/$ISA/pam_limits.so
session     required      /lib/security/$ISA/pam_unix.so
session     optional      /lib/security/$ISA/pam_mkhomedir.so

Auf einer anderen Konsole testen, ob ein Login mit einem AD-Benutzer möglich ist (entweder per DOMAIN\Benutzername oder nur per Benutzername)

  • es sollte automatisch unter /home/DOMAIN/ ein Benutzerverzeichnis angelegt werden
  • Hinweis: Bei Benutzernamen mit Leerzeichen hat Linux Probleme, also wenn Vor- und Nachname als Benutzername gewünscht sind, am Besten mit einem Punkt (Vorname.Nachname) oder einem Unterstrich (Vorname_Nachname) trennen.

Wenn das Login funktioniert (!!!) (auch von Lokalen Benutzern, insbesondere root)

  • Neustart, damit auch der GDM die neue PAM-Konfiguration lesen kann

Danach sollte die Authentifizierung per AD problemlos laufen ;-)