Ziel: Überprüfen Sie, /etc/shadow
ob das Benutzerkennwort gesperrt ist, dh ob das erste Zeichen im zweiten Feld in / etc / shadow, das das Hash-Passwort des Benutzers enthält, ein Ausrufezeichen ('!') Ist.
Gewünschte Ausgabe: Eine Variable mit dem Namen $disabled
'True' oder 'False'.
Benutzername ist in der $uname
Variablen und ich mache so etwas:
disabled=`cat /etc/shadow |grep $uname |awk -F\: '{print$2}'`
# I now have the password and need one more pipe into the check for the character
# which is where I'm stuck. I would like to do like (in PHP syntax):
| VARIABLE=="!"?"True":"False"`
Dies ist ein Fragment eines Skripts, das von Cron mit Root-Berechtigungen ausgeführt wird, sodass auf alle gewünschten Informationen zugegriffen werden kann.
linux
bash
regular-expression
users
DavDav
quelle
quelle
!
auf den Schattenkennwortmechanismus in Linux-Betriebssystemen.cat
;grep
kann eine Datei als Befehlszeilenargument verwenden.grep
auch;awk
ist perfekt in der Lage, eine Zeichenfolge in einer Datei zu finden.!
. Sie haben also technisch Recht, aber das scheint eher ein Tippfehler in der Frage zu sein als ein Fehler in der zugrunde liegenden Absicht.Antworten:
Warum nicht einfach alles mit awk machen?
quelle
/<username>/
stimmt mit ganzen Datensätzen überein, die dem<username>
erweiterten regulären Ausdruck entsprechen. Soj.doe
würde beispielsweise mit einem Datensatz übereinstimmen, der sichb.judoer
im Benutzerfeld oderj7doe
im Passwort-Hash-Feld befindet.Analysieren Sie die
shadow
Datei nicht manuellDas Parsen solcher Dateien ist fragil, wenn Sie nicht alle Eventualitäten berücksichtigen (z. B. werden deaktivierte Kennwörter häufig als einzelne verschlüsselt
*
; behandeln andere Lösungen dies?).Darüber hinaus erfolgt die Authentifizierung möglicherweise nicht über
shadow
(sondern über NIS oder ldap oder wer weiß was). Es gibt Standardtools, die all dies für Sie erledigen. In diesem Fallpasswd
:So
passwd -S | cut -d ' ' -f 2
erhalten Sie, was Sie brauchen. Ein einfaches Wenn / Dann übersetzt es in Ihre gewünschte Variable:Gleiches gilt für das Sperren des Passworts eines Benutzers. Dies erfolgt vorzugsweise über
usermod
(--lock
Option) und nichtshadow
manuell.quelle
shadow
Datei lesen zu können (die Berechtigungsanforderung ist der Hauptgrund, warum die Datei schließlich vorhanden ist).passwd -S
für andere Benutzer ausgeführt zu werden. Nicht für Ihren eigenen Benutzer.L
für mein eigenes Konto (Kerberos mit LDAP), ich nehme an, weil es den Passwort-Hash nicht erreichen kann. Die Chancen stehen gutpasswd -S
, dass sie für viele Authentifizierungsschemata jenseits von / etc / shadow ohnehin nicht nützlich sind.getent passwd $ACCOUNT
Ruft den Eintrag von der Quelle ab, die für die Authentifizierung verwendet wird.$1 "" == ENVIRON["U"]
vergleicht das erste Feld mitENVIRON["U"]
lexikalisch. Ohne das""
könnten die Felder numerisch verglichen werden, wenn sie wie Zahlen aussehen (wasinf
dazu führt, dass sie mitINF
oderInfinity
zum Beispiel übereinstimmen ).Ohne
LC_ALL=C
, da einigeawk
Implementierungenstrcoll()
für den==
lexikalischen Vergleich verwendet werden, könnte dies dazu führen, dass falsche Einträge auf Benutzernamen überprüft werden, die gleich sortiert sind.quelle
Ein Benutzer ist gesperrt, wenn das Feld passwd die Zeichenfolge
*LK*
ist. Sie können dies jedoch nicht überprüfen, da/etc/shadow
es aus Sicherheitsgründen nur von root gelesen werden kann.Wenn Berechtigungen kein Problem darstellen, versuchen Sie Folgendes:
Bearbeiten: IFS =: verschoben, um den Code zu vereinfachen
quelle
NIS
.*LK*
ist nur für SysV-Systeme,passwd -l
(zum Sperren) auf Linux-Basis verwendet!
.passwd -l
macht das Konto nicht unbrauchbar, sondern deaktiviert nur die Kennwortauthentifizierung.IFS=: read -r user pw rest
die Verwendung wird vermieden, dass gespeichert und wiederhergestellt werden muss$IFS
. Siehe auch-r
, um die Backslash-Verarbeitung zu vermeiden (Backslash wird in / etc / shadow nicht erwartet)