Re: uživatelé - hromadné vytvoření
Jezek Michal
kiwi.fon.tis na atlas.cz
Úterý Listopad 13 16:37:47 CET 2007
Díky vám všem za nápady a rady.
Protože jsem byl zoufalý, tak jsem to přepsal do PERLu. Hodně jsem se natrápil, než jsem pochopil co je "sůl" (nebo spíš přesněji semeno :-)) a pak, že Slackware nepoužívá standardní DES, ale MD5 hashování (no prostě peklo neznalce...) Pak jsem trochu zápasil s vyčítáním řádků ze souboru, kdy bylo heslo na posledním sloupci a "návrat vozíku" se mi započítával do řetězce (další dvě hodiny hledání). Proto heslo nesmí být poslední sloupec nebo se musí nějak z toho ten entr oříznout (nevím jak). Ještě snad dodělat logování akcí do souboru, automatické odeslání hesla do mailu a automatické vytváření skupin a bude to dokonalé :o) Funkční výsledek je tady:
#!/usr/bin/perl -w
use Crypt::PasswdMD5;
# Cesta k importovanému souboru
$souborimport = '/home/programy/uzivatele.txt';
# struktura souboru uzivatele.txt
# login , Jmeno Prijmeni , pozn1 , pozn2 , heslo
# $pole[0] , $pole[1] , $pole[2] , $pole[3] , $pole[4]
open(IMPORT,"$souborimport");
while ($prvky = <IMPORT>)
{
@pole = split ';', $prvky ;
print $pole[0] . "\n" . $pole[4] . "\n" ;
$homedir = "/home/".$pole[0];
$salt ||= chr(int(rand(26))+65) . chr(int(rand(26))+65);
if ( ! -d $homedir) # test, jestli existuje domovsky adresar
{
$zaheslovane = unix_md5_crypt ( $pole[4] , $salt );
# $zaheslovane = unix_md5_crypt ( "pokus" );
print $pole[1] . "\n";
mkdir "/home/".$pole[0];
system 'useradd -p \''.$zaheslovane.'\' -d /home/'.$pole[0].' -c "'.$pole[1].','.$pole[2].','.$pole[3].'," -g divize-rs -G ftpuser -s /bin/bash '.$pole[0] ;
@udaje = getpwnam $pole[0];
chown $udaje[2], $udaje[3], "/home/".$pole[0] ;
print "Kontroluji zasifrovani hesla\n";
if ( unix_md5_crypt ( $pole[4], $zaheslovane ) ne $zaheslovane )
{
# chyba
print "nesouhlasi heslo\n";
}
else
{
print "Heslo je v poradku\n";
};
}
else
{
print "Adresar jiz existuje\n" ;
};
}
close(IMPORT);
print "konec\n" ;
------------------------------------------
http://mail.atlas.cz/wapmail/
Další informace o konferenci Linux