Linux an Active Direcory Domäne anmelden

Um sich bei einem Linux Server über das Actice Directory authentifizieren (anmelden) zu können gibt es mehrere Möglichkeiten.
Die populärsten sind kerbereos und winbind.
Hier wird erklärt, wie man sich mit winbind über ein AD-Login bei einem Linux Server anmelden kann:

Domäne konfigurieren

Achtung
Damit das Active Directry login funktioniert, MUSS die Ausgabe von

hostname --fqdn

zwingend genau dem Domänen Namen der Windows Domäne entsprechen!
Das heisst, wenn das Clients im Active Directoy die Domäne: client.example.net haben, das Server Netz aber die Domäne: my-server.linux.example.net, wird das nicht funktionieren. Die Server, müssen dann auch den Hostnamen (fqdn) my-server.example.net haben!

Sollte der Server nicht bereits im DNS so eingetragen sein, muss der Eintrag in /etc/hosts erfolgen:

192.168.1.30 my-server.example.net my-server

Erstmal installieren wir die benötigten Komponenten:

yum install krb5-workstation pam_krb5 samba-winbind samba-winbind-clients

Nun müssen in der Datei /etc/resolv.conf die DNS-Server der Domaincontroller- und die Domain eingetragen werden:

nameserver 192.168.1.10
nameserver 192.168.1.20
search ad.example.net

Als nächstes kommt die Kerberos Konfiguration:

/etc/krb5.conf

[libdefaults]
        default_realm = AD.EXAMPLE.NET
        dns_lookup_realm = false
        dns_lookup_kdc = true

Danach noch die samba Konfiguration in /etc/samba/smb.conf anpassen, bzw. mit den folgenden Werten ergänzen:

[global]
workgroup                              = AD
realm                                  = AD.EXAMPLE.NET
security                               = ADS
winbind enum users                     = yes
winbind enum groups                    = yes
winbind use default domain             = no
winbind refresh tickets                = yes
template shell                         = /bin/bash
idmap config * : range                 = 10000 - 19999
idmap config AD : backend              = rid
idmap config AD : range                = 1000000 - 1999999
Hinweis
Obwohl wir die smb.conf geändert haben, muss sama (smb/nmb) NICHT gestartet werden.
Die smb.conf wird in diesem Falle nur vom winbind daemon gebraucht.

Nun muss noch die Datei /etc/nsswitch.conf angepasst werden damit auf dem Server die AD Benutzer und Gruppen benutzt werden können.
Bei den zwei Einträgen „passwd“ und „group“ muss einfach noch „winbind“ angefügt werden:

passwd:         files winbind
group:          files winbind

Jetzt noch winbind als Autostart Konfigurieren:

systemctl enable winbind

Domäne Beitreten

Nun können wir der Domäne beitreten:

net ads join -Uadministrator

Und testen:

[root@my-server ~]# net ads testjoin
Join is OK

Danach winbind neu starten:

systemctl restart winbind

Und testen:

wbinfo -u
wbinfo -g
getent passwd 'AD\administrator'

sudo Erlaubnis für AD-Gruppenmitglieder

Nun geben wir den Leuten in der Gruppe Linux-Admin noch eine sudo-Berechtigung:

echo "%linux-admins ALL=(ALL) ALL" >> /etc/sudoers.d/ad
Gruppen mit Leerzeichen
Haben hier AD Gruppen Leerzeichen (z.B. "Domain Admins"), so lässt sich dies konfigurieren, indem man die Leerzeichen escaped:

visudo -f /etc/sudoers.d/ad
User_Alias MYADMINS=%AD\\Domain\ Admins
MYADMINS        ALL=(ALL)       NOPASSWD: ALL

SSH login

Um SSH login zu ermöglichen muss die Datei: /etc/pam.d/password-auth-ac mit den folgenden Einträgen ergänz werden:

  • auth sufficient pam_winbind.so use_first_pass
  • account [default=bad success=ok user_unknown=ignore] pam_winbind.so
  • (OPTIONAL) account required pam_listfile.so onerr=fail item=group sense=allow file=/etc/login.group.allowed
  • password sufficient pam_winbind.so use_authtok
  • (OPTIONAL) session optional pam_mkhomedir.so umask=0077

Das ganze sieht dann so aus:

#%PAM-1.0
auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_winbind.so 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 < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_winbind.so
account     required      pam_listfile.so onerr=fail item=group sense=allow file=/etc/login.group.allowed
account     required      pam_permit.so
 
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_winbind.so use_authtok
 
 
password    required      pam_deny.so
 
session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     optional      pam_mkhomedir.so umask=0077
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

Mehrere Gruppen lassen sich mit den folgenden Änderungen zuweisen:

File erstellen, indem alle erlaubten Gruppen sind

/etc/login.group.allowed

root
AD\linux-admins
Einschränkungen
Es gibt allerdings die Einschränkung dass AD Gruppen keine Leerzeichen (spaces) haben dürfen.
Hat man nur Gruppen mit Leerzeichen (z.B. "Domain Admins"), dann muss man lokale Gruppen machen und die entsprechenden Leute manuell in diese Aufnehmen.

Nun wird ein home Verzeichnis fürs ActiveDirectoy erstellt, um die Übersicht über lokale- und AD Logins zu behalten:

mkdir -v /home/AD

Testen

Nun kann das gnaze getestet werden:

tail -f /var/log/secure
$ ssh AD\\hmuster@my-server
AD\hmuster@my-server's password: 
Creating directory '/home/AD/hmuster'.
[AD\hmuster@my-server ~]$

Quellen

Nach CentOS6 upgrade: Windows clients lassen sich nicht mehr zur Domäne hinzufügen

Nach dem upgrade von CentOS/RHEL 5 auf CentOS/RHEL 6 stellt man fest, dass sich Windows clients nicht mehr an der SAMBA-Domäne anmelden können.

Es erscheint die folgende Meldung:

Der folgende Fehler ist beim Abfragen von DNS über den Ressourceneintrag der Dienstidentifizierung (SRV) aufgetreten, der zur Suche eines Domänencontrollers für die Domäne "my.domain.tld" verwendet wird:
 
Fehler: "Der DNS-Name ist nicht vorhanden."
(Fehlercode 0x0000232B RCODE_NAME_ERROR)
 
Die Abfrage war für den SRV-Eintrag für _ldap._tcp.dc._msdcs.MY.DOMAIN.TLD
 
Die häufigsten Ursachen dieses Fehlers sind:
 
- Der DNS-SRV-Eintrag wurde nicht in DNS registriert.
 
- Mindestens eine der folgenden Zonen enthalten keine Delegierung zu dieser untergeordneten Zone:
 
my.domain.tld
domain.tld
tld
. (die Stammzone)
 
Klicken Sie auf "Hilfe", um weitere Informationen über die Fehlerbehebung zu erhalten.

Das Problem liegt daran, dass bei CentOS 5 der smb und der nmb daemon zusammen im startscript: /etc/init.d/smb gestartet wurden.
Bei CentOS 6 hingegen, werden diese über die zwei getrennten Startscript: /etc/init.d/smb und /etc/init.d/nmb gestartet. Vergisst man nun, den nmb daemon zu aktivieren, schlägt das hinzufügen zur domäne fehl.

Das problem wird durch starten des nmb daemons gelöst:

chkconfig nmb on
/etc/init.d/nmb start

Diagnostizieren kann man das Problem mit den folgendes commands:

smbclient -L <IP> -U%
Domain=[MY.DOMAIN.TLD] OS=[Unix] Server=[Samba 3.5.10-115.el6_2]
 
        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Driver Download Area
        share           Disk      Temporary file space
        media           Disk      Video, Bilder und Sound
        IPC$            IPC       IPC Service (domain-server)
        myprinter      Printer   HP Color LaserJet
Domain=[MY.DOMAIN.TLD] OS=[Unix] Server=[Samba 3.5.10-115.el6_2]
 
        Server               Comment
        ---------            -------
        DOMAIN-SERVER        domain-server
        MYWORKSTATION
 
        Workgroup            Master
        ---------            -------
        MY.DOMAIN.TLD        DOMAIN-SERVER

(Wenn der PDC nicht funktioniert sind die unteren beiden Abschnitte "Server" und "Workgroup" leer.

nmblookup -A <PDC-IP>
Looking up status of x.x.x.x
        DOMAIN-SERVER       <00> -         B <ACTIVE>
        DOMAIN-SERVER       <03> -         B <ACTIVE>
        DOMAIN-SERVER       <20> -         B <ACTIVE>
        ..<b>MSBROWSE</b>. <01> - <GROUP> B <ACTIVE>
        MY.DOMAIN.TLD   <1d> -         B <ACTIVE>
        MY.DOMAIN.TLD   <1b> -         B <ACTIVE>
        MY.DOMAIN.TLD   <1c> -         B <ACTIVE>
        MY.DOMAIN.TLD   <1e> - <GROUP> B <ACTIVE>
        MY.DOMAIN.TLD   <00> - <GROUP> B <ACTIVE>
 
        MAC Address = 00-00-00-00-00-00

Benutzer mit erweitertet Rechten

Machnmal wäre es wünschenswert in SAMBA einem Benutzer erweiterte (Domain-) Rechte zu geben.

Dies geht mit dem "privileges" System.

Einschlaten tut man dies in der smb.conf durch hinzufügen des Eintrags:

enable privileges = yes

Dann kann man mittels:

net rpc rights [list|grant|revoke]

Die Benutzerrechte in der Domäne ändern.

Will man beispielsweise einem Benutzer erlauben, dass er seine Maschine selbstständig zur Domäne hinzufügen kann -wo normalerweise der Domänenadmin erforderlich ist- kann man dies wie folgt machen:

net rpc rights grant 'DOMAINdadmin' SeMachineAccountPrivilege

Weitere Informationen dazu finden sich im SAMBA-HOWTO: http://man.chinaunix.net/newsoft/samba/docs/man/Samba-HOWTO-Collection/rights.html#id2569138

Windows an Samba Domäne anmelden

Wenn man mit Samba einen Domänencontroller macht und einen Windows Client an dieser anmelden will, sind folgende Schritte nötig:

# Gruppe für die Maschinenkonten erstellen, sofern nicht schon getan (dies muss nur einmal gemacht werden):

groupadd -g 101 machines

(Die GID "101" darf unter: /etc/group noch nicht existieren, sonst hier eine andere eintragen!)
Alternativ zu groupadd, kann man auch einfach die Zeile:

machines:x:101:

in die Datei /etc/group hinzufügen.

# In Linux ein Maschinenkonto erstellen und zu Samba hinzufügen
adduser CLIENT_NAME$ -g 101 -d /dev/null -s /bin/false
smbpasswd -a -m CLIENT_NAME$

Hinweis
Bei einigen Linux-Distributionen wird man bei der Eingabe von adduser CLIENT_NAME$ Probleme bekommen wegen des Dollarzeichens; es erscheint dann etwa die Meldung "Invalid Username". Dieser fehler liegt nur am adduser-Script, Linux selbst kann sehr gut mit ‚$‘ im Namen umgehen.
In einem solchen fall muss man die Maschinenkonten manuell hinzufügen. Dazu trägt man einfach in der Datei: "/etc/passwd" zuunterst so was ein wie:

CLIENT_NAME$:x:504:101:KOMMENTAR:/dev/null:/bin/false

Dabei steht die erste Zahl (hier: 504) für die User-ID; diese kann Grundsätzlich frei bestimmt werden, darf aber noch nicht existieren. Die Zweite Zahl (101) ist die Gruppe des Maschinenkontos. (Hier das Zuvor bestimmte Gruppenkonto "machines")

# Ein admin Konto zu Samba hinzufügen
smbpasswd -a root (oder ein anderer admin user)

# Dann sollte man mit dem admin account der Domäne beitreten können.

Einloggen kann man sich dann mit jedem SAMBA user, den man vorher mit:

adduser USERNAME
smbpasswd -a USERNAME

hinzugefügt hat.

SAMBA: Umlaute werden durch underscores ersetzt

Nach der Installation von SAMBA kann es vorkommen, dass in den Windows Freigaben alle Umlaute wie ‚ä‘, ‚ö‘,’ü‘ als underscores ‚_‘ dargestellt werden; also aus ‚Sprüche‘ wird dann z.B. ‚Spr_che‘.

Dies ist nervig und lässt sich mit hinzufügen von folgender Zeile:

unix charset = CP850

ganz leicht beheben.

Windows in Samba Domäne: „Sie haben keine Berechtigung, Ihr Kennwort zu ändern“

Die Meldung: "Sie haben keine Berechtigung, Ihr Kennwort zu ändern" bekommt man beim Einsatz eines SAMBA-Domaincontrollers meist dann, wenn am passwd-chat etwas nicht stimmt.

Dazu öffnet man die /etc/samba/smb.conf und sucht nach der Zeile: "passwd chat = ".

Hier gibt es bei vielen Distributionen Unterschiede. Um den "richtigen" Dialog rauszufinden gibt man in der Shell einfach "passwd" ein und sieht so die Ablauffolge. Diese muss genauso in der "passwd-chat = " Zeile eingetragen sein, jeweils immer mit * für die Leerzeichen und " %nn " (ohne anführungs/schlusszeichen) dazwischen.

Einieg Beispiele:

passwd chat = <em>Enter</em>new<em>UNIX</em>password:<em> %nn </em>Retype<em>new</em>UNIX<em>password:</em> %nn <em>passwd:</em>password<em>updated</em>successfully*
 
passwd chat = <em>New</em>password:<em> %nn </em>Retype<em>new</em>password:<em> %nn </em>passwd:<em>all</em>authentication<em>tokens</em>updated<em>successfully.</em>
 
passwd chat = <em>New</em>UNIX<em>password</em> %nn <em>ReType</em>new<em>UNIX</em>password<em> %nn </em>passwd:<em>all</em>authentication<em>tokens</em>updated<em>successfully</em>

Unix/Linux Dateien nicht anzeigen

Wenn man SAMBA als Fileserver braucht, wird man bald feststellen, dass in den shares die Unix/Linux typischen Dateien, wie z.B. "Punktdateien" (.myFile) oder die Ordner "lost+found" auftauchen.
Mit der Option: "hide dot files = yes" lassen sich diese Dateien nur verstecken, Sie werden in Windows allerdings weiterhin angezeigt, wenn die Option "Versteckte Dateien anzeigen aktiviert ist".

Mit der Option:

veto files = /.*/lost+found/

werden Punktdateien und die Ordner "lost+found" überhaupt nicht mehr angezeigt.

Aber Achtung: Wenn man z.B. mit Linux-Webs arbeitet und noch Dateien wie .htaccess auf den shares hat, werden diese natürlich auch nicht mehr angezeigt. Es empfielt sich in diesem Falle die Option nur bei gewissen shares und nicht global einzusetzen.

NET SEND Nachricht aus Linux heraus schreiben

Manchmal möchte man von einem Linux Server aus die Windows Clients per Pop-Up über etwas informieren, also so wie beim Windows NET SEND Befehl.
Dies geht ganz einfach mittels:

echo "Nachrichtentext" | smbclient -M HOST

mit dem zusätzlichen Parameter -U kann man übrigens das FROM Feld frei angeben (defaultmässig steht der Name des Linux Users von dem die Message kommt)

Das ’smbclient‘-Package muss dazu installiert sein.

Hinweis
Der Nachrichtendienst ist bei allen Windows Versionen ab XP standarmässig abgeschaltet
und muss natürlich wieder angeschaltet werden, dass dies läuft.

Treiber-Automatik bei cups funktioniert nicht mehr

Manchmal kann, es vorkommen, dass die Treiber-Automatik beim hinzufügen eines Netzwehrdruckers über SAMBA/CUPS nicht mehr funktioniert; Windows bringt in diesem Fall die Fehlermeldung, dass der Treiber nicht auf dem Server vorhanden ist.

Dies kann z.B. passieren, wenn ein update, das printer-treiber Verzeichnis auf dem server löscht, man kann dies herausfinden, wenn man serverprint$ aufruft; darin sollte dann nebst dem CUPS-Treiber noch ein Verzeichnis: W32X863 existieren.

Den Fehler behebt man am besten mit root unter Linux:

cupsaddsmb -v -a

Manchmal kommt auch die Meldung:
Ein Treiber [TREIBERNAME], Windows 2000, Intel konnte nicht installiert werden. Der Vorgang konnte nicht abgeschlossen werden.

Dann muss überprüft werden ob man auf alle Verzeichnisse in serverprint$ schreibzugriff hat. – Denn es reicht nicht immer nur Schreibzugriff auf: W32X863 zu geben, denn manchmal will Windows auch in W32X86 schreiben, oder sogar direkt unter print$!

Ressourcen

Samba Classical Printing Support