Portál AbcLinuxu, 19. dubna 2024 08:39


Dotaz: Hromadna zmena hesel

13.8.2008 18:58 ahlstrom | skóre: 2
Hromadna zmena hesel
Přečteno: 772×
Odpovědět | Admin
Ahoj, potreboval bych v C vytvorit program, ktery vytvori hromadne nove uzivatele a nastavi jim defaultni heslo. Vytvoreni uzivatele probiha pomoci prikazu system() a predani argumentu (prikazu) ktery se ma spustit. U vytvoreni uzivatele spoustim externi prikaz useradd. Nasledne mu chci zmenit heslo pomoci prikazu passwd, jenze on ceka na vstup z prikazove radky.
snprintf( change_passwd, sizeof( change_passwd ), "passwd %s", login );
system( change_passwd ); // zde ceka

Nevite jak mu mam to heslo predat? Tento program pobezi na solarisu ne na linuxu, tudiz prikaz useradd v solarisu neumoznuje pri vytvoreni uzivatele pridat jako parametr heslo. Prilozeny program (viz nize) neni kompletni, protoze jednotlivi uzivatele pro vytvoreni a jejich parametry se budou nacitat z externiho souboru. Tohle je demonstracni priklad. O radu abych si vytvoril skript v perlu nebo bashi nestojim.
#include < stdio.h>

#define USERADD "/usr/sbin/useradd"
#define BASH    "/bin/bash"

int main( void )
{
        char create_user[ 200 ];
        char change_passwd[ 200 ];

        const char *uid = "691";
        const char *gid = "100";
        const char *home_dir = "/home/jenik";
        const char *first_name = "Adam";
        const char *last_name = "Jenik";
        const char *login = "jenik";
        const char *password = "heslo";

        snprintf( create_user, sizeof( create_user ), "%s -u %s -g %s -d %s -m -s %s -c \"PRAHA / %s %s\" %s", USERADD, uid, gid, home_dir, BASH, first_name, last_name, login );
        snprintf( change_passwd, sizeof( change_passwd ), "passwd %s", login );

        printf( "%s\n%s\n", create_user, change_passwd );

        system( create_user );
        system( change_passwd );
        return 0;
}


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

14.8.2008 09:48 melkors | skóre: 13 | blog: kdo_chce_kam
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jen idea: Na Solarisu funguje|fungovala utilitka vipw.
14.8.2008 09:56 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
Odpovědět | | Sbalit | Link | Blokovat | Admin
Iba myslienka: ked to uz robit z C kodu, preco pouzivat CLI utility? Neslo by to nakodovat "priamo", t.j. v najhorsom moznom pripade prepocitat heslo na prislusny hash a vlastne vygenerovat cely riadok pre passwd, master.passwd ci master.shadow? Patrne na to budu rovno kniznicne funkcie; treba sa pozriet do zrojakov programu, ktory to realne robi a urobit to iste. (Alebo vlastne prave na to sa pytas, ako to urobit?)
14.8.2008 14:29 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
crypt(), getspent(), putspent()
15.8.2008 10:16 ahlstrom | skóre: 2
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
Uvazoval jsem nad tim take, ale jednodussi bude pouzit prikazy z CLI. Duvodem proc to nechci mit naprogramovane pomoci skriptu v bashi, je ten, ze bash na tom solarisu nainstalovany neni. Jedine obycejny shell /bin/sh.
15.8.2008 10:26 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
sh = Bourne shell
bash = Bourne Again shell

t.j. ak použijete len základné veci, skript pobeží aj pod vašim sh, aj pod bash

15.8.2008 11:14 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
Nenapadá mne žádný důvod, proč by vám na tohle sh neměl stačit.
25.8.2008 14:20 ahlstrom | skóre: 2
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
Dobre, asi mas pravdu, ze by to bylo lepsi napsat v shellu. Problem je v tom, ze v shellu neumim, proto chci vyuzit jazyka C.
14.8.2008 10:52 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
Odpovědět | | Sbalit | Link | Blokovat | Admin
o radu "bash" nestojíš? to si radšej ten trojriadkový skript v bash-i chybovo naprogramuješ v C? Keď už používaš system, kde máš vo výslednom reťazci uvodzovky?

skús niečo na tento spôsob ...

if (! fork ()) {
  execlp ("adduser", "-u", username, "-p", password, "-u", uid, NULL);
}
14.8.2008 13:03 cronin | skóre: 49
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
o radu "bash" nestojíš? to si radšej ten trojriadkový skript v bash-i chybovo naprogramuješ v C?
Ono asi ten "trojriadkovy skript" ma byt sucastou niecoho ovela vacsieho, co bude napisane v C.
Tento program pobezi na solarisu ne na linuxu, tudiz prikaz useradd v solarisu neumoznuje pri vytvoreni uzivatele pridat jako parametr heslo.
15.8.2008 10:09 ahlstrom | skóre: 2
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
retezec se naparsuje pomoci snprintf
#define USERADD "/usr/sbin/useradd"
#define BASH    "/bin/bash"
snprintf( create_user, sizeof( create_user ), "%s -u %s -g %s -d %s -m -s %s -c \"PRAHA / %s %s\" %s", USERADD, uid, gid, home_dir, BASH, first_name, last_name, login );
system( create_user );
15.8.2008 10:13 ahlstrom | skóre: 2
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
problem je v tom ze na solarisu nemuzes v prikazu "adduser" zadat jako paramatr heslo ( -p pass )
14.8.2008 14:31 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
Odpovědět | | Sbalit | Link | Blokovat | Admin
Není na tom Solarisu příkaz chpasswd?
15.8.2008 09:49 ahlstrom | skóre: 2
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
na tom solarisu je prikaz passwd, ale kdyz se tento prikaz provede tak ceka na na uzivatele az zada heslo z klavesnice a ja potrebuji aby se to heslo nacetlo ze souboru
15.8.2008 10:00 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
Ptal jsem se na chpasswd, ne passwd.
15.8.2008 10:06 ahlstrom | skóre: 2
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
neni
15.8.2008 11:16 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
Tak bych si zkusil stáhnout zdrojáky toho linuxového a přeložit na Solarisu. Nebo spíš použít výše uvedené funkce.
AraxoN avatar 16.8.2008 22:19 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
Odpovědět | | Sbalit | Link | Blokovat | Admin
A čo takto heslo dvakrát zapísať niekam do súboru a v passwd presmerovať vstup?
passwd user </subor/s/heslom.txt
16.8.2008 22:33 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Hromadna zmena hesel

Zhlediska programu pgmje jedno, jestli napíšete

  pgm < file

nebo

  cat file | pgm

Program v tom neuvidí žádný rozdíl. Zaznamenáte ho jen vy, protože ve druhém případě se vyrojí zástup lidí s rádoby vtipnými poznámkymi o soutěži ve zbytečném používání příkazu cat.

AraxoN avatar 16.8.2008 22:39 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
A? Nejak mi nedochádza, prečo reaguješ práve na mňa... Jediný kto tu cat spomína, si ty. ;-)
16.8.2008 23:09 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
Protože nefunguje-li poslání hesla přes rouru, nebude fungovat ani přesměrování vstupu.
13.9.2008 23:49 luky
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
Kdyz to napisete jen tak, tak se ten zastup nevyroji. Kdyz napisete, ze pro dane ucely to staci, tak zmlknou. Kdyz budete popichovat s tim, ze je to absolutni blbost, tak je jasne, ze se nekdo ozve. Vime? ;-)
13.9.2008 23:59 luky
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
Odpovědět | | Sbalit | Link | Blokovat | Admin

Kdyz uz to pisete takhle blbe, tak opravdu neni duvod nepouzit shell skript. Na editaci zaznamu o uzivatelich funkcemi k tomu urcenymi, jak vas nasmeroval "14.8. 14:29 Michal Kubeček", taky neni nic tezkeho.

Ale pokud tedy trvate na spousteni prikazu s presmerovanym I/O, tak si probehnete man pro fork/wait/exec, dup/pipe/select. A myslim, ze passwd vyzaduje, aby byl vstup z tty (pty), takze jeste man pts.

14.9.2008 00:00 luky
Rozbalit Rozbalit vše Re: Hromadna zmena hesel
Hm, a ja pisu k mesic stare diskuzi, takze nic :-)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.