FAQ:Arktur33/passwoerter
Einrichten von Klassen mit vorgegebenen Passwörtern
übernommen von www.arktur.th.schule.de/faq/2-4.htm
Diese Anleitung stammt aus einer Mail von Hans-Dietrich Kirmse
#!/usr/bin/perl
##################################################################
#
# Aufruf mit "passtool DATEI"
# DATEI hat folgende Form:
# username1:passwort1
# username2:passwort2
#
# u.s.w.
#
##################################################################
use Fcntl ':flock'; # Konstanten fuer file-locking
sub print_help {
print "Benutzung: passtool [OPTION]\n".
" oder: passtool [DATEI]\n".
"Aendert die Passwoerter der in der DATEI angegebenen Benutzer\n\n".
" -h, --help diese Hilfe\n\n".
"Format der DATEI:\n".
"benutzername1:passwort1\n".
"benutzername2:passwort2\n\n".
"Fehlermeldungen an Ronny Buchmann \n";
exit 0;
} # print_help
foreach $_ (@ARGV) {
if (/^(-h|--help)$/i) {
&print_help;
}
elsif (/^-/){
print "passtool: unbekannte Option\n\n".
"Versuchen Sie \"passtool --help\" fuer weitere Informationen\n";
exit 1;
}
elsif (! (-f $_)) {
print "passtool: Datei $_ existiert nicht\n\n".
"Versuchen Sie \"passtool --help\" fuer weitere Informationen\n";
exit 1;
}
}
open(FILE,$ARGV[0]) || die "passtool: kann nicht oeffnen: $ARGV[0]\n";
open(SHDW, "/etc/shadow") || die "passtool: kann /etc/shadow nicht oeffnen\n";
@content = ; # Inhalt zeilenweise in array
close(SHDW);
while() {
($user,$pass) = split(/:/);
$pass =~ s/\r\n//; # Zeilenumbruch loeschen
$user{$user} = crypt($pass, 'AA'); # passwort verschluesseln und in hash
}
close(FILE);
system("cp -p /etc/shadow /etc/shadow-"); # sicherungskopie
open(SHDW, ">/etc/shadow");
flock(SHDW,LOCK_EX); # shadow sperren
foreach (@content) { # shadow zeilenweise abarbeiten
@shdw = split(/:/); # zeile auftrennen in array
if ( !defined( $user{$shdw[0]} ) ) { # user in hash nicht vorhanden ?
print SHDW $_; # wenn ja, unveraendert schreiben
}
else {
$shdw[1] = $user{ $shdw[0] }; # passwort mit dem aus hash ersetzen
print SHDW join(':', @shdw); # array wieder zusammensetzen zu string
# und in shadow schreiben
print "passtool: Passwort fuer <$shdw[0]> geaendert\n";
}
}
flock(SHDW,LOCK_UN); # sperre aufheben
close(SHDW);
Eintrag stammt vom 16. April 2001