So konfigurieren Sie Linux, um neue Benutzer zu zwingen, ihr Kennwort bei der ersten Anmeldung zu ändern

11

Ich versuche, die Kennwortrichtlinie für Benutzer in RHEL 6.6 zu konfigurieren, und möchte, dass das System neu erstellte Benutzer auffordert, das ursprüngliche Kennwort bei der ersten Anmeldung zu ändern.

Beachten Sie, dass ich versucht habe, die EXPIRE-Variable in / etc / default / useradd auf 0 und INACTIVE auf -1 zu setzen, dies jedoch nach der Erstellung zum Ablauf eines neuen Benutzerkontos führt. Die Ausgabe des Befehls chage nach der Benutzererstellung mit diesen Variablen lautet:

 # chage -l foo
 Last password change                                : Feb 22, 2015
 Password expires                                    : May 23, 2015
 Password inactive                                   : never
 Account expires                                     : Feb 22, 2015
 Minimum number of days between password change      : 1
 Maximum number of days between password change      : 90
 Number of days of warning before password expires   : 7

Wenn ich versuche, mich unter foo user anzumelden, wird die Meldung "Ihr Konto ist abgelaufen. Bitte wenden Sie sich an Ihren Systemadministrator" angezeigt.

Wenn ich jedoch das Fenster "Benutzereigenschaften" öffne, die Registerkarte "Kennwortinformationen" auswähle und "Kennwortänderung bei nächster Anmeldung erzwingen" aktiviere, entspricht das Ergebnis meinen Erwartungen. Neuer Benutzer wird aufgefordert, das Passwort zu ändern. In diesem Fall wird der Befehl chage ausgegeben:

 # chage -l foo2
 Last password change                                : password must be changed
 Password expires                                    : password must be changed
 Password inactive                                   : password must be changed
 Account expires                                     : never
 Minimum number of days between password change      : 1
 Maximum number of days between password change      : 90
 Number of days of warning before password expires   : 7

Wenn ich mich unter foo2 user anmelde, fordert mich das System auf, das Passwort zu ändern.

Gibt es also eine Möglichkeit, das System so zu konfigurieren, dass Benutzerkontoparameter bei der Erstellung wie im zweiten Fall festgelegt werden?

Upd

 cat /etc/default/useradd
 # useradd defaults file
 GROUP=100
 HOME=/home
 INACTIVE=-1
 EXPIRE=0
 SHELL=/bin/bash
 SKEL=/etc/skel
 CREATE_MAIL_SPOOL=yes

Selbst wenn ich INACTIVE kommentiere oder auf einen positiven Wert setze, ist das Konto abgelaufen, aber kein Passwort.

Außerdem habe ich PAM auf dem Computer konfiguriert.

Upd 2

Ich habe dies auf einer Maschine mit RHEL 6.2 und ohne PAM-Konfiguration überprüft. Effekt ist der gleiche.

Mike_Lychkov
quelle
Sie sollten versuchen, zu verwenden chage -d 0 {user-name}.
Hastur
Gibt es eine Möglichkeit, dies automatisch während des Befehls useradd zu tun, nicht mit zusätzlichen Befehlen oder Aktionen?
Mike_Lychkov
1
EXPIRE=0in /etc/default/useraddsollte den Job machen. Ich habe gelesen, du hast es versucht. Können Sie die unkommentierten Zeilen von hinzufügen /etc/default/useradd? Es ist gesperrt, auch wenn Sie nicht INACTIVE = -1, sondern einen anderen Wert angeben oder wenn Sie diese Zeile kommentieren? Können Sie angeben, ob Konten gesperrt sind, auch wenn sie über die Befehlszeile erstellt wurden? Und bitte, wenn Sie eine andere Frage haben, posten Sie sie auf einer separaten Seite, wenn sie eine andere Antwort hat.
Hastur
1
Mit adduserkönnen Sie den chageBefehl eingeben /usr/local/sbin/adduser.local. Sie können das Altersfeld in / etc / shadow auch direkt auf 0 setzen. useraddist das "Low Level Utility", das in Verbindung mit anderen Befehlen verwendet werden soll.
mpez0

Antworten:

1

Da Sie nach RHEL6 fragen, habe ich mir den Quellcode für useradd angesehen (der als Teil des 'shadow'-Pakets geliefert wird). In useradd.c befindet sich eine Funktion namens new_spent, mit der ein neuer Schattenkennworteintrag eingerichtet wird. Dort wird das Problem "Abgelaufenes Passwort bei Erstellung" folgendermaßen behoben:

if (0 == spent->sp_lstchg) {
/* Better disable aging than requiring a password change */
spent->sp_lstchg = -1;

Soooo ... Wenn Sie eine Null setzen, wird sie zu -1.

Die Autoren des Programms haben speziell gegen das Setzen der Alterung auf 0 codiert, sodass es keine Rolle spielt, ob Sie sie im Parameter / etc / default / useradd für EXPIRE auf 0 setzen. (Wenn ich diesen Code gemacht hätte, hätte ich nachgesehen, ob der Benutzer das Passwort im Befehl festgelegt und dann das Ablaufen zugelassen hat, aber ich war es nicht ...)

Außerdem wurde oben vorgeschlagen, ein Skript in /usr/local/sbin/adduser.local zu platzieren, um einen Befehl 'chage' auszuführen. Dies war ein guter Rat für ein Debian / Ubuntu-System, bei dem useradd ein Perl-Skript ist, das diese Datei zwar ausführt, wenn es sie findet, aber auf RHEL ist der Befehl useradd eine C-Binärdatei.

Wenn ich Sie wäre und entschlossen wäre, dieses Verhalten auf dem RHEL6-Benutzeradd zu erhalten, würde ich das SRPM für das Schattenpaket erhalten, die obigen Zeilen auskommentieren und einen RPM-Build für das Paket und Rockaway durchführen. Gewinnen!

P. Heffner
quelle
1

Warum nicht einem Skript hinzufügen?

passwd -e username

Wenn Sie nur nach dem ersten Login suchen, funktioniert dies. Das -eKontokennwort läuft sofort ab, sodass der Benutzer beim nächsten Anmelden gezwungen ist, sein Kennwort zu aktualisieren. (siehe man passwd)

tniles
quelle
Und wenn Sie nach einer chage-spezifischen Lösung suchen, versuchen Sie es vielleicht mit dem Schalter "-M / - maxdays" mit dem Wert '0'. Ich bin nicht wirklich mit Chage vertraut, aber von der Manpage aus sieht das vernünftig aus.
tniles
-1

Automatisch:

Aktualisieren Sie diese Datei:

/etc/default/useradd

Diese Datei enthält die Details, welche Einstellungen auf die neuen Benutzer angewendet werden, die mit dem Befehl useradd im System erstellt wurden.

Setzen Sie in dieser Datei einfach den Wert EXPIRE = 0, und jedes Mal, wenn ein neuer Benutzer erstellt wird, muss dieser das Kennwort bei der nächsten Anmeldung ändern.

Quelle: GeekRide

Das Bearbeiten dieser Datei im Terminal war schwierig. Also habe ich die Berechtigungen der Datei auf 777 geändert, indem ich:

chmod 777 /etc/default/useradd

und bearbeitete es in grub.

(Dank Linux Command .)

In meiner Ubuntu 12.04.5 VM eingecheckt.

Handbuch:

Verwenden Sie die folgende Syntax, um einen Benutzer zu zwingen, sein Kennwort bei der nächsten Anmeldung unter Linux zu ändern:

# chage -d 0 {user-name}

In diesem Beispiel zwingen Sie Tom, sein Passwort bei der nächsten Anmeldung zu ändern. Geben Sie Folgendes ein:

# chage -d 0 tom

-d 0: Legen Sie die Anzahl der Tage seit dem 1. Januar 1970 fest, an denen das Kennwort zuletzt geändert wurde. Das Datum kann auch im Format JJJJ-MM-TT angegeben werden. Wenn Sie den Wert auf Null setzen, wird der Benutzer beim ersten Anmelden gezwungen, das Kennwort zu ändern.

Quelle: nixCraft

Pure Copy-Paste. Buchstäblich. ;)
Auf meiner Ubuntu 12.04.5 VM überprüft.

Varad Mahashabde
quelle
Das OP möchte dies automatisch während des Befehls useradd tun, wenn Sie die obigen Kommentare lesen.
Wahnsinn
Ich werde nichts anderes kommentieren, aber es chmod -R 777 /ist eine sehr dumme Sache!
PulseJet
@PulseJet Ja, ich weiß, dass im Nachhinein und diese Antwort vor langer Zeit war, also bitte lass es einfach sein
Varad Mahashabde
@VaradMahashabde dann würde ich vorschlagen, solche Sachen aus Ihren Antworten zu entfernen, da sie zumindest für die nächste Person, die sie liest , vernünftig sein sollten.
PulseJet