FAQ:Arktur33/passwoerter

Aus Delixs
Version vom 21. Dezember 2005, 20:51 Uhr von Kirmse (Diskussion | Beiträge) (Übernahme 2-4.htm)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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