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:

  1. Netzwerkbeschreibung
  1. Die Active Directory Domäne ist Domain.local
  2. Der Primary Domain Controller ist server.domain.local (192.168.0.1)
  3. Netzwerk: 192.168.0.0/255.255.255.0
  4. 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)
    1. /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

    2. /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
    3. /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 ;-)