Mehrere Anmeldenamen für einen einzelnen Benutzer unter Linux mithilfe der LDAP-Serverauthentifizierung

Mehrere Anmeldenamen für einen einzelnen Benutzer unter Linux mithilfe der LDAP-Serverauthentifizierung

In meinem Labor gibt es etwa 30 Systeme (Standalone-PCs) und fast 200 Studenten, die sie verwenden werden. Jedes System hat ein Konto namens USER mit dem Passwort 123456, das diesen 200 Personen bekannt ist. Daher greifen sie auf das System zu, das für eine gewisse Zeit frei ist und funktioniert. Ihre Nutzung wird durch einfache Registereinträge protokolliert. Ich möchte jedem Benutzer separate Logins und Passwörter geben, was sich leicht über einen LDAP-Server bewerkstelligen lässt. Aber ich möchte nicht auf jedem PC 200 Benutzerkonten erstellen. Ich möchte alle Logins der 200 Personen dem USER-Konto selbst zuordnen. Sie werden dasselbe Profil und dasselbe Home-Verzeichnis haben. Ich möchte lediglich Uhrzeit und Datum der Labornutzung einzelner Personen in einer Datei protokollieren. Kann dies über LDAP oder eine andere Software erfolgen?

Antwort1

Ich stimme mit SLESKE überein, aber um auf seine/ihre Kommentare einzugehen, müssen Sie zunächst ein paar Dinge tun!

Unter Linux müssen die Bibliotheken, die die Anmeldung steuern, umgeleitet werden, um ein LDAP-Backend zu verwenden, anstatt Dinge in /etc/passwd nachzuschlagen.

Wenn Sie OpenLDAP verwenden, sollten Sie zwei Dinge beachten:

NSCD (Name Server Caching Daemon), der die LDAP-Abfragen zwischenspeichert. Sie führen dies auf jedem Host aus, bei dem sich Benutzer anmelden.

NSSLDAP (Name Server Switch für LDAP) ist der Klebstoff, der dafür sorgt, dass Anmeldungen NSCD abfragen, das wiederum das LDAP-Backend abfragt, oder NSSLDAP fragt das LDAP-Backend direkt ab, wenn NSCD veraltet oder nicht verfügbar ist.

Sie müssen also auf jeder Arbeitsstation OpenLDAP, NSCD und NSSLDAP installieren, wenn diese nicht Teil Ihrer Distribution sind. OpenLDAP ist erforderlich, um die Client-Bibliotheken zu erhalten, die das LDAP-Protokoll beherrschen.

Dann müssen Sie einige Dateien bearbeiten:

/etc/nscd.conf Diese Datei steuert, was zwischengespeichert wird. Hier ist ein Dump von einem meiner Systeme, das als Samba-Server fungiert:

    enable-cache            passwd          yes
    positive-time-to-live   passwd          10
    negative-time-to-live   passwd          3
    suggested-size          passwd          211
    check-files             passwd          yes
    persistent              passwd          yes
    shared                  passwd          yes
    max-db-size             passwd          33554432
    auto-propagate          passwd          yes

    enable-cache            group           yes
    positive-time-to-live   group           3600
    negative-time-to-live   group           3
    suggested-size          group           211
    check-files             group           yes
    persistent              group           yes
    shared                  group           yes
    max-db-size             group           33554432
    auto-propagate          group           yes

    enable-cache            hosts           yes
    positive-time-to-live   hosts           3600
    negative-time-to-live   hosts           3
    suggested-size          hosts           211
    check-files             hosts           yes
    persistent              hosts           yes
    shared                  hosts           yes
    max-db-size             hosts           33554432

Sie müssen dann Ihre Datei nsswitch.ldap ändern (lesen Sie die Dokumentation dazu, es sind zu viele, um hier darauf einzugehen).

EINE SEHR WICHTIGE SACHE!!!!

Wenn Ihr LDAP-Server ausgefallen ist, müssen Sie sicherstellen, dass Sie sich mit dem lokalen Root-Konto weiterhin anmelden können. Oder wenn auf einer Ihrer Arbeitsstationen Netzwerkprobleme auftreten, müssen Sie sicherstellen, dass Sie sich weiterhin anmelden können.

Wenn meine Linux-Boxen hochfahren, habe ich ein Skript, das immer eine nsswitch.conf-Datei an die folgende Stelle kopiert:

passwd: compat-Gruppe: compat

Hosts: Dateien DNS-Netzwerke: Dateien

Dienste: Dateien Protokolle: Dateien RPC: Dateien Ethers: Dateien Netzmasken: Dateien Netzgruppe: Dateien Bootparameter: Dateien

automount: Dateien Aliase: Dateien

und wenn ich bereit bin, LDAP für Anmeldungen zu verwenden, ersetze ich die Datei nsswitch.conf durch Folgendes:

passwd: Dateien LDAP Gruppe: Dateien LDAP Schatten: Dateien LDAP

Hosts: Dateien DNS-Netzwerke: Dateien

Dienste: Dateien Protokolle: Dateien RPC: Dateien Ethers: Dateien Netzmasken: Dateien Netzgruppe: Dateien Bootparameter: Dateien

automount: Dateien Aliase: Dateien

Ersteres ermöglicht mir die lokale Anmeldung und Letzteres ermöglicht beides, aber aufgrund der Zwischenspeicherung durch NSCD dauert es eine Weile, bis NSCD veraltet ist, was zu Verzögerungen oder Problemen bei der Anmeldung führt.

Es gibt noch viel mehr hierzu zu sagen, aber dies ist hoffentlich ein guter Anfang.

Übrigens: Ich bin der Entwickler von Pozix Linux und dem Pozix Linux Small Business Server und wir haben über 400 Samba-Systeme, die größtenteils auf diese Weise laufen!

Einverstanden, die Kommentare von TRS80 sind gültig, aber hier ist ein Skript, mit dem wir LDIF-Dateien aus /etc/passwd-Dateien erstellen. Die resultierende LDIF-Datei kann zum Auffüllen Ihrer LDAP-Datenbank verwendet werden. Wenn Sie dieses Skript auf mehreren Arbeitsstationen ausführen, müssen Sie sicherstellen, dass Sie doppelte Kontonamen aussortieren, damit Sie eindeutige Kontonamen mit eindeutigen UIDs erhalten.

cat /etc/passwd | while read i; do
  uid=`echo $i | cut -d : -f 1`
  uidNumber=`echo $i | cut -d : -f 3`
  gidNumber=`echo $i | cut -d : -f 4`
  gecos=`echo $i | cut -d : -f 5`
  homeDirectory=`echo $i | cut -d : -f 6`
  loginShell=`echo $i | cut -d : -f 6`
  userPassword=`cat /etc/shadow | grep $uid | cut -d : -f 2`

  echo "dn: cn=$gecos,ou=people,dc=mycompany,dc=com"
  echo "objectClass: account"
  echo "objectClass: posixAccount"
  echo "cn: $gecos"
  echo "uid: $uid"
  echo "uidNumber: $uidNumber"
  echo "gidNumber: $gidNumber"
  echo "homeDirectory: $homeDirectory"
  echo "loginShell: $loginShell"
  echo "userPassword: $userPassword"

done

Antwort2

Wenn Sie die Attribute uidNumber und homeDirectory für alle Konten gleich festlegen, sollte wahrscheinlich alles wie gewünscht funktionieren.

Antwort3

Man muss nicht auf jedem PC 200 Benutzerkonten anlegen. Linux kann alle Benutzerinformationen aus LDAP holen, die Konten existieren also nicht lokal (also in /etc/passwd). Das Home-Verzeichnis liegt dann meist auf einem Netzlaufwerk (NFS o.ä.).

Dies ist die Standardvorgehensweise. Gibt es einen Grund, warum Sie dies nicht tun?

verwandte Informationen