FAQ:Arktur33/passwoerter
Zur Navigation springen
Zur Suche springen
Archiv: Dieser Artikel beschreibt nicht die Funktionalität des derzeit aktuellen delixs-Servers. Er beschreibt ältere Schulserver-Funktionen und dient dem Zweck der Archivierung. |
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