passwd-wrapper

Címkék

Azt hiszem nem csak én vagyok az egyetlen, akinek jól jött volna, ha tudok nem interaktív módon jelszót változtani. Mivel ez a dolog hiányzik (tudtommal) a linux disztribúciókból sokáig nem is tudtam ezt megcsinálni. Nem csak én lehettem az egyetlen, mert Friczy barátom nekiállt, és írt egy password-wrapper programot, amelynek segítségével ezt a dolgot könnyen megtehetjük.

Mi ez a program?

A passwd-wrapper program lehetővé teszi, hogy a Linux jelszót nem interaktív módon változtassuk meg. A célom az volt, hogy a felhasználók web felületen is tudjanak jelszót változtatni.Hogyan működik?

A passwd-wrapper létrehoz egy pszeudo terminál-párat - ptm_open() és pts_open(), ezután forkol. A child process úgy állítja át a terminált, hogy ne várjon az enterre, és beállítja, hogy a processhez az előbb megnyitott terminál tartozzon, mint vezérlő terminál. Ezt követően átadja a vezérlést az eredeti passwd programnak, amely így a felhasználó helyett a passwd-wrapper szülő processzével kommunikál. Ezután már könnyű dolga van a programnak, a passwd programon keresztül elvégzi a jelszóváltást.

A lehetséges továbbfejlesztések:

A programot elvileg tetszés szerint át lehet alakítani bármilyen más interaktív program vezérlésére, ehhez mindössze a várt stringek és az adandó válaszokat kell megfelelően átalakítani. Nehezebb feladat az egyéb unixokra való átírás, sajnos a pszeudo-terminál kezelés rendszerenként eltérő. Nem mindegyik unixon van /dev/ptmx eszköz, ezeken más módon

kell a pszeudo terminál megnyitását megvalósítani.

A terminál beállítások is eltérnek, nem Linux

rendszereken célszerű a #define PTEM 1 direktívát is

kiadni, valamint a controlling terminál beállítása is másképp történhet.

A program forrását itt találod, a letöltéshez kattints ide.

Hozzászólások

Ha lesz egy kis idöm, küldök egy módosított verziót is. Amikor a programot átültettem Digital Unixra (eredetileg is arra kellett volna, a Linux csak teszt-platform volt), kiderült, hogy szinte semmi sem úgy müködik, mint eredetileg. Szerencsére rátaláltam a forkpty() függvényre, ami egy-két sorral megoldja azt, aminek a kidolgozása nekem a leghosszabb ideig tartott. Ha jól látom, a forkpty() az újabb Linux libc-ben szintén benne van. Szóval itt az ideje átírni ismét, majd ha lesz egy kis idöm, megcsinálom azt is.

Ehhez csak ket hozzafuzesem lenne.

1. nem tudom, hogy DEC alatt is van-e chpasswd (mert ugye oda keszult a program, csak linux alatt irodott, ha figyelmesen elolvastad volna a dolgot), Te tudod, hogy van-e?
2. Ezt a programot Friczy asszem tobb mint egy evvel ezelott irta, akkor is volt mar chpasswd program? (azert kerult ki most a program, mert valakinek szuksege volt ra, es gondoltam mast is erdekel)
3. pl. Solaris alatt nincs chpasswd, akkor most mi van? kicsit linux kozpontu a gondolkodasmodotok, ez meg egy Unix portal =), de sebaj ettol meg a program szerintem jo

Upsz, nem is ketto, hanem 3 hozzafuzes lett. Ja egy negyediknek nezzetek azt az oldalat, hogy ez egy C kod, amibol tanulni is lehet

Udv: trey

Megnéztem a chpasswd-t, valóban jó. Örültem volna neki, ha a program írásakor ismerem ezt a programot, elég sok munkától megkímélt volna, ha másért nem, azért, mert a forrás tanulmányozásával lehet, hogy többre jutok. Ha lesz egy kis szabadidöm, bele fogok nézni a forrásába, már csak azért is, hogy megtudjam: lehetett volna-e portolni ezt a programot DEC alá - ahol a jelszótárolás eltér mind a hagyományos unix jelszótárolástól, mind pedig a jelenleg elterjedt pam-tól.

Mindenesetre amikor a programot megírtam, elég sokat keresgéltem google-n és levelezölistákon, hogy van-e már valami hasonló program készen, és a chpasswd-re nem találtam rá, mellesleg akkor senki nem is ajánlotta. Mondhatni így jártam :))

Haszontalannak akkor sem tartom a befektetett munkát, elég sokat sikerült megtudnom a unix pty kezeléséröl.

Csak egy apró megjegyzés...
A chpasswd az arra való, hogy batch-elve egyszerre sok felhasználónak beállítsa a jelszavát a root. Pl. script-b?l létrehoz egyszerre 100 user-t egy szöveges fájl alapján, majd utána ezekenek mindnek be is állít vmi random jelszót...
De pl. apop jelszó állítására, és egyéb interaktív cuccok kezelésére már nem jó. Friczy programja viszont erre való, hogy bármilyen programmal ezt el tudd játszani.
Ami miatt viszont Friczy tényleg feleslegesen dolgozott az az expect. Ha jól emléxem alapvet?en perl-re épül, vagy perl-ben íródott, és szinte bármilyen interaktív programot elvezérel.
apt-get install expect
utána lásd examples... Imho, elég korrekt cucc...