PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perlskript der Userdaten sammelt



merenda
12.05.05, 12:08
Hi @all,

als erstens muss ich sagen, dass ich ziemlich neu in Perl bin.
Ich möchte gerne ein Skript schreiben (hab schon mal ein bisschen angefangen) der mir auf der Passwd und aus der Shadow bestimmte Informationen holt. Um genau zu sein:

Passwd:
- username
- kommentar
- shell

Shadow:
- Verschlüsseltes Passwort

Nach dem diese Daten gesammelt worden sind, soll mir das skript ein Useradd Befehl zusammen setzen. Warum ich jetzt Poste, ich hab alle Daten die ich brauche gesammelt aber bekomme das Useraddbefehel nicht hin, also ich weiß nicht wie ich in Perl die Daten zusammen Setzen soll. Ich hab wie geschrieben schon damit angefangen, ich poste mal den code:
#!/usr/bin/perl -w

# Auslesen der Daten aus der /etc/passwd:
# - username
# - kommentar
# - shell
# ----------------------------------
open (PASSWD, "passwd.txt");
@passwd=<PASSWD>;

foreach (@passwd){
@string_pwd = (split ":", $_); # Strings Zerlegen

push @username_pwd, $string_pwd[0];
push @kommentar, $string_pwd[4];
push @shell, $string_pwd[6];
}
close PASSWD;

# Auslesen der Daten aus der /etc/shadow:
# - username
# - verschlüsseltespasswort
# ---------------------------------------

open (SHADOW, "shadow.txt");
@shadow=<SHADOW>;

foreach (@shadow){
@string_shadow = (split ":", $_); # String Zerlegen
push @username_shadow, $string_shadow[0];
push @passwort, $string_shadow[1];
}
close SHADOW;

# Leerzeichen entfernen
# ---------------------
chomp @username_pwd;
chomp @kommentar;
chomp @shell;
chomp @username_shadow;
chomp @passwort;


# Zusammensetzen der useraddbefehel und in Eintrag in die Datei
# -------------------------------------------------------------
open (USERADD, ">>useradd.sh");



# TEST
print "===> @username_pwd\n";
print "===> @kommentar\n";
print "===> @shell\n";
print "===> @username_shadow\n";
print "===> @passwort\n";


Wie gesagt ich bin neu in dem Thema, vielleicht gibt es auch eine andere einfachere Möglichkeit. Hat jemand eine Idee wie ich das Problem lösen könnte ?
Danke schon mal im voraus.

Gruß

Merenda

Multe
12.05.05, 12:26
Hallo,

das geht mit dem Befehl "system"

> system("/usr/sbin/useradd -p \"$pwd\" $username");

Pass aber auf, dass Du auf gültige Zeichen überprüfst. Nicht dass
irgendwer als Username `/bin/rm -r /` eingibt und letztendlich

/usr/sbin/useradd -p "geheim" `/bin/rm -r /`

ausgeführt wird, sollte der Befehl mit Root-Rechten laufen, wäre das Das Ende Deiner Daten!!

Ohne Garantie, Gruß
Malte

pibi
12.05.05, 15:15
Hat jemand eine Idee wie ich das Problem lösen könnte?Es waere hilfreich, wenn Du kurz schildern moechtest, WAS Du ueberhaupt machen willst. Manchmal sieht man selbst naemlich den Wald vor lauter Baeumen nicht. Was willst Du mit dem Useradd-Befehl erreichen? User von einem System auf ein anderes kopieren? Aber warum dann mit Perl?

Gruss Pit.

pibi
12.05.05, 15:19
/usr/sbin/useradd -p "geheim" `/bin/rm -r /`Das wird so nicht funktionieren. "Useradd" verlangt nicht das Klartext-Passwort, sondern das bereits verschluesselte;-)

Gruss Pit.

merenda
12.05.05, 15:49
@pibi
Genau, ich möchte user von einem System aufs andere Kopieren.
Warum im Perl ? Ich hab einen ähnliches skript als shell-skript, möchte es aber in Perl schreiben um einfach besser in Perl reinzukommen.


Zitat von Multe /usr/sbin/useradd -p "geheim" `/bin/rm -r /`
Würde schon funktionieren, da useradd davon ausgehen würde, dass das Passwort schon verschlüsselt ist ..