Page 116

UNIXOID ///// ISSUE

 ÐÀÇÍÛÕ *NIX ÑÓÙÅÑÒÂÓÞÒ

ÑÂÎÈ ÑÒÀÍÄÀÐÒÍÛÅ ÌÎÄÓËÈ

pam_limits.so. Òèï session. Ïîçâîëÿåò íàêëàäûâàòü îãðàíè÷åíèÿ íà ïîëüçîâàòåëåé, âîøåäøèõ â ñèñòåìó. Òðåáóåò ôàéë /etc/security/limits.conf è ïîääåðæêó ÿäðà äëÿ îãðàíè÷åíèé.

æóðíàëó òû ìîæåøü íàéòè èñõîäíûé êîä ïðîñòåéøåãî PAM-ïðèëîæåíèÿ (ÿ íàçâàë åãî appl_pam.c).

pam_nologin.so. Òèï auth. Ïðîâåðÿåò íàëè÷èå ôàéëà /etc/nologin. Åñëè îí ñóùåñòâóåò, òî â ñèñòåìó ìîæåò âîéòè òîëüêî root, à îñòàëüíûì áóäåò âûäàíî íà ýêðàí ñîäåðæèìîå ýòîãî ôàéëà. pam_permit.so. Ïðîñòåéøèé ìîäóëü, êîòîðûé íà êàæäûé çàïðîñ ïðîñòî âîçâðàùàåò PAM_SUCCESS. Ýòîò ìîäóëü áûâàåò ïîëåçåí â êà÷åñòâå ìåòêè èëè äëÿ ïðåäîòâðàùåíèÿ ïîÿâëåíèÿ ïóñòîé öåïî÷êè. pam_pwdb.so. Òèï ëþáîé. Îáû÷íî ÿâëÿåòñÿ àëüòåðíàòèâîé ìîäóëþ pam_unix.so. Ïðåäîñòàâëÿåò èíòåðôåéñ ê ôàéëàì passwd è shadow. Ïîëåçíûå ïàðàìåòðû: nullok — ìîæíî èñïîëüçîâàòü ïóñòûå ïàðîëè; md5, shadow, bigcrypt — ðàçëè÷íûå ñïîñîáû øèôðîâàíèÿ ïàðîëÿ. pam_rootok.so. Òèï auth. Äîïóñêàåò ïîëüçîâàòåëÿ ê ñåðâèñó, òîëüêî åñëè åãî uid=0. pam_time.so. Òèï account. Ïîçâîëÿåò îãðàíè÷èòü äîñòóï ê ñëóæáå â çàâèñèìîñòè îò âðåìåíè. Íàñòðàèâàåòñÿ ñ ïîìîùüþ êîíôèãóðàöèîííîãî ôàéëà /etc/securitty/time.conf. pam_warn.so. Òèï auth è password. Ïðîñòî çàíîñèò ñîîáùåíèå î ñâîåì âûçîâå â syslog. Ïàðàìåòðîâ íå èìååò. pam_wheel.so. Òèï auth. Ïîçâîëÿåò ïîëó÷àòü ïðàâà ñóïåðïîëüçîâàòåëÿ òîëüêî ïîëüçîâàòåëÿì ãðóïïû wheel. Îäèí èç ïîëåçíûõ ïàðàìåòðîâ: group=XXX — èñïîëüçîâàòü óêàçàííóþ ãðóïïó âìåñòî wheel.

ñïèñîê ñòàíäàðòíûõ PAM-ìîäóëåé â ìîåé ñèñòåìå

Ñóùåñòâóåò åùå îñîáûé ìîäóëü — pam_stack.so, êîòîðûé ìîæåò áûòü ëþáîãî òèïà è âñåãäà èñïîëüçóåòñÿ ñ ïàðàìåòðîì service=XXX, ãäå XXX — íàçâàíèå êîíôèãóðàöèîííîãî ôàéëà äðóãîãî ñåðâèñà. Ýòîò ìîäóëü ïðåäíàçíà÷åí äëÿ âêëþ÷åíèÿ öåïî÷êè ìîäóëåé èç äðóãîãî êîíôèãóðàöèîííîãî ôàéëà. Íàïðèìåð, çàïèñü «/lib/security/pam_stack.so service=systemauth» îçíà÷àåò, ÷òî íóæíî âûïîëíèòü öåïî÷êó ìîäóëåé èç êîíôèãóðàöèîííîãî ôàéëà system-auth.  ðàçíûõ *nix ñóùåñòâóþò ñâîè ñòàíäàðòíûå ìîäóëè, õîòÿ ðàññìîòðåííûå ìîäóëè ïðèñóòñòâóþò ïî÷òè â êàæäîé ñèñòåìå.

èñõîäíûé êîä ïðîñòåéøåãî PAM-ïðèëîæåíèÿ

Êîìïèëÿöèÿ âûïîëíÿåòñÿ ñëåäóþùèì îáðàçîì: % gcc -o appl_pam appl_pam.c -lpam -lpam_misc

Ïðîãðàììà appl_pam ïðîñòî çàïðàøèâàåò ó ïîëüçîâàòåëÿ åãî ïàðîëü, è åñëè ïàðîëü ââåäåí âåðíî, òî âûâîäèò Authentication OK, èíà÷å — Not Authenticated. Âûçûâàòü ôóíêöèè PAM API â ïðîãðàììå ìîæíî òîëüêî ïîñëå âûçîâà ôóíêöèè pam_start(), êîòîðàÿ èíèöèàëèçèðóåò áèáëèîòåêó PAM, à çàêàí÷èâàòüñÿ ðàáîòà äîëæíà ôóíêöèåé pam_end(). Ïåðâûé àðãóìåíò â pam_start() — ýòî èìÿ ñåðâèñà.  appl_pam ÿ çàäåéñòâîâàë ñåðâèñ passwd. Õî÷ó îáðàòèòü âíèìàíèå íà âòîðîé ïàðàìåòð: getenv(«LOGNAME»), êîòîðûé îïðåäåëÿåò èìÿ ïîëüçîâàòåëÿ èç ñòàíäàðòíîé ïåðåìåííîé îêðóæåíèÿ LOGNAME. Åñëè âòîðîé ïàðàìåòð ñäåëàòü íóëåâûì çíà÷åíèåì, òî ôóíêöèÿ áóäåò çàïðàøèâàòü íå òîëüêî ïàðîëü, íî è ëîãèí ïîëüçîâàòåëÿ. Òðåòüèì àðãóìåíòîì ÿâëÿåòñÿ ññûëêà íà îáúåêò äèàëîãà.  ÷åòâåðòóþ ïåðåìåííóþ pam_start() çàïèøåò äåñêðèïòîð ñåàíñà, êîòîðûé áóäåò èñïîëüçîâàòüñÿ âñåìè ïîñëåäóþùèìè ôóíêöèÿìè PAM API â ïðîãðàììå.

ÏÐÈÌÅÐ ÈÑÏÎËÜÇÎÂÀÍÈß ÑÒÀÍÄÀÐÒÍÛÕ ÌÎÄÓËÅÉ Â êà÷åñòâå ïðèìåðà èçìåíèì ïîâåäåíèå êîìàíäû su. Íàïîìíþ, su ïðåäîñòàâëÿåò âîçìîæíîñòü ðåãèñòðèðîâàòüñÿ â ñèñòåìå ïîä äðóãèì èìåíåì, â òîì ÷èñëå root. Ñäåëàåì òàê, ÷òîáû òîëüêî ïîëüçîâàòåëè îäíîé ãðóïïû ( «ivan») ìîãëè ïîëó÷àòü ïðàâà («root») ïðè ïîìîùè su. Äëÿ ýòîãî íóæíî äîáàâèòü ñëåäóþùèå äâå ñòðîêè â íà÷àëî êîíôèãóðàöèîííîãî ôàéëà su â êàòàëîãå /etc/pam.d: auth sufficient /lib/security/pam_rootok.so auth required /lib/security/pam_wheel.so group=ivan ÏÐÎÃÐÀÌÌÈÐÎÂÀÍÈÅ PAM-ÏÐÈËÎÆÅÍÈÉ Îáðàùàòüñÿ ê ìîäóëÿì PAM èìååò ñìûñë òîëüêî â òîì ñëó÷àå, êîãäà â òâîåé ïðîãðàììå íóæíî îñóùåñòâëÿòü àóòåíòèôèêàöèþ. Íà äèñêå ê

114

íà îôèöèàëüíîé ñòðàíèöå Linux-PAM ìîæíî íàéòè äîêóìåíòàöèþ ïî ïðîãðàììèðîâàíèþ è àäìèíèñòðèðîâàíèþ PAM

XÀÊÅÐ 02 /86/ 06

Хакер Февраль 02(76) 2006  

Журнал от компьютерных хулиганов.

Хакер Февраль 02(76) 2006  

Журнал от компьютерных хулиганов.

Advertisement