FAQ:Arktur33/passwoerter

Aus Arktur
Wechseln zu: Navigation, Suche

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

Meine Werkzeuge
Namensräume

Varianten
Aktionen
Navigation
Dokumentation
Entwicklung
Werkzeuge