FAQ:Arktur33/passwoerter
Aus Arktur
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
Beim Neueinrichten von Klassen, bei denen die Passwörter nicht gleich geändert werden können, wurde mir von Ronny Buchmann ein Script bereitgestellt, welches die zu ändernden Accounts und Passwörter aus einer Datei einliest.
Diese Datei muß unter Windows/DOS erstellt sein (z.B. dem Editor) . wird bei uns so gehandhabt:
Klasse 7a alle das Passwort "erika", Klasse 7b alle das Passwort "anna".
Damit kann eine Klasse das Passwort ändern, ohne das für andere Klassen das Passwort bekannt wird.
#!/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