howieD Skrevet 14. oktober 2009 Del Skrevet 14. oktober 2009 (endret) Heisann, Jeg holder på å lage et script som skal opprette en bruker i et linux system. Slik det kjører nå så vil ikke passordet legge seg inn i /etc/shadow filen. IStedetfor står det et 1-tall der passordet skal stå. Noen som vet hva jeg må gjøre her? Scriptet kjører og oppretter alt unntatt selve passordet #!/usr/bin/perl # Script for adding new users, giving a generic passwd # # ***Declare Variables*** # print "Please enter a username to create\n"; my $username = <STDIN>; chomp ($username); # print "Please enter the users Real Name\n"; my $realname = <STDIN>; chomp ($realname); # **Lager en MD5 hash av passordet: my $tmpPassword = ""; print generatePassword(15) . "\n"; # exit; sub generatePassword { $length = shift; $possible = 'abcdefghijkmnpqrstuvwxyz23456789ABCDEFGHJKLMNPQRSTUVWXYZ'; while (length($tmpPassword) < $length) { $tmpPassword .= substr($possible, (int(rand(length($possible)))), 1); } return $tmpPassword } # open (MYOUTFILE, '>passord.txt'); # close (MYOUTFILE); # ***End Variables*** # Setup hashes # $md5password = print crypt("hahaha", "\$1\$j5nZfGq2"); my %useraddcmd = ( useradd => "/usr/sbin/useradd $username -g users -c \"$realname\" -p $md5password", ); # End hashes # Now on to add the actual username # print "Do you want to create $username Y/n?\n"; $_ = <STDIN>; chomp; $_ = "Y" if (length($_) == 0); # add user if ($_ =~ /[Yy]/) { print "Adding user $username...\n"; system ($useraddcmd {'useradd'}); } else { print "Can't create user\n"; } Endret 14. oktober 2009 av Haavard82 Lenke til kommentar
howieD Skrevet 14. oktober 2009 Forfatter Del Skrevet 14. oktober 2009 (endret) Dette scriptet fungerer: Det forutsetter at følgende er installert: perl -MCPAN -e shell cpan> install Crypt::PasswdMD5 For debian: apt-get update && apt-get install libcrypt-passwdmd5-perl #!/usr/bin/perl # Script for adding new users, giving a generic passwd # and setting them up appropriately in /etc/sudoers # Sudoers for the DBA's # # ***Declare Variables*** # # use strict; use Crypt::PasswdMD5; my $password = ""; my $md5password = ""; my $salt = '$1$qwertyuz'; my $length = ""; my $possible = ""; print "Please enter a username to create\n"; my $username = <STDIN>; chomp ($username); # print "Please enter the users Real Name\n"; my $realname = <STDIN>; chomp ($realname); # ***End Variables*** # Setup hashes # print generatePassword(8) . "\n"; sub generatePassword { $length = shift; $possible = 'abcdefghijkmnpqrstuvwxyz23456789ABCDEFGHJKLMNPQRSTUVWXYZ'; while (length($password) < $length) { $password .= substr($possible, (int(rand(length($possible)))), 1); } # return $password open (MINFIL, '>>passord.txt'); print MINFIL "username is: $username and password is $password \n"; close (MINFIL); } $md5password = crypt $password, $salt; # End hashes # Now on to add the actual username # print "Do you want to create $username Y/n?\n"; $_ = <STDIN>; chomp; $_ = "Y" if (length($_) == 0); # Check to see if user exists. # # add user if ($_ =~ /[Yy]/) { print "Adding user $username...\n"; system("useradd -m -d /home/$username $username"); system("usermod -p '$md5password' $username"); } else { print "error"; } Endret 14. oktober 2009 av Haavard82 Lenke til kommentar
Torbjørn Skrevet 20. oktober 2009 Del Skrevet 20. oktober 2009 er du interesset i generelle tilbakemeldinger på perlkoden din? Lenke til kommentar
howieD Skrevet 20. oktober 2009 Forfatter Del Skrevet 20. oktober 2009 er du interesset i generelle tilbakemeldinger på perlkoden din? Alltid Hadde satt pris på det faktisk. Lenke til kommentar
Torbjørn Skrevet 20. oktober 2009 Del Skrevet 20. oktober 2009 Flott! Jeg tok utgangspunkt i originalscriptet ditt for ordens skyld. 1) Alltid bruk: use strict; use warnings; Hvis du skipper det fordi alt "bare slutter å fungere" da, har du nettopp demonstrert hvor viktig det er å ha med. 2) jeg pleier å forenkle chomp brukerinput med en linje: chomp( my $username = <STDIN> ); 3) mange før deg har tenkt gjennom passord relaterte operasjoner: http://search.cpan.org/search?query=password&mode=module Jeg synes jeg ser flere søkeresultat på første side som virker relevante for deg. 4) ser ut som du ønsker å vise og lagre passordet i en operasjon? print my $tmpPassword = generatePassword(15); Så slipper du å skrive til en global variabel fra funksjonen din. Litt ryddigere slik. Funksjonen må i tillegg defineres før den kan brukes. 5) Mindre viktig: hvis du bruker enkel-fnutter '', slippe du å escape $-tegnene dine: $md5password = print crypt("hahaha", '$1$j5nZfGq2'); 6) system kall utføres med system LIST, ie: system( "useradd", $username, "-g", "users", $realname, "-p", $md5password ); ## den tar seg av usikre verdier i dine variable. Du ønsker kanskje at andre skal kunne sudo gjøre dette? kjipt om de skriver username="; rm -rf /;" 7) sjekk om brukeren ikke taster n: chomp($_=<STDIN>); if( lc $_ ne "n" ){ # ... } 8) mer en formalitet: du trenger ikke string quotes på hash keys, $useraddcmd{useradd} # er nok 9) else output, mer passende med "user aborted" el. hvis brukeren trykker n eller N? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå