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