passwd scriptbol

Sziasztok!

Irogatok egy perl scriptet, de bashba is johet a megoldas, maximum kulso parancskent futtatom. A lenyeg, a script egy bizonyos ponton egy bizonyos usernek megvaltoztatn a a jelszavat (nyilvan ez is megvan, hogy mire). Erre nem talaltam megoldast, a passwdnek nem lehet parancssorbol, parameterben megadni hogy mi legyen az uj jelszo.

Koszonom a segitsegeteket! Udv!

Hozzászólások

" --stdin
This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.
"
RTFM...
--
Coding for fun. ;)

thx, akkor ugynezki pixelhiba volt... ;D

Koszi a helpet!

guest user letrehozas, cron regellente atirja a passwdt amit egy faljbol lopkod kifele attol fugg milyen nap van, es tollem meg el lehet kunyizni az adott napi jelszot es ha jofej vagyok meg is adom. :)
Hat arrol lenne szo.

Amugy meg nem megy amit irtal... a passwd man-jaban nincs ilyen ,es valaszt is kapok ra mert jo fej...

passwd: unrecognised option `--stdin'
Usage: passwd [options] [LOGIN]

Options:
  -a, --all                     report password status on all accounts
  -d, --delete                  delete the password for the named account
  -e, --expire                  force expire the password for the named account
  -h, --help                    display this help message and exit
  -k, --keep-tokens             change password only if expired
  -i, --inactive INACTIVE       set password inactive after expiration
                                to INACTIVE
  -l, --lock                    lock the named account
  -n, --mindays MIN_DAYS        set minimum number of days before password
                                change to MIN_DAYS
  -q, --quiet                   quiet mode
  -r, --repository REPOSITORY   change password in REPOSITORY repository
  -S, --status                  report password status on the named account
  -u, --unlock                  unlock the named account
  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS
  -x, --maxdays MAX_DAYS        set maximim number of days before password
                                change to MAX_DAYS

Debian 4.0n megy most, Ubuntu 7.04en fog futni, ott is ezt valaszolja csak magyarul.
Mas tipp esetleg? :)

Koszi, Udv!

MD5-ös jelszavak esetén:
echo "user:jelszo" | chpasswd --md5

A chpasswd pl. a Debian Sarge/Etch passwd csomagjával érkezik.

--
JSI

tegyuk fel shadow, crypt, vagy md5
nehany shell parancs:


USER=valaki
DATE=$(($(date +%s)/86400))
PASS="$(dd if=/dev/urandom bs=256 count=1 2>/dev/null |\
  uuencode -m - | tail -n2 | tr -dc '0-9a-zA-Z' | head -c 8)"
SALT="$(dd if=/dev/urandom bs=256 count=1 2>/dev/null |\
  uuencode -m - | tail -n2 | tr -dc '0-9a-zA-Z' | head -c 2)"
CRYPT="$(openssl passwd -crypt -salt $SALT $PASS)"
MD5="$(openssl passwd -1 $PASS)"

shadow file:


awk -F: -v u=$USER -v p=$MD5 -v d=$DATE \
  '{if($1==u){printf "%s:%s:%d:",$1,p,d;for(i=4;i<NF;i++){printf  "%s:",$i};print""}else{print}}' \
  </etc/shadow

És ugyanezt userként hogy lehetne egyszerűen? Persze újra lehet forgatni a passwd progit kiegészítve, de valami más út érdekelne - ha van ilyen.

hmm. ez tetszik!

ami át van húzva, azt teljesen fölösleges elolvasni. az olyan, mintha ott sem lenne

mindenkinek koszi a tippeket... :)
Meglatjuk mi lesz, de azert gaz, hogy nem lehet jelszot megadni a passwdnek...


test@rkanote:/tmp$ mkfifo fif
test@rkanote:/tmp$ passwd </tmp/fif & ( echo regijelszo ; sleep 2 ; echo ujjelszo ; sleep 2 ; echo ujjelszo ) > /tmp/fif
[1] 7956
Changing password for test
(current) UNIX password: Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
[1]+  Done                    passwd </tmp/fif

Ezt a megoldást szeretném használni SCO Openserver 6.0 -án, de valahogy nem akar működni :(

mkfifo fif

eddig oké

passwd < /tmp/fif & ( echo 1 ; echo regijelszo ; sleep 2 ; echo ujjelszo ; sleep 2 ; echo ujjelszo ) > /tmp/fif

Az 1 -es azért kell, mert a passwd felajánl két választást:


Enter choice (default is 1):
1) pick a password 2) pronounceable password will be generated for you.

Szóval az 1 -es opciót kellene választani.

Sajnos a fenti parancs futtatása után megáll az ,,Enter choice'' résznél és rövid idő után ezt dobja:

[1]+ Stopped passwd < /tmp/fif

A jelszó nem változik meg. Találkozott már valaki hasonlóval?

Nyilván, ez egy eléggé alap igény. De

- SCO-ban van makekey
- ráadásul ha jól tudom van pl. vipw

Ezzel a kettővel pedig gyönyörűen összerakható shell mechanizmusokkal:


PASSWORD=`..../makekey ...`
env EDITOR=/bin/ed vipw << E-O-F
/user/s/:[^:]*:/:$PASSWORD:/
w
q
E-O-F

oszt csókolom.

(Ja, nyilván azért nem megy, mert nem STDIN-ről olvas a passwd.)

Sajnos nincs makekey, sem vipw.
(make, makeconv, make_encmap, make_method és makerandom : ezek vannak, amik make -el kezdődnek)

Nekem egyébként az is jó lenne, ha valami ,,well-known'' jelszóra (pl. jelszo) be tudnám állítani fixen annak, aki kéri, majd ,,passwd -f'' -el kikényszeríteni a váltást. Mindezt scriptelve.

A ,,passwd -d'' azért nem jó, mert ha a /etc/default/login fájlban a REQPASS értéke YES, akkor nem engedi a policy miatt törölni a jelszót a rendszer, hiába próbálom akár a ,,passwd -d -f'' megadásával is. Ha meg a REQPASS értéke NO, akkor meg jelszó nélkül maradhat vígan a felhasználó. :-/

a) van azon makekey. Csak éppen nem a PATH-on. Szóval man makekey, és ha jól emlékszem /usr/lib/makekey (vagy valami hasonló). Utolsó esélyként find, vagy a korábban rka által emlegetett OpenSSL-hez tartozó módon tudsz kódolt PW-t előállítani, a folytatás pedig megy ahogy leírtam. Amúgy az ismert jelszót beállítani simán lehet:
passwd X
majd előszeded a /etc/passwd -ből (SCO-n ha jól emlékszem tcb van azaz /tcb/files/auth/r/root - ez nyilván a root user fájlja, X esetén X/X) a kódolt jelszót, és fenti PASSWD változóba beteszed.

Igazad van, van makekey. :)

De akkor most a gyengébbek kedvéért, hogy én is megértsem: makekey -jel generálok valamit, pl. ,,makekey jelszo'' (szintaktika biztos más, majd ráguglizok, a man szűkszavú), majd ezt beírom mondjuk a /tcb/files/auth/r/root fájlba valahová ide: ,,:u_pwd=blabla:\''. Ugye?

Ha igen, akkor már csak egy kérdésem van: a makekey -el generált ,,jelszo'' kimenete miért nem egyezik meg azzal, ami akkor kerül a fenti fájlba, ha passwd paranccsal írom be? :)

Bocs, ha félreértettem valamit!

Igen, ez a megoldás - ezzel állíthatod át a root user jelszavát. Más felhasználóé pedig userneve_elso_betuje/userneve nevu fajlban van ott a /tcb alatt. És azért nem egyezik meg a két leszó sztring, mert a jelszókódolás azzal kezdődik, hogy (ha jól emlékszem) 4096 elemből a rendszer választ egyet véletlenszerűen (ezt hívják "salt"-nak), és ezt is pluszban felhasználja akkor, amikor az általad begépelt sztingből csinálja a "kódolt" jelszót. (Könnyen ellenőrizhető úgy, hogy két usernek ugyanarra állítod át a jelszavát a passwd paranccsal, a kódolt sztring mégis különbözni fog.)

echo -n 'XYpassword' | makekey

XY a fent említett salt (tehát két véletlenszerű karakter teljesen jó), a password a beállítani kívánt jelszó, aminek pontosan 8 karakter hosszúnak kell lennie, ha rövidebb, akkor fel kell tölteni 0 byte-okkal (ezt meg a parancssorból elérhető printf segítségével lehet megcsinálni az echo helyett).

Már csak egy kérdésem lenne: hogyan közöljem az oprendszerrel, hogy milyen salt -ot használtam a kulcs generáláshoz? Mert ha generálok egy ilyet, hogy echo -n 'XYpassword' | makekey és a kapott értéket beírom a /etc/shadow illetve a /tbc/blabla alatt található megfelelő fájl megfelelő részébe, akkor bejelentkezéskor a ,,password'' -ot használva jelszóként nem fogadja el. Ebből gondolom, hogy valahol még meg kellene mondani a rendszernek, hogy milyen salt -tal lett generálva a kulcs.

Ha nem fogadja el, akkor valahol valamit elrontottal. Ugyanis a salt maga benne van a generalt "kodolt" jelszoban, konkretan az elso ket karaktere pontosan az.

Ja, meg valami. Mindenekelott nezd meg, hogy a hasznalt rendszerben levo echo parancs ismeri-e a "-n" opciot, mert van ahol ezt maskent kell irni (es tippelem, h pl. Solaris, SCO az pont ilyen "mashol" rendszer).