Przes³anianie hase³ (Shadow Password) Autor: Michael H. Jackson, mhjack@tscnet.com v1.3, 3 Kwietnia 1996 WWeerrssjjaa ppoollsskkaa:: BBaarrttoosszz MMaarruusszzeewwsskkii BB..MMaarruusszzeewwsskkii@@zzssmmeeiiee..ttoorruunn..ppll v1.02, 26 Lipca 1997 Dokument ten opisuje jak zdobyæ, zainstalowaæ i skonfigurowaæ pakiet _S_h_a_d_o_w _P_a_s_s_w_o_r_d dla Linux-a. Omówione zosta³o tutaj tak¿e zdobywanie i (ponowna) instalacja oprogramowania oraz demonów sieciowych, które potrzebuj± dostêpu do hase³ u¿ytkownika. Oprogramowanie to nie jest w³a¶ciw± czê¶ci± pakietu _S_h_a_d_o_w _S_u_i_t_e, ale bêd± one musia³y zostaæ przekompilowane, aby móc korzystaæ z hase³. Jest tutaj tak¿e zawarty przyk³ad dla programistów, jak dodawaæ obs³ugê przes³anianych hase³ w swoich programach. Pod koniec dokumentu zawarte zosta³y odpowiedzi na czêsto zadawane pytania. Dokument ten zosta³ napisany w standardzie ISO-8859-2. Orygina³ mo¿na znale¼æ pod adresem ftp.icm.edu.pl w kata logu /pub/Linux/sunsite/docs/HOWTO. ______________________________________________________________________ Table of Contents: 1. Wprowadzenie. 1.1. Zmiany w stosunku do poprzedniej wersji. 1.2. Nowe wersje tego dokumentu. 1.3. Komentarze. 2. Po co przes³aniaæ plik passwd ? 2.1. Czemu mo¿esz nie chcieæ przes³aniaæ swojego pliku z has³ami ? 2.2. Format pliku /etc/passwd. 2.3. Format pliku przes³aniaj±cego. 2.4. Przegl±d funkcji crypt(3). 3. Zdobywanie pakietu Shadow Suite. 3.1. Historia pakietu Shadow Suite dla Linux-a. 3.2. Gdzie znale¼æ pakiet Shadow Suite. 3.3. Co jest zawarte w pakiecie Shadow Suite. 4. Kompilacja programów. 4.1. Rozpakowywanie archiwów. 4.2. Konfiguracja w pliku config.h 4.3. Kopie zapasowe twoich oryginalnych programów. 4.4. Polecenie make 5. Instalacja 5.1. Zaopatrz siê w dyskietkê startow± w razie gdyby¶ co¶ popsu³. 5.2. Usuwanie zduplikowanych stron podrêcznika systemowego. 5.3. Polecenie make install 5.4. Polecenie pwconv 5.5. Zmiany nazw plików npasswd i nshadow 6. Inne programy, które mo¿e musisz uaktualniæ albo "za³ataæ". 6.1. Program adduser z dystrybucji Slackware. 6.2. Serwer wu_ftpd. 6.3. Standardowy ftpd. 6.4. pop3d (Post Office Protocol 3) 6.5. xlock 6.6. xdm 6.7. sudo 6.8. imapd (E-Mail 6.9. pppd (Serwer Protoko³u Point-to-Point) 7. Wprowadzanie pakietu Shadow Suite do u¿ycia. 7.1. Dodawanie, Modyfikacja i usuwanie u¿ytkowników. 7.1.1. useradd. 7.1.2. usermod. 7.1.3. userdel. 7.2. Polecenie passwd i "termin wa¿no¶ci" has³a. 7.3. Plik login.defs 7.4. Has³a dla grup. 7.5. Programy do sprawdzania poprawno¶ci. 7.5.1. pwck 7.5.2. grpck 7.6. Has³a przez telefon. (Dial-up) 8. Obs³uga przes³anianych hase³ w programach w C. 8.1. Pliki nag³ówkowe. 8.2. Biblioteka libshadow.a 8.3. Struktura Shadow. 8.4. Funkcje pakietu Shadow Suite. 8.5. Przyk³ad. 9. Czêsto zadawane pytania. 10. Prawa autorskie podziêkowania i ró¿ne. 10.1. Prawa autorskie 10.2. Podziêkowania i ró¿ne. 10.3. Od t³umacza. ______________________________________________________________________ 11.. WWpprroowwaaddzzeenniiee.. Jest to dokument z serii HOWTO (czyli Jak To Zrobiæ). Opisuje on jak i dlaczego instalowaæ obs³ugê "shadow password" na swoim Linux-ie. Zawarte jest tak¿e kilka przyk³adów na u¿ywanie pewnych w³a¶ciwo¶ci pakietu _S_h_a_d_o_w _S_u_i_t_e. Podczas instalacji pakietu oraz u¿ywania jego narzêdzi musisz byæ zalogowany jako _"_r_o_o_t_". Podczas instalacji bêdziesz dokonywa³ pewnych zmian do oprogramowania systemowego i zalecane jest, aby¶ zrobi³ kopiê tego oprogramowania. Zalecam te¿, aby¶ przeczyta³ i zrozumia³ wszystkie instrukcje zawarte tutaj zanim zaczniesz. 11..11.. ZZmmiiaannyy ww ssttoossuunnkkuu ddoo ppoopprrzzeeddnniieejj wweerrssjjii.. Dodane sekcje: Doda³em sekcjê na temat dlaczego móg³by¶ niechcieæ instalowaæ pakietu Shadow Suite. Doda³em sekcjê jak uaktualniæ xdm-a. Doda³em sekcjê jak zmusiæ do dzia³ania specjalne w³a¶ciwo¶ci pakietu Shadow Suite. Doda³em sekcjê zawieraj±c± czêsto zadawane pytania. Poprawki/Uaktualnienia: Poprawi³em odwo³ania html do sunsite-a. Poprawi³em sekcjê na temat wu-ftpd, aby odzwierciedla³a dodawanie -lshadow do pliku Makefile. Poprawi³em kilka literówek. Zmieni³em sekcjê na temat wu-ftpd, aby obs³ugiwa³ ELF. Uaktualni³em ca³y dokument, aby odzwierciedla³ problemy bezpieczeñstwa w ró¿nych programach. Doda³em rekomendacjê pakietu Linux Shadow Suite napisanego przez Marka Micha³kiewicza 11..22.. NNoowwee wweerrssjjee tteeggoo ddookkuummeennttuu.. Najnowsz± wersjê orygina³u tego dokumentu mo¿na ¶ci±gn±æ z ftp.icm.edu.pl z katalogu /pub/Linux/sunsite/docs/HOWTO. Inne formaty znajduj± siê w katalogu other-formats. Albo poprzez sieæ WWW z sunsite.icm.edu.pl <http://sunsite.icm.edu.pl:/pub/Linux/Documentation>. Mo¿na te¿ bezpo¶rednio od autora <mailto:mhjack@tscnet.com>. Autor bêdzie te¿ wysy³a³ nowe wersje na grupê dyskusyjn± comp.os.linux.answers Dokument ten jest tak¿e rozprowadzany wraz z dystrybucj± pakietu Shadow-YYDDMM. Na temat nowych wersji t³umaczenia zobacz sekcjê ``Od t³umacza''. 11..33.. KKoommeennttaarrzzee.. Proszê wszelkie komentarze, uaktualnienia czy sugestie wysy³aæ do mnie <mailto:mhjack@tscnet.com>. Im szybciej otrzymam pocztê tym szybciej mogê poprawiæ ten dokument. Je¶li masz jakie¶ uwagi na jego temat, to wy¶lij je bezpo¶rednio do mnie, poniewa¿ bardzo rzadko odwiedzam grupy dyskusyjne. 22.. PPoo ccoo pprrzzeess³³aanniiaaææ pplliikk ppaasssswwdd ?? W chwili obecnej wiêkszo¶æ dystrybucji Linux-a nie instaluje domy¶lnie pakietu Shadow Suite. Dotyczy to Slackware 2.3, Slackware 3.0 i innych popularnych dystrybucji. Jednym z powodów tego jest to, ¿e je¶li zap³acono jak±¶ kwotê za Shadow Suite to prawa co do redystrybucji nie by³y do koñca jasne. Linux u¿ywa licencji GNU, która pozwala na umieszczanie go w dowolnych pakietach (jak np. dystrybucje CD-ROM) i pobieranie za nie op³aty. Obecny opiekun pakietu Shadow Suite, Marek Micha³kiewicz <mailto:marekm@ists.pwr.wroc.pl> otrzyma³ ¼ród³a orygina³u na licencji w stylu BSD, która pozwala na dystrybucjê. Teraz, kiedy ju¿ sprawy praw kopiowania s± rozwi±zane, spodziewane jest, ¿e przysz³e dystrybucje bêd± zawieraæ domy¶lnie przes³anianie hase³. Jednak do tego czasu, bêdziesz musia³ je samemu instalowaæ. Je¶li instalowa³e¶ swoj± dystrybucjê z CD-ROM-u, to pomimo, ¿e dystrybucja nie zainstalowa³a Shadow Suite niektóre pliki, których potrzebujesz mog± siê znajdowaæ na CD-ROM-ie. _W_e_r_s_j_e _p_a_k_i_e_t_u _3_._3_._1_, _3_._3_._1_-_2 _i _s_h_a_d_o_w_-_m_k _m_a_j_± _p_r_o_b_l_e_m_y _d_o_t_y_c_z_±_c_e _b_e_z_p_i_e_c_z_e_ñ_s_t_w_a _z_e _s_w_o_i_m _p_r_o_g_r_a_m_e_m _l_o_g_i_n _i _k_i_l_k_o_m_a _i_n_n_y_m_i _p_r_o_g_r_a_m_a_m_i _t_y_p_u _s_u_i_d _r_o_o_t _i _n_i_e _p_o_w_i_n_n_y _b_y_æ _j_u_¿ _u_¿_y_w_a_n_e_. Wszystkie potrzebne pliki s± dostêpne poprzez anonimowane ftp oraz WWW. W Linux-ie bez zainstalowanego pakietu Shadow Suite informacje o u¿ytkowniku wraz z has³em trzymane s± w pliku /etc/passwd. Has³o znajduje siê tam w formie zakodowanej (encrypted). Jednak je¶li spytasz jakiego¶ eksperta od kryptografii, to powie ci on/ona, ¿e has³o jest w postaci "encoded", a nie "encrypted" poniewa¿ u¿ywaj±c funkcji crypt(3), tekstowi jest przypisywany ³añcuch pusty a has³o jest kluczem. Dlatego, od tego momentu bêdê u¿ywa³ okre¶lenia "encoded". Algorytm u¿ywany do kodowania has³a jest technicznie okre¶lany jako algorytm dzia³aj±cy w jedn± stronê. Jest to algorytm, który jest ³atwy do zastosowania w jedn± stronê, ale bardzo trudny do z³amania. Wiêcej na ten temat znajdziesz w sekcji ``2.4'' albo na stronie podrêcznika systemowego dotycz±cej funkcji crypt(3). Kiedy u¿ytkownik wybiera has³o, albo jest mu ono przydzielone, jest ono kodowane losowo generowan± warto¶ci± zwan± salt (sól). Oznacza to, ¿e ka¿de has³o mo¿e zostaæ zakodowane na 4096 sposobów. Warto¶æ salt jest potem zapisywana razem z zakodowanym has³em. Kiedy u¿ytkownik siê wlogowuje i podaje has³o, najpierw pobierana jest warto¶æ salt z zakodowanego has³a. Nastêpnie pobrane has³o zostaje zakodowane pobran± warto¶ci±, i porównane z zapisanym zakodowanym has³em. Je¶li ³añcuchy te s± identyczne, to u¿ytkownik zostaje "wpuszczony" do systemu. Jest bardzo trudno (ale nie jest to niemo¿liwe) wzi±æ losowo zakodowane has³o i otrzymaæ has³o rozkodowane. Chocia¿, w ka¿dym systemie z wiêksz± liczb± u¿ytkowników, przynajmniej kilka hase³ bêdzie zwyk³ymi s³owami albo jak±¶ wariacj± zwyk³ych s³ów. W³amywacze wiêdz± o tym wszystkim i po prostu koduj± s³ownik ze s³owami i popularnymi has³ami wszytkimi mo¿liwymi warto¶ciami salt. Potem porównaj± wyniki z zawarto¶ci± twojego pliku /etc/passwd. Jak znajd± jaki¶ identyczny ³añcuch, to maj± has³o na nastêpne konto. Nazywane jest to atakiem s³ownikowym i jest to jeden z najpopularniejszych sposobów na pozyskiwanie dostêpu do systemu przez osoby nieuprawnione. Je¶li siê nad tym zastanowisz, to zobaczysz, ¿e 8-znakowe has³o mo¿e zostaæ zakodowane na 4096 * 13 sposobów. Tak wiêc s³ownik sk³adaj±cy siê powiedzmy z 400.000 popularnych s³ów, nazw, imion, hase³ i ich prostych wariacji zmie¶ci³by siê z ³atwo¶ci± na dysku o pojemno¶ci 4GB. W³amywacz musi go tylko posortowaæ i sprawdziæ czy który¶ z ³añcuchów nie jest has³em. Dysk o pojemno¶ci 4GB mo¿na kupiæ za ok. 1000 dolarów, tak wiêc mie¶ci siê to w mo¿liwo¶ciach wiêkszo¶ci w³amywaczy systemowych. Je¶li w³amywacz zdobêdzie twój plik /etc/passwd, to musi on zakodowaæ swój s³ownik kluczem, który znajduje siê w tym pliku. Metoda ta mo¿e byæ wykorzystana przez przeciêtnego nastolatka z kilkoma megabajtami na dysku i komputerem klasy 486. Nawet bez du¿ej ilo¶ci wolnego miejsca na dysku, narzêdzia takie jak crack(1) mog± zwykle z³amaæ przynajmniej kilka hase³ z systemu z dostatecznie du¿± ilo¶ci± u¿ytkowników (zak³adaj±c, ¿e u¿ytkownicy maj± mo¿liwo¶æ samemu wybieraæ sobie has³a). Plik /etc/passwd zawiera tak¿e takie informacje jak ID u¿ytkownika i ID grupy, które s± u¿ywane przez wiêkszo¶æ programów. Dlatego plik /etc/passwd mmuussii pozostaæ odczytywalny dla ka¿dego. Je¶li chcia³e¶ w³a¶nie zmieniæ prawa dostêpu do pliku /etc/passwd tak, ¿eby nikt nie móg³ go czytaæ (oprócz "root-a"), to pierwszym symptomem jaki by¶ zauwa¿y³, to to, ¿e przy wydaniu polecenia ls -l pojawi³yby siê numery zamiast nazw u¿ytkowników. Pakiet Shadow Suite rozwi±zuje ten problem poprzez umieszczenie hase³ w innym pliku (z regu³y jest to /etc/shadow). Plik /etc/shadow ma tak ustawione prawa dostêpu, ¿e nie mo¿e go czytaæ nikt, oprócz "root-a". Niektóre programy jak np. xlock, nie musz± mieæ mo¿liwo¶ci zmiany hase³, ale tylko ich odczytu. Programy te mog± albo byæ uruchamiane z prawem "suid root", albo mo¿esz dodaæ grupê shadow, która mia³aby tylko prawo odczytu pliku /etc/shadow. Program ten mo¿e wtedy nale¿eæ do grupy "shadow" i byæ uruchamiany z prawem "sgid". Przenosz±c zakodowane has³a do innego pliku, efektywnie zabraniamy w³amywaczom dostêpu do nich, co uniemo¿liwia ataki s³ownikowe. Dodatkowo pakiet Shadow Suite posiada wiele innych zalet: · Plik konfiguracyjny, w którym mo¿na ustawic warto¶ci domy¶lne podczas logowania (/etc/login.defs) · Narzêdzia do dodawania, modyfikacji i usuwania kont i grup. · Ustalanie "daty wa¿no¶ci" konta i jego wygasanie (expiration). · Przes³anianie hase³ dla grup. (opcjonalnie) · Has³a o podwójnej d³ugo¶ci (16 znaków) [NIE ZALECANE] · Lepsza kontrola nad wybieraniem hase³ przez u¿ytkowników. · Has³a przez telefon. · Programy do dodatkowej autentykacji [NIE ZALECANE] Instalacja pakietu Shadow Suite przyczynia siê do zwiêkszenia bezpieczeñstwa sieci opartej na Linux-ie, ale pozostaje jeszcze wiele innych rzeczy do zrobienia, aby zwiêkszyæ bezpieczeñstwo takiej sieci. Z czasem pojawi siê seria HOWTO po¶wiêcona bezpieczeñstwu. Na stronie po¶wiêconej bezpieczeñstwu w Linux-ie <http://bach.cis.temple.edu/linux/linux-security/> zawarte s± ró¿ne informacje na ten temat jak równie¿ ostrze¿enia o znanych dziurach w systemie. 22..11.. CCzzeemmuu mmoo¿¿eesszz nniiee cchhcciieeææ pprrzzeess³³aanniiaaææ sswwoojjeeggoo pplliikkuu zz hhaass³³aammii ?? Jest kilka okoliczno¶ci i konfiguracji, w których instalacja pakietu Shadow Suite nniiee bbyy³³aabbyy dobrym pomys³em: · Maszyna nie zawiera kont u¿ytkowników. · Twoja maszyna jest w sieci LAN i u¿ywa NIS (Network Information Services), aby obs³ugiwaæ nazwy u¿ytkowników i has³a na innych maszynach w tej samej sieci. (W³a¶ciwie mog³oby to byæ zrobione, ale wykracza poza ramy tego dokumentu i nie zwiêkszy³oby bezpieczeñstwa w znacznym stopniu.) · Twoja maszyna jest u¿ywana przez serwery terminali, aby weryfikowaæ u¿ytkowników poprzez NFS (Network File System), NIS albo jak±¶ inn± metodê. · Na twojej maszynie znajduje siê inne oprogramowanie, które autentykuje u¿ytkowników, a nie ma wersji tego oprogramowania dla shadow i nie masz ¼róde³. 22..22.. FFoorrmmaatt pplliikkuu //eettcc//ppaasssswwdd.. Nieprzes³oniêty plik /etc/passwd ma nastêpuj±cy format: identyfikator:has³o:UID:GID:imie_nazw:katalog:pow³oka Gdzie: iiddeennttyyffiikkaattoorr Nazwa (login) u¿ytkownika hhaass³³oo Zakodowane has³o UUIIDD Numer u¿ytkownika GGIIDD Numer domy¶lnej grupy dla u¿ytkownika iimmiiee__nnaazzww Imiê i nazwisko u¿ytkownika - W³a¶ciwie pole to nazywa siê GECOS (General Electric Comprehensive Operating System) i mog± tam byæ zapisane inne dane ni¿ tylko imiê i nazwisko Polecenia Shadow i strony podrêcznika systemowego nazywaj± to pole polem komentarza. kkaattaalloogg Katalog domowy u¿ytkownika (pe³na ¶cie¿ka) ppooww³³ookkaa Pow³oka dla danego u¿ytkownika (pe³na ¶cie¿ka) Na przyk³ad: login:Nkjg97jh7yff8:503:100:Imiê Nazwisko:/home/login:/bin/bash Gdzie Nk jest wartoci± salt a jg97jh7yff8 jest zakodowanym has³em. Zakodowane has³o z kluczem mog³oby równie dobrze wygl±daæ tak: ghHFgj75fR8iP a te dwa ³añcuchy to dok³anie te same has³a. Jest 4096 mo¿liwo¶ci zakodowania pojedynczego has³a. {Przyk³adowym has³em jest tutaj Jak ju¿ pakiet Shadow Suite jest zainstalowany, to plik /etc/passwd zawiera: login:x:503:100:Imiê Nazwisko:/home/login:/bin/bash Znaczek "x" w tym przypadku jest po prostu czym¶ co wype³nia miejsce has³a. Format pliku /etc/passwd siê nie zmieni³, zmieni³o siê tylko miejsce przechowywania zakodowanego has³a. Oznacza to, ¿e ka¿dy program, który tylko czyta plik /etc/passwd,a nie zapisuje w nim has³a, bêdzie nadal dzia³a³ poprawnie. Has³a znajduj± siê obecnie w pliku /etc/shadow. (jest to domy¶lna nazwa) 22..33.. FFoorrmmaatt pplliikkuu pprrzzeess³³aanniiaajj±±cceeggoo.. Plik /etc/shadow zawiera nastêpuj±ce informacje: login:has³o:ostatnio_1970:mo¿e:musi:ostrz:dni:dni_1970:zarez Gdzie: llooggiinn patrz /etc/passwd hhaass³³oo Zakodowane has³o oossttaattnniioo__11997700 Ilo¶æ dni od 1 Stycznia 1970, kiedy has³o by³o ostatnio modyfikowane mmoo¿¿ee Ilo¶æ dni w przeci±gu, których has³o mo¿e byæ zmienione mmuussii Ilo¶æ dni, po której has³o musi zostaæ zmienione oossttrrzz Ilo¶æ dni przed wyga¶niêciem has³a od jakiej nale¿y zacz±æ informowaæ u¿ytkownika o wyga¶niêciu has³a. ddnnii Ilo¶æ dni, po której has³o wygasa i konto jest blokowane ddnnii__11997700 Ilo¶æ dni od 1 Stycznia 1970, po której konto jest blokowane zzaarreezz Pole zarezerwowane Poprzedni przyk³ad móg³ wiêc wygl±daæ tak: login:Nkjg97jh7yff8:9479:0:10000:::: 22..44.. PPrrzzeeggll±±dd ffuunnkkccjjii ccrryypptt((33)).. Ze strony podrêcznika systemowego "man": "crypt jest funkcj± koduj±c± has³o. Oparta jest na algorytmie DES (Data Encryption Standard) z dozwolonymi wariacjami (miêdzy innymi), aby zniechêciæ do sprzêtowych rozwi±zañ poszukiwania klucza. Kluczem jest podane przez u¿ytkownika has³o. [Zakodowany ³añcuch jest warto¶ciami NULL] Salt jest ³añcuchem 2-znakowym wybranym ze zbioru [a-zA-Z0-9]. £añuch ten jest u¿yty po to, aby zaburzyæ algorytm w jeden z 4096 sposobów. Bior±c 7 najmniej znacz±cych bitów ka¿dego znaku z klucza otrzymujemy 56-bitowy klucz. Ten 56-bitowy klucz jest u¿ywany, do powtórnego kodowania sta³ego ³añcucha (zwykle s± to znaki NULL). Zwrócona warto¶æ wskazuje na zakodowane has³o - seriê 13 drukowalnych znaków ASCII (dwa pierwsze znaki reprezentuj± warto¶æ salt). Warto¶æ zwracana wskazuje na sta³e dane, których zawarto¶æ jest zmieniana przy ka¿dym wywo³aniu. UUwwaaggaa:: Liczba mo¿liwych warto¶ci klucza to 2^56 = 7,2E16 (oko³o 72 biliardów). Wyczerpuj±ce poszukiwania tego klucza ss±± mmoo¿¿lliiwwee przy wykorzystaniu wielu równolegle wspó³pracuj±cych komputerów. Oprogramowanie, takie jak crack(1), jest dostêpne i szuka ono takich kluczy, które z regu³y u¿ywane s± przez ludzi. Dlatego w³a¶nie przy wybieraniu has³a powinno siê unikaæ przynajmniej zwyk³ych s³ów. Zaleca siê, u¿ywanie programu passwd(1), które podczas zmiany has³a sprawdza czy nowe has³o nie jest przesadnie proste. Algorytm DES ma w sobie pewne kruczki, które czyni± u¿ycie interfejsu crypt(3) bezu¿ytecznym w przypadku innym ni¿ autentykacja hase³. Je¶li masz zamiar u¿ywaæ interfejsu crypt(3) do kryptografii nie rób tego: zdob±d¼ dobr± ksi±¿kê na temat kodowania (encryption) i jedn± z szeroko dostêpnych bibliotek DES." Wiêkszo¶æ pakietów Shadow Suite zawiera kod zwiêkszaj±cy ilo¶æ znaków w ha¶le do 16. Eksperci od DES-a s± temu przeciwni, poniewa¿ w takim przypadku kodowanie najpierw odbywa siê dla lewej strony d³u¿szego has³a, a potem dla prawej strony. Z powodu tego jak dzia³a crypt, mo¿e to stworzyæ mniej bezpiecznie zakodowane has³o ni¿ wtedy, gdy u¿yte zosta³oby has³o krótsze. Dodatkowo, jest ma³o prawdopodobne, ¿eby u¿ytkownik by³ w stanie zapamiêtaæ has³o 16-znakowe. Trwaj± w tej chwili prace, które maj± na celu zast±pienie dotychczasowego algorytmu autentykacji czym¶ bardziej bezpiecznym oraz z obs³ug± d³u¿szych hase³ (szczególnie algorytmem MD5) oraz pozostawienie kompatybilno¶ci z metod± wykorzystuj±c± crypt. Je¶li szukasz dobrej ksi±¿ki na temat kodowania polecam: "Applied Cryptography: Protocols, Algorithms, and Source Code in C" by Bruce Schneier <schneier@chinet.com> ISBN: 0-471-59756-2 33.. ZZddoobbyywwaanniiee ppaakkiieettuu SShhaaddooww SSuuiittee.. 33..11.. HHiissttoorriiaa ppaakkiieettuu SShhaaddooww SSuuiittee ddllaa LLiinnuuxx--aa.. NNIIEE UU¯¯YYWWAAJJ PPAAKKIIEETTÓÓWW WWYYMMIIEENNIIOONNYYCCHH WW TTEEJJ SSEEKKCCJJII,, SS¡¡ WW NNIICCHH PPRROOBBLLEEMMYY ZZ BBEEZZPPIIEECCZZEEÑÑSSTTWWEEMM.. Orygina³ pakietu Shadow Suite zosta³ napisany przez John F. Haugh II. Jest kilka wersji, które by³y u¿ywane na Linux-ie: · Orygina³ to shadow-3.3.1 · shadow-3.3.1-2 to ³ata przeznaczona specjalnie na Linux-a zrobiona przez Florian La Roche <flla@stud.uni-sb.de>. Zawiera ona tak¿e dalsze ulepszenia. · Pakiet shadow-mk zosta³ skomponowany specjalnie dla Linux-a. Pakiet shadow-mk zawiera pakiet shadow-3.3.1 dystrybuowany przez John F. Haugh II wraz z ³at± shadow-3.3.1-2 patch, kilka poprawek zrobionych przez Mohan Kokal <magnus@texas.net>, które uczyni³y instalacjê o wiele ³atwiejsz±, ³atê zrobion± przez Joseph R.M. Zbiciak, która eliminuje dziury w programie /bin/login zwi±zane z opcjami -f, -h oraz kilka innych ³at. Pakiet shadow-mk by³ pakietem ppoopprrzzeeddnniioo rekomendowanym, ale powinien zostaæ zamieniony z powodu pprroobblleemmóóww z bezpieczeñstwem zwi±zanych z programem login. W pakietach 3.3.1, 3.3.1-2 oraz shadow-mk s± problemy zwi±zane z programem login. B³±d ten to niesprawdzanie d³ugo¶ci podawanego identyfikatora. Powoduje to przepe³nienie bufora, co z kolei powoduje za³amania (crashes) programu albo gorzej. Podobno to przepe³nienie bufora mo¿e byæ wykorzystane przez kogo¶, kto posiada konto w systemie w po³±czeniu z bibliotekami dzielonymi, aby uzyskaæ przywileje rroooott--aa. Nie bêdê opisywa³ jak dok³adnie dzia³a ten b³±d poniewa¿ jest du¿o systemów Linux-owych, które s± zara¿one, ale systemy z zainstalowanymi tymi pakietami Shadow Suite oraz wiêkszo¶æ systemów w wersji przed-ELF bbeezz pakietu Shadow Suite s± podatne na atak! Wiêcej informacji na ten temat znajdziesz na stronie po¶wiêconej bezpieczeñstwu w Linux-ie <http://bach.cis.temple.edu/linux/linux- security/>. (Shared Libraries and login Program Vulnerability) 33..22.. GGddzziiee zznnaallee¼¼ææ ppaakkiieett SShhaaddooww SSuuiittee.. Jedyny polecany pakiet Shadow Suite jest wci±¿ w wersji BETA, chocia¿ najnowsze wersje s± bezpieczne w ¶rodowisku produkcji i nie zawieraj± podatnego na ataki programu login. W pakiecie u¿ywane jest nastêpuj±ce nazewnictwo: shadow-RRMMDD.tar.gz gdzie RRMMDD oznacza datê wprowadzenia pakietu w obieg. Wersja ta ostatecznie bêdzie wersj± 3.3.3, kiedy zakoñczone zostan± testy w wersji BETA, a obs³ugiwana jest przez Marka Micha³kiewicza <marekm@i17linuxb.ists.pwr.wroc.pl>. Dostêpna jest jako shadow-current.tar.gz <ftp://i17linuxb.ists.pwr.wroc.pl/pub/linux/shadow/>. Dostêpna jest tak¿e pod adresem ftp.icm.edu.pl <ftp://ftp.icm.edu.pl/pub/Linux/shadow/>. Powiniene¶ u¿yæ najnowszej dostêpnej wersji. NNIIEE powiniene¶ u¿ywaæ wersji ssttaarrsszzeejj ni¿ shadow-960129 poniewa¿ wystêpuje tam opisany powy¿ej problem z programem login. Je¶li piszê o pakiecie Shadow Suite, to mam na my¶li ten w³a¶nie plik. Zak³ada siê te¿, ¿e tej w³a¶nie wersji u¿ywasz. Aby napisaæ ten dokument u¿y³em tej w³a¶nie wersji pakietu. Je¶li wcze¶niej u¿ywa³e¶ pakietu shadow-mk, powiniene¶ zaktualizowaæ go do tej wersji i ponownie skompilowaæ wszystko to, co pierwotnie przekompilowa³e¶, 33..33.. CCoo jjeesstt zzaawwaarrttee ww ppaakkiieecciiee SShhaaddooww SSuuiittee.. Pakiet ten zawiera zastêpcze wersje dla programów: su, login, passwd, newgrp, chfn, chsh, id Pakiet ten zawiera tak¿e nowe programy: chage, newusers, dpasswd, gpasswd, useradd, userdel, usermod, groupadd, groupdel, groupmod, groups, pwck, grpck, lastlog, pwconv, pwunconv. Dodatkowo znajduje siê tam tak¿e biblioteka libshadow.a przeznaczona do pisania i kompilowania programów, które potrzebuj± dostêpu do hase³ u¿ytkowników. Zawarte s± tak¿e strony podrêcznika systemowego do wszystkich programów. Znajduje siê tam tak¿e plik konfiguracyjny dla programu login, który zostanie zainstalowany jako /etc/login.defs. 44.. KKoommppiillaaccjjaa pprrooggrraammóóww.. 44..11.. RRoozzppaakkoowwyywwaanniiee aarrcchhiiwwóóww.. Pierwszym krokiem po ¶ci±gniêciu programu jest rozpakowanie go. Pakiet jest w formie starowanej i skompresowany programem gzip, tak wiêc najpierw przenie¶ go do /usr/src, a potem napisz: tar -xzvf shadow-current.tar.gz Powstanie katalog /usr/src/shadow-RRMMDD, w którym znajd± siê ¼ród³a pakietu. 44..22.. KKoonnffiigguurraaccjjaa ww pplliikkuu ccoonnffiigg..hh Pierwsz± rzecz± jak± musisz zrobiæ, to skopiowaæ odpowiednie pliki Makefile i config.h: cd /usr/src/shadow-RRMMDD cp Makefile.linux Makefile cp config.h.linux config.h Potem powiniene¶ przejrzeæ plik config.h. Zawiera on definicje dla niektórych opcji konfiguracyjnych. Je¶li u¿ywasz _z_a_l_e_c_a_n_e_g_o pakietu, to polecam wy³±czenie na pocz±tek przes³anianie hase³ grup. Domy¶lnie opcja ta jest w³±czona. Aby to wy³±czyæ, wyedytuj plik config.h i zmieñ #define SHADOWGRP na #undef SHADOWGRP. Na pocz±tek proponuje to wy³aczyæ, a pó¼niej jak bêdziesz chcia³ hase³ dla grup i administratorów grup, to mo¿esz przekompilowaæ pakiet. Je¶li zostawisz tê opcjê w³±czon± mmuussiisszz stworzyæ plik /etc/gshadow. W³±czanie opcji pozwalaj±cej na d³u¿sze has³a nniiee jest zalecane - patrz wy¿ej. Opcja AUTOSHADOW zosta³a zaprojektowana, aby umo¿liwiæ dzia³anie programom, które ignoruj± przes³anianie hase³. Teoretycznie brzmi to dobrze, ale niestety nie dzia³a poprawnie. Je¶li w³aczysz tê opcjê i program zostanie uruchomiony z przywilejami "root-a", mo¿e on wywo³aæ funkcjê getpwnam() jako "root", a pó¼niej zapisaæ zmienion± pozycjê spowrotem do pliku /etc/passwd (ii hhaass³³oo nniiee jjeesstt jjuu¿¿ pprrzzeess³³oonniiêêttee). Do takich programów zaliczaj± siê chfn i chsh. (Nie mo¿esz obej¶æ tego przez zamianê rzeczywistego uid z efektywnym uid przed wywo³aniem funkcji getpwnam() poniewa¿ root tak¿e mo¿e u¿ywaæ chfn i chsh.) To samo ostrze¿enie jest s³uszne je¶li kompilujesz bibliotekê libc, która posiada opcjê SHADOW_COMPAT, która robi to samo. NNiiee ppoowwiinnnnaa ona byæ u¿ywana! Je¶li zakodowane has³a zaczn± siê pojawiaæ spowrotem w pliku /etc/passwd, to to w³a¶nie jest przyczyn±. Je¶li u¿ywasz wcze¶niejszej wersji biblioteki ni¿ 4.6.27, bêdziesz musia³ zrobiæ trochê wiêcej zmian w pliku config.h i Makefile. W pliku config.h zmieñ: #define HAVE_BASENAME na: #undef HAVE_BASENAME A nastêpnie w pliku Makefile zmieñ: SOBJS = smain.o env.o entry.o susetup.o shell.o \ sub.o mail.o motd.o sulog.o age.o tz.o hushed.o SSRCS = smain.c env.c entry.c setup.c shell.c \ pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \ tz.c hushed.c na: SOBJS = smain.o env.o entry.o susetup.o shell.o \ sub.o mail.o motd.o sulog.o age.o tz.o hushed.o basename.o SSRCS = smain.c env.c entry.c setup.c shell.c \ pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \ tz.c hushed.c basename.c Zmiany te powoduj± zawarcie kodu z basename.c, który zawiera siê w libc 4.6.27 i pó¼niejszych. 44..33.. KKooppiiee zzaappaassoowwee ttwwooiicchh oorryyggiinnaallnnyycchh pprrooggrraammóóww.. Dobrym pomys³em bêdzie zrobienie kopii zapasowych programów, które zostan± zamienione przez Shadow Suite. W dystrybucji Slackware 3.0 s± to: · /bin/su · /bin/login · /usr/bin/passwd · /usr/bin/newgrp · /usr/bin/chfn · /usr/bin/chsh · /usr/bin/id Pakiet w wersji BETA ma mo¿liwo¶æ wykonania tego poprzez program make, ale jest to w komentarzu w pliku Makefile, poniewa¿ ró¿ne dystrybucje umieszczaj± te programy w ró¿nych miejscach. Mo¿na to zrobiæ pisz±c: make save, ale najpierw trzeba skasowaæ znaki # z pliku Makefile od linii: save: Powiniene¶ tak¿e zrobiæ kopiê zapasow± pliku /etc/passwd, ale b±d¼ ostro¿ny, ¿eby¶ nie zmaza³ programu passwd w katalogu /etc. 44..44.. PPoolleecceenniiee mmaakkee _A_b_y _z_a_i_n_s_t_a_l_o_w_a_æ _p_a_k_i_e_t _m_u_s_i_s_z _b_y_æ _z_a_l_o_g_o_w_a_n_y _j_a_k_o _"_r_o_o_t_". Uruchom make, aby skompilowaæ programy wykonywalne: make all Mo¿esz zobaczyæ ostrze¿enie: rcsid defined but not used. Wszystko jest w porz±dku, poniewa¿ autor u¿ywa wersji kontrolnej pakietu. 55.. IInnssttaallaaccjjaa 55..11.. ZZaaooppaattrrzz ssiiêê ww ddyysskkiieettkkêê ssttaarrttooww±± ww rraazziiee ggddyybbyy¶¶ ccoo¶¶ ppooppssuu³³.. Je¶li co¶ powa¿nie pójdzie nie tak, by³oby dobrze, gdyby¶ mia³ dyskietkê startow±. Je¶li masz dyskietki boot/root z czasów instalacji, to w porz±dku, w innym przypadku przeczytaj Bootdisk-HOWTO <http://ftp.icm.edu.pl/pub/Linux/Documentation/HOWTO/Bootdisk- HOWTO.html>, które opisuje jak zrobiæ dyskietkê startow±. 55..22.. UUssuuwwaanniiee zzdduupplliikkoowwaannyycchh ssttrroonn ppooddrrêêcczznniikkaa ssyysstteemmoowweeggoo.. Powiniene¶ tak¿e przenie¶æ strony podrêcznika systemowego, które zostan± zast±pione. Nawet je¶li jeste¶ na tyle odwa¿ny, ¿e instalujesz Shadow Suite bez kopii zapasowej, to i tak bêdziesz chcia³ przenie¶æ stare strony podrêcznika systemowego. Nowe strony normalnie nie usunê³yby starych, poniewa¿ te drugie s± przypuszczalnie skompresowane. Mo¿esz u¿yæ takiej kombinacji poleceñ: man -aW polecenie i locate polecenie, aby zlokalizowaæ strony, które maj± byæ usuniête czy przeniesione. Raczej ³atwiej zrobiæ to przed poleceniem make install. Je¶li u¿ywasz dystrybucji Slackware 3.0, to oto strony, które powiniene¶ usun±æ/przesun±æ: · /usr/man/man1/chfn.1.gz · /usr/man/man1/chsh.1.gz · /usr/man/man1/id.1.gz · /usr/man/man1/login.1.gz · /usr/man/man1/passwd.1.gz · /usr/man/man1/su.1.gz · /usr/man/man5/passwd.5.gz W katalogu /var/man/cat[1-9] mog± znajdowaæ siê strony o tych samych nazwach, które tak¿e powinny zostaæ usuniête/przeniesione. 55..33.. PPoolleecceenniiee mmaakkee iinnssttaallll Jeste¶ gotów, aby napisaæ (zrób to jako "root"): make install Zainstaluje to nowe programy i programy zastêpcze oraz ustawi odpowiednie prawa dostêpu do plików. Zostan± tak¿e zainstalowane strony podrêcznika systemowego. S± tu tak¿e instalowane pliki nag³ówkowe w odpowiednich miejscach w /usr/include/shadow. Je¶li u¿ywasz wersji BETA tego pakietu, to musisz rêcznie skopiowaæ plik login.defs do katalogu /etc i upewniæ siê, ¿e ttyyllkkoo ""rroooott"" mo¿e go modyfikowaæ. cp login.defs /etc chmod 600 /etc/login.defs Plik ten jest plikiem konfiguracyjnym dla programu login. Powiniene¶ go przejrzeæ i odpowiednio zmodyfikowaæ jego zawarto¶æ zgodnie z twoimi wymaganiami. To tutaj decydujesz, z których terminalli (tty) mo¿e zalogowaæ siê "root" oraz ustawiasz inne opcje bezpieczeñstwa (np. domy¶lne wygasanie hase³). 55..44.. PPoolleecceenniiee ppwwccoonnvv Nastêpnym krokiem jest polecenie pwconv. Musi ono tak¿e byæ wykonane jako "root" i najlepiej w katalogu /etc: cd /etc /usr/sbin/pwconv Program pwconv tworzy z pliku /etc/passwd dwa pliki: /etc/npasswd i /etc/nshadow. Dostêpny jest tak¿e program pwunconv je¶li musisz zrobiæ normalny plik /etc/passwd z plików /etc/passwd i /etc/shadow. 55..55.. ZZmmiiaannyy nnaazzww pplliikkóóww nnppaasssswwdd ii nnsshhaaddooww Teraz, kiedy ju¿ wykona³e¶ polecenie pwconv, stworzy³e¶ dwa pliki - /etc/npasswd i /etc/nshadow. Ich nazwy musz± zostaæ zmienione odpowiednio na /etc/passwd i /etc/shadow. Chcemy tak¿e zrobiæ kopiê oryginalnego pliku /etc/passwd i upewniæ siê, ¿e tylko "root" mo¿e go czytaæ. Kopiê zapasow± umie¶cimy w katalogu domowym "root-a": cd /etc cp passwd ~/passwd chmod 600 ~/passwd mv npasswd passwd mv nshadow shadow Powiniene¶ siê tak¿e upewniæ, czy w³a¶ciciel plików i prawa dostêpu s± poprawne. Je¶li masz zamiar u¿ywaæ _X_W_i_n_d_o_w_s, to programy xlock i xdm musz± mieæ mo¿liwo¶æ odczytu pliku shadow, ale nie zapisu. S± dwa sposoby na zrobienie tego. Mo¿esz ustawiæ bit "SUID" dla programu xlock (chmod u+s xlock); xdm ma z regu³y ten bit ustawiony. Albo mo¿esz przydzieliæ plik /etc/shadow do grupy shadow, ale zanim to zrobisz, sprawd¼ czy masz grupê shadow w pliku /etc/group. W³a¶ciwie ¿aden z u¿ytkowników systemu nie powinien byæ w tej grupie. cd /etc chown root.root passwd chown root.shadow shadow chmod 0644 passwd chmod 0640 shadow Twój system ma teraz przes³oniête has³a. Powiniene¶ teraz przej¶æ na inny wirtualny terminal i sprawdziæ czy mo¿esz siê zalogowaæ ZZrróóbb ttoo tteerraazz -- nnaapprraawwddêê !! Je¶li nie mo¿esz, to co¶ jest nie tak ! Aby powróciæ do stanu sprzed instalacji _S_h_a_d_o_w _S_u_i_t_e zrób to: cd /etc cp ~/passwd passwd chmod 644 passwd Przywracasz w ten sposób stare pliki, które wcze¶niej zachowa³e¶, na ich w³a¶ciwe miejsce. 66.. IInnnnee pprrooggrraammyy,, kkttóórree mmoo¿¿ee mmuussiisszz uuaakkttuuaallnniiææ aallbboo ""zzaa³³aattaaææ"".. Pomimo, i¿ pakiet _S_h_a_d_o_w _S_u_i_t_e posiada zastêpcze programy dla wiêkszo¶ci programów, które potrzebuj± dostepu do hase³, to prawie w ka¿dym systemie s± jeszcze dodatkowe programy, które potrzebuj± dostêpu do hase³. Je¶li masz dystrybucjê _D_e_b_i_a_n (a nawet je¶li nie masz), mo¿esz znale¼æ ¼ród³a programów, które musz± byæ przerobione pod tym adresem <ftp://ftp.icm.edu.pl/pub/Linux/debian/stable/source>. Reszta tej sekcji opisuje jak uaktualniæ programy: adduser, wu_ftpd, ftpd, pop3d, xlock, xdm i sudo tak, aby obs³ugiwa³y przes³oniête has³a. Aby dowiedzieæ siê jak zrobiæ obs³ugê przes³oniêtych hase³ w jakimkolwiek innym programie zobacz sekcjê ``Obs³uga przes³anianych hase³ w programach w C''. (Programy te i tak musz± byæ uruchomione z bitem "SUID" dla "root-a" albo grupy shadow, aby rzeczywi¶cie mieæ dostêp do hase³.) 66..11.. PPrrooggrraamm aadddduusseerr zz ddyyssttrryybbuuccjjii SSllaacckkwwaarree.. Dystrybucja Slackware (i pewnie inne) zawiera interaktywny program s³u¿±cy do dodawania nowych u¿ytkowników - /sbin/adduser. Wersjê tego programu obs³uguj±c± przes³oniête has³a mo¿na pobraæ np. z ftp.icm.edu.pl z katalogu /pub/Linux/sunsite/system/admin/accounts/. Ja zalecam u¿ywanie programów, które s± dostarczane wraz z pakietem _S_h_a_d_o_w _S_u_i_t_e (useradd, usermod, i userdel) zamiast adduser z dystrybucji Slackware. Co prawda nauczenie siê jak siê nimi pos³ugiwaæ zabiera trochê czasu, ale op³aca siê to poniewa¿ masz o wiele wiêksz± kontrolê i maj± one poprawne blokowanie plików (file locking) /etc/passwd i /etc/shadow - adduser tego nie robi. Wiêcej informacji w nastêpnej sekcji - ``Wprowadzanie pakietu Shadow Suite do u¿ycia.''. Ale je¶li ju¿ musisz go mieæ, oto co musisz zrobiæ: tar -xzvf adduser.shadow-1.4.tar.gz cd adduser make clean make adduser chmod 700 adduser cp adduser /sbin 66..22.. SSeerrwweerr wwuu__ffttppdd.. Wraz z wiêkszo¶ci± dystrybucji Linux-a przychodzi serwer wu_ftpd. Je¶li twoja dystrybucja nie instaluje domy¶lnie pakietu _S_h_a_d_o_w _S_u_i_t_e, to twój serwer wu_ftpd nie bêdzie skompilowany z obs³ug± przes³oniêtych hase³. wu_ftpd jest odpalany z inetd/tcpd jako proces _"_r_o_o_t_-_a_". Je¶li twój demon wu_ftpd jest star± wersj±, to bêdziesz chcia³ j± uaktualniæ tak czy inaczej poniewa¿ stare wersje maj± pewien b³±d, który kompromituje konto _"_r_o_o_t_". (Wiêcej informacji znajdziesz na Stronie Domowej Bezpieczeñstwa na Linuxie <http://bach.cis.temple.edu/linux/linux-security/Linux-Security- FAQ/Linux-wu.ftpd-2.4-Update.html>). Na szczê¶cie musisz tylko zdobyæ ¿ród³a tego programu i skompilowaæ go z w³±czon± obs³ug± "Shadow password". Je¶li nie masz systemu ELF, to serwer wu_ftpd mo¿esz znale¼æ na SUNSite Polska <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/system/network/file- transfer/> - nazywa siê wu_ftpd-2.4-fixed.tar.gz Jak ju¿ ¶ci±gniesz te ¼ród³a, to wtedy napisz: cd /usr/src tar -xzvf wu-ftpd-2.4-fixed.tar.gz cd wu-ftpd-2.4-fixed cp ./src/config/config.lnx.shadow ./src/config/config.lnx Potem zmieñ w pliku ./src/makefiles/Makefile.lnx liniê: LIBES = -lbsd -support na: LIBES = -lbsd -support -lshadow Teraz mo¿esz uruchomiæ skrypt kompiluj±cy i zainstalowaæ pakiet: cd /usr/src/wu-ftpd-2.4-fixed /usr/src/wu-ftp-2.4.fixed/build lnx cp /usr/sbin/wu.ftpd /usr/sbin/wu.ftpd.old cp ./bin/ftpd /usr/sbin/wu.ftpd Polecenia te powoduj± u¿ycie pliku konfiguracyjnego z obs³ug± hase³ przes³anianych dla Linux-a, skompilowanie i instalacjê serwera. U siebie na Slackware 2.3 musia³em dodatkowo przed kompilacj± zrobiæ co¶ takiego: cd /usr/include/netinet ln -s in_systm.h in_system.h cd - Zg³aszane by³y problemy z kompilacj± na systemie binarnym ELF, ale wersja BETA nastêpnej wersji dzia³a dobrze. Mo¿na j± znale¼æ pod adresem ftp.icm.edu.pl <ftp://ftp.icm.edu.pl/pub/Linux/sunsite/distributions/slackware/source/n/tcpip> pod nazw± wu-ftp-2.4.2-beta-10.tar.gz. Jak ju¿ ¶ci±gniesz serwer umie¶æ go w /usr/src i napisz: cd /usr/src tar -xzvf wu-ftpd-2.4.2-beta-9.tar.gz cd wu-ftpd-beta-9 cd ./src/config Potem zmieñ w pliku config.lnx: #undef SHADOW.PASSWORD na: #define SHADOW.PASSWORD Potem: cd ../Makefiles i zmieñ w pliku Makefile.lnx LIBES = -lsupport -lbsd # -lshadow na: LIBES = -lsupport -lbsd -lshadow Nastêpnie skompiluj i zainstaluj: cd .. build lnx cp /usr/sbin/wu.ftpd /usr/sbin/wu.ftpd.old cp ./bin/ftpd /usr/sbin/wu.ftpd Zauwa¿, ¿e powiniene¶ sprawdziæ w /etc/inetd.conf katalog, w którym twój serwer rzeczywi¶cie siê znajduje. Powiadomiono mnie, ¿e niektóre dystrybucje umieszczaj± demony serwerów w innych miejscach, a wtedy wu_ftpd mo¿e siê znajdowaæ gdzie indziej. 66..33.. SSttaannddaarrddoowwyy ffttppdd.. Je¶li masz u siebie standardowy serwer ftpd, zaleca³bym zmianê na wu_ftpd. Poza znan± dziur± omówion± wcze¶niej, wu_ftpd jest uznany za bardziej bezpieczny. Je¶li nalegasz na standardowy, albo potrzebujesz obs³ugi _N_I_S, to na SUNSite Polska <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/system/network/file- transfer/> znajdziesz ftpd-shadow-nis.tgz. 66..44.. ppoopp33dd ((PPoosstt OOffffiiccee PPrroottooccooll 33)) Je¶li potrzebujesz obs³ugi _P_o_s_t _O_f_f_i_c_e _P_r_o_t_o_c_o_l _3, bêdziesz musia³ skompilowaæ ponownie program pop3d. Normalnie jest on uruchamiany przez inetd/tcpd jako "root". Na SUNSite Polska <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/system/mail/pop/> dostêpne s± dwie wersje: · pop3d-1.00.4.linux.shadow.tar.gz · pop3d+shadow+elf.tar.gz Obie s± raczej proste do zainstalowania. 66..55.. xxlloocckk Je¶li zainstalujesz pakiet Shadow Suite i uruchomisz _X_W_i_n_d_o_w_s, a nastêpnie zablokujesz (lock) ekran nie uaktualniaj±c programu xlock, bêdziesz musia³ u¿yæ CTRL+ALT+Fx, aby prze³±czyæ siê na wirtualn± konsolê tekstow± (je¶li masz jak±¶), zalogowaæ siê i zlikwidowaæ proces xlock (albo u¿yæ CTRL+ALT+BACKSPACE ¿eby zamkn±æ XWindows). Na szczê¶cie uaktualnienie programu xlock jest do¶æ proste. Je¶li masz XFree86 wersja 3.x.x, przypuszczalnie u¿ywasz xlockmore (który jest wspania³ym "screensaver-em" w po³aczeniu z "lock"). Nastêpuj±cy pakiet obs³uguje przes³oniête has³a - xlockmore-3.5.tgz a dostêpny jest z SUNSite Polska <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/X11/xutils/screensavers/>. Je¶li masz starsz± wersjê zalecam uaktualnienie do tej. Oto "z grubsza" to, co musisz zrobiæ: · ¦ci±gnij xlockmore i umie¶æ w /usr/src · rozpakuj: tar -xzvf xlockmore-3.7.tgz · zmieñ w pliku /usr/X11R6/lib/X11/config/linux.cf liniê #define HasShadowPasswd NO na: #define HasShadowPasswd YES · skompiluj pliki wykonywalne: cd /usr/src/xlockmore xmkmf make depend make · potem przenie¶ wszystko w odpowiednie miejsce i uaktulanij prawa dostêpu i w³a¶cicieli plików cp xlock /usr/X11R6/bin/ cp XLock /var/X11R6/lib/app-defaults/ chown root.shadow /usr/X11R6/bin/xlock chmod 2755 /usr/X11R6/bin/xlock chown root.shadow /etc/shadow chmod 640 /etc/shadow Twój xlock bêdzie teraz dzia³a³ poprawnie. 66..66.. xxddmm xdm jest programem, który prezentuje ekran "loguj±cy" dla XWindows. Niektóre systemy startuj± ten program kiedy system ma siê uruchomiæ w odpowiednim "runlevel-u" (zobacz /etc/inittab). Je¶li zainstalowa³e¶ przes³aniane has³a, musisz uaktulaniæ ten program. Na szczê¶cie jest to do¶æ proste: xdm.tar.gz mo¿na ¶ci±gn±æ z SUNSite Polska <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/X11/xutils/>. ¦ci±gnij ten plik i umie¶æ go w /usr/src, potem go rozpakuj: tar -xzvf xdm.tar.gz. Zmieñ w pliku /usr/X11R6/lib/X11/config/linux.cf liniê #define HasShadowPasswd NO na: #define HasShadowPasswd YES Skompiluj pliki wykonywalne: cd /usr/src/xdm xmkmf make depend make Potem umie¶æ wszystko na swoim miejscu cp xdm /usr/X11R6/bin/. xdm jest uruchamiany jako "root" tak wiêc nie musisz zmieniaæ jego praw dostêpu. 66..77.. ssuuddoo Program sudo pozwala administratorowi na udostêpnianie zwyk³ym u¿ytkownikom programów, które wymagaj± uprawnieñ "root-a". Jest to po¿yteczne poniewa¿ mo¿na ograniczaæ dostêp do konta "root" i jednocze¶nie pozwalaæ u¿ytkownikom np. montowaæ urz±dzenia. sudo musi przeczytaæ has³o poniewa¿ weryfikuje u¿ytkownika kiedy jest uruchamiane. sudo jest uruchamiane z bitem SUID "root" tak wiêc nie ma problemu z dostêpem do pliku /etc/shadow. Program ten z obs³ug± hase³ przes³anianych dostêpny jest na SUNSite Polska <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/system/admin> pod nazw± sudo-1.2-shadow.tgz. UUwwaaggaa:: Podczas instalacji tego programu usuniêty zostanie plik /etc/sudoerrs i zast±piony domy¶lnym przychodz±cym razem z pakietem. Tak wiêc zrób sobie kopiê zapasow± je¶li robi³e¶ tam jakie¶ zmiany. Albo mo¿esz usun±æ linijkê kasuj±c± ten plik z pliku Makefile. Obs³uga przes³anianych hase³ jest ju¿ ustawiona w pakiecie, tak wiêc wszystko co trzeba zrobiæ, to przekompilowaæ go. Po umieszczeniu go w /usr/src napisz: cd /usr/src tar -xzvf sudo-1.2-shadow.tgz cd sudo-1.2-shadow make all make install 66..88.. iimmaappdd ((EE--MMaaiill ppaakkiieett ppiinnee)).. imapd jest serwerem poczty elektronicznej podobnym do pop3d. imapd przychodzi wraz z pakietem _P_i_n_e _E_-_M_a_i_l. Dokumentacja dostarczana wraz z tym pkaietem twierdzi, ¿e domy¶lnym dla systemów Linux jest w³±czenie obs³ugi przes³anianych hase³. Ja jednak przekona³em siê, ¿e nie jest to prawda. Id±c dalej, kombinacja skrypt tworz±cy - Makefile bardzo utrudnia dodanie biblioteki libshadow.a podczas kompilacji, wiêc nie by³em w stanie dodaæ obs³ugi hase³ przes³anianych do imapd. Je¶li komu¶ siê to uda³o, to proszê o opis a ja umieszczê go w tym punkcie. 66..99.. ppppppdd ((SSeerrwweerr PPrroottookkoo³³uu PPooiinntt--ttoo--PPooiinntt)) Serwer pppd mo¿e zostaæ tak ustawiony, aby u¿ywa³ ró¿nych typów autentykacji: _P_a_s_s_w_o_r_d _A_u_t_h_e_n_t_i_c_a_t_i_o_n _P_r_o_t_o_c_o_l (PAP) i _C_r_y_p_t_o_g_r_a_p_h_i_c _H_a_n_d_s_h_a_k_e _A_u_t_h_e_n_t_i_c_a_t_i_o_n _P_r_o_t_o_c_o_l (CHAP). Serwer pppd zwykle czyta ³añuchy hase³ z /etc/ppp/chap-secrets i/albo z /etc/ppp/pap-secrets. Je¶li u¿ywasz tego domy¶lnego zachowania serwera pppd, to przeinstalowywanie go nie jest konieczne. pppd pozwala tak¿e na u¿ycie parametrów _l_o_g_i_n_-_u (albo z wiersza poleceñ, albo z pliku konfiguracyjnego, albo z pliku z opcjami). Je¶li jest podana jaka¶ opcja _l_o_g_i_n_-_u, to pppd u¿yje pliku /etc/passwd, ¿eby zweryfikowaæ identyfikator i has³o dla PAP. To oczywi¶cie nie zadzia³a odk±d nasz plik z has³ami jest przes³aniany. Je¶li u¿ywasz pppd-1.2.1d, to bêdziesz musia³ dodaæ kod do obs³ugi hase³ przes³anianych. Podany w dalszej czê¶ci przyk³ad dodaje obs³ugê dla tej w³a¶nie wersji. Wersja pppd-2.2.0 ma ju¿ w sobie obs³ugê przes³anianych hase³. 77.. WWpprroowwaaddzzaanniiee ppaakkiieettuu SShhaaddooww SSuuiittee ddoo uu¿¿yycciiaa.. Sekcja ta opisuje kilka rzeczy które bêdziesz chcia³ wiedzieæ jak ju¿ zainstalowa³e¶ pakiet _S_h_a_d_o_w _S_u_i_t_e. Dalsze informacje zawarte s± na stronach podrêcznika systemowego na temat ka¿dego polecenia. 77..11.. DDooddaawwaanniiee,, MMooddyyffiikkaaccjjaa ii uussuuwwaanniiee uu¿¿yyttkkoowwnniikkóóww.. Pakiet _S_h_a_d_o_w _S_u_i_t_e doda³ nastêpuj±ce polecenia do dodawania, modyfikacji i usuwania u¿ytkowników. S± one obs³ugiwane z wiersza poleceñ przez parametry (mog³e¶ tak¿e zainstalowaæ program adduser). 77..11..11.. uusseerraadddd.. Polecenie useradd mo¿e zostaæ u¿yte, aby dodaæ u¿ytkownika do systemu. Wykonujesz je tak¿e, ¿eby zmieniæ domy¶lne ustawienia. Pierwsz± rzecz± jak± powiniene¶ zrobiæ, to sprawdziæ ustawienia domy¶lne na twoim systemie i odpowiednio je zmieniæ: useradd -D ______________________________________________________________________ GROUP=1 HOME=/home INACTIVE=0 EXPIRE=0 SHELL= SKEL=/etc/skel ______________________________________________________________________ Warto¶ci domy¶lne to pewnie nie s± te, które chcesz u¿ywaæ, tak wiêc je¶li zacz±³by¶ dodawaæ u¿ytkowników teraz, to musia³by¶ podawaæ informacje dla ka¿dego u¿ytkownika. Jednak mo¿emy i powinni¶my zmieniæ warto¶ci domy¶lne: · Niech domy¶ln± grup± bêdzie 100 · Niech has³a wygasaj± po 60 dniach · Niech konta nie bêd± blokowane po wyga¶niêciu has³a · Niech domy¶ln± pow³ok± bêdzie /bin/bash Aby zrobiæ takie zmiany napisa³bym: useradd -D -g100 -e60 -f0 -s/bin/bash Teraz uruchomienie useradd -D poka¿e: ______________________________________________________________________ GROUP=100 HOME=/home INACTIVE=0 EXPIRE=60 SHELL=/bin/bash SKEL=/etc/skel ______________________________________________________________________ W razie gdyby¶ chcia³ wiedzieæ, to warto¶ci te s± zapisywane w /etc/default/useradd. Teraz mo¿esz u¿yæ polecenia useradd, aby dodaæ u¿ytkowników do systemu. Na przyk³ad, aby dodaæ u¿ytkownika fred u¿ywaj±c warto¶ci domy¶lnych napisa³by¶: useradd -m -c "Fred Flintstone" fred Stworzy to nastêpuj±c± pozycjê w /etc/passwd: fred:*:505:100:Fred Flinstone:/home/fred:/bin/bash oraz nastêpuj±c± pozycjê w /etc/shadow: fred:!:0:0:60:0:0:0:0 Utworzony zostanie katalog domowy freda oraz skopiowana zostanie tam zawarto¶æ katalogu /etc/skel z powodu opcji -m. Poniewa¿ nie podali¶my UID-u u¿yty zostanie nastêpny wolny. Konto freda bêdzie utworzone, ale nie bêdzie on siê móg³ zalogowaæ dopóki go nie odblokujemy. Zrobimy to przez zmianê has³a: passwd fred ______________________________________________________________________ Changing password for fred Enter the new password (minimum of 5 characters) Please use a combination of upper and lower case letters and numbers. New Password: ******* Re-enter new password: ******* ______________________________________________________________________ Teraz w /etc/shadow bêdzie: fred:J0C.WDR1amIt6:9559:0:60:0:0:0:0 A fred bêdzie móg³ siê teraz zalogowaæ i korzystaæ z systemu. Najlepsze w u¿yciu programów, które przychodz± razem z pakietem _S_h_a_d_o_w _S_u_i_t_e jest to, ¿e wszelkie zmiany plików /etc/passwd i /etc/shadow s± wykonywane z tzw. blokowaniem. Ta wiêc je¶li dodajesz u¿ytkownika do systemu a inny u¿ytkownik w³a¶nie sobie zmienia has³o, to obie operacje zostan± wykonane poprawnie. Powiniene¶ u¿ywaæ raczej dostarczonych programów ni¿ edytowaæ rêcznie pliki /etc/passwd i /etc/shadow. Je¶li edytowa³e¶ plik /etc/shadow i jaki¶ u¿ytkownik zmienia³ sobie w tym samym czasie has³o, to po zapisaniu zmian dokonanych przez ciebie nowe has³o u¿ytkownika zginie. Oto ma³y interaktywny skrypt, który dodaje nowego u¿ytkownika u¿ywaj±c useradd i passwd: ______________________________________________________________________ #!/bin/bash # # /sbin/newuser - Skrypt dodaj±cy u¿ytkowników do systemu u¿ywaj±cego # programów useradd z pakietu Shadow Suite i passwd. # # Napisany przez Mike'a Jacksona <mhjack@tscnet.com> jako przyk³ad do # Shadow-Password-HOWTO. Pozwolenie na u¿ywanie i modyfikacje wyra¼nie dane. # # Mo¿naby ten skrypt zmodyfikowaæ tak, ¿eby pokazywa³ warto¶ci domy¶lne # oraz pozwala³ na modyfikacjê podobnie jak program adduser ze Slackware. # Mo¿naby te¿ sprawdzaæ b³êdy, czy g³upie warto¶ci. # # ## # Warto¶ci domy¶lne dla polecenia useradd ## GROUP=100 # Domy¶lna grupa HOME=/home # Katalog domowy (/home/identyfikator) SKEL=/etc/skel # Katalog szkieletowy INACTIVE=0 # Ilo¶æ dni, po których wygasa has³o. EXPIRE=60 # Ilo¶æ dni, przez któr± ma istnieæ has³o SHELL=/bin/bash # Domy¶lna pow³oka (pe³na ¶cie¿ka) ## # Warto¶ci domy¶lne dla polecenia passwd ## PASSMIN=0 # Ilo¶æ dni miêdzy któr± zmienia siê has³o PASSWARN=14 # Ilo¶æ dni przed wyga¶niêciem has³a kiedy jest # wysy³ana wiadomo¶æ ostrzegaj±ca. ## # Upewnij siê, ¿e "root" uruchomi³ ten skrypt ## WHOAMI=`/usr/bin/whoami` if [ $WHOAMI != "root" ]; then echo "You must be root to add news users!" exit 1 fi ## # Zapytaj o identyfikator i imiê i nazwisko ## echo "" echo -n "Username: " read USERNAME echo -n "Full name: " read FULLNAME # echo "Adding user: $USERNAME." # # Zauwa¿, ¿e wymagane s± "" przy $FULLNAME poniewa¿ pole to bêdzie # prawie zawsze zawiera³o przynajmniej jedn± spacjê, a bez " polecenie # useradd "pomy¶la³oby", ¿e jest to nastêpny parametr kiedy dosz³oby # do spacji. # /usr/sbin/useradd -c"$FULLNAME" -d$HOME/$USERNAME -e$EXPIRE \ -f$INACTIVE -g$GROUP -m -k$SKEL -s$SHELL $USERNAME ## # Ustaw domy¶lne warto¶ci dla has³a ## /bin/passwd -n $PASSMIN -w $PASSWARN $USERNAME >/dev/null 2>&1 ## # Niech polecenie passwd zapyta poprawnie (dwa razy) o has³o ## /bin/passwd $USERNAME ## # Poka¿, co zosta³o zrobione ## echo "" echo "Entry from /etc/passwd:" echo -n " " grep "$USERNAME:" /etc/passwd echo "Entry from /etc/shadow:" echo -n " " grep "$USERNAME:" /etc/shadow echo "Summary output of the passwd command:" echo -n " " passwd -S $USERNAME echo "" ______________________________________________________________________ U¿ycie skryptu do dodawania u¿ytkowników do systemu jest na prawdê bardziej preferowane ni¿ rêczna edycja plików /etc/passwd czy /etc/shadow czy te¿ u¿ywanie programu adduser ze Slackware. Mo¿esz ¶mia³o modyfikowaæ ten skrypt dla swoich potrzeb. Wiêcej informacji na temat useradd znajdziesz w podrêczniku systemowym. 77..11..22.. uusseerrmmoodd.. Program usermod u¿ywany jest do modyfikowania informacji na temat danego u¿ytkownika. Opcje tego programu s± podobne do opcji programu useradd. Powiedzmy, ¿e chcesz zmieniæ pow³okê dla freda; zrobi³by¶ to tak: usermod -s /bin/tcsh fred Teraz pozycja dotycz±ca freda w /etc/passwd zmieni³aby siê na: fred:*:505:100:Fred Flinstone:/home/fred:/bin/tcsh Za³ó¿my, ¿e chcemy, ¿eby konto freda wygas³o 15.09.1997: usermod -e 09/15/97 fred <-- data w stylu angielskim-amerykañskim (mmddrr) Teraz pozycja dotycz±ca freda w /etc/shadow zmieni³aby siê na: fred:J0C.WDR1amIt6:9559:0:60:0:0:10119:0 Wiêcej informacji na temat usermod znajdziesz w podrêczniku systemowym. 77..11..33.. uusseerrddeell.. userdel robi dok³adnie to czego siê spodziewa³e¶ - kasuje konto podanego u¿ytkownika. U¿ycie jest proste: userdel -r <identyfikator> Opcja -r powoduje skasowanie wszystkich plików z katalogu domowego u¿ytkownika. Plików zlokalizowanych w innym systemie plików trzeba poszukaæ i skasowaæ je rêcznie. Je¶li chcesz tylko zablokowaæ dane konto, a nie skasowaæ to u¿yj polecenia passwd. 77..22.. PPoolleecceenniiee ppaasssswwdd ii ""tteerrmmiinn wwaa¿¿nnoo¶¶ccii"" hhaass³³aa.. Polecenie passwd u¿ywane jest do zmiany has³a. Oprócz tego u¿ywane jest przez "root-a" do: · Blokowania i odblokowywania kont (-l i -u) · Ustawiania maksymalnej ilo¶ci dni przez jak± has³o jest wa¿ne (-x) · Ustawiania minimalnej ilo¶ci dni miêdzy zmianami has³a (-n) · Ustawiania ilo¶ci dni, po których wysy³ane jest ostrze¿enie o wyga¶niêciu has³a (-w) · Ustawiania ilo¶ci dni, po której has³o wygasa przed zablokowaniem konta (-i) · Pozwalania na przegl±danie informacji o koncie w czytelniejszym formacie (-S) Na przyk³ad, spójrzmy jeszcze raz na freda: passwd -S fred fred P 03/04/96 0 60 0 0 Oznacza to, ¿e has³o freda jest wa¿ne, ostatnio by³o zmieniane 04.03.1996, mo¿e byæ zmienione w ka¿dej chwili, wygasa po 60 dniach, fred nie zostanie ostrze¿ony oraz konto nie zostanie zablokowane po wyga¶niêciu has³a. Oznacza to po prostu tyle, ¿e kiedy fred zaloguje siê po wyga¶niêciu has³a zostanie zaraz na pocz±tku poproszony o podanie nowego has³a. Je¶li zdecydujemy siê, ¿e chcemy ostrzec freda na 14 dni przed wyga¶niêciem jego has³a i zablokowaæ jego konto 14 dni po wyga¶niêciu has³a trzebaby napisaæ tak: passwd -w14 -i14 fred Teraz dane o fredzie zmiani³y siê na: fred P 03/04/96 0 60 14 14 Wiêcej informacji na temat passwd znajdziesz w podrêczniku systemowym. 77..33.. PPlliikk llooggiinn..ddeeffss Plik /etc/login jest plikiem konfiguracyjnym dla programu login oraz dla ca³ego pakietu _S_h_a_d_o_w _S_u_i_t_e. /etc/login zawiera ustawienia od tego jak bêd± wygl±daæ znaki zachêty do tego jakie domy¶lne warto¶ci bêd± dla wygasania has³a kiedy u¿ytkownik je sobie zmieni. Plik /etc/login.defs jest do¶æ dobrze udokumentowany ju¿ przez same komentarze w nim zawarte. Chocia¿ jest kilka rzeczy do odnotowania: · Zawiera opcje, które mog± byæ w³±czane i wy³±czane do okre¶lania ilo¶ci zalogowañ. · Zawiera wskazania na inne pliki konfiguracyjne. · Zawiera domy¶lne warto¶ci dla takich ustawieñ jak "termin wa¿no¶ci" has³a. Z powy¿szej listy wynika, ¿e jest to raczej wa¿ny plik i powiniene¶ siê upewniæ, ¿e istnieje i ¿e ustawienia s± takie jak chcia³e¶. 77..44.. HHaass³³aa ddllaa ggrruupp.. Plik /etc/groups mo¿e zawieraæ has³a, które pozwalaj± u¿ytkownikom do³±czyæ siê do jakiej¶ grupy. Funkcja ta jest w³±czona je¶li zdefiniujesz sta³± SHADOWGRP w pliku /usr/src/shadow-YYMMDD/config.h . Je¶li j± zdefiniujesz i skompilujesz pakiet, musisz utworzyæ plik /etc/gshadow, ¿eby trzymaæ tam has³a grup i informacje administracyjne. Do utworzenia pliku /etc/shadow u¿y³e¶ programu pwconv; nie ma odpowiednika do utworzenia pliku /etc/gshadow, ale to nie ma znaczenia bo plik ten sam siê sob± zajmuje. Aby stworzyæ pocz±tkowy plik /etc/gshadow zrób tak: touch /etc/gshadow chown root.root /etc/gshadow chmod 700 /etc/gshadow Jak bêdziesz tworzy³ nowe grupy, zostan± one dodane do /etc/group i /etc/gshadow. Do modyfikacji grup s³u¿± programy dostarczane wraz z pakietem _S_h_a_d_o_w _S_u_i_t_e: groups, groupadd, groupmod i groupdel. Format pliku /etc/group jest taki: nazwa_grupy:!:GID:cz³onek,cz³onek,... Gdzie: nnaazzwwaa__ggrruuppyy - chyba nie wymaga wyja¶niania :) !! - w tym miejscu normalnie by³oby has³o, ale teraz jest ono w gshadow GGIIDD - numer grupy cczz³³oonneekk - lista cz³onków grupy. Format pliku /etc/gshadow jest taki: nazwa_grupy:has³o:admin,admin,...:cz³onek,cz³onek,... Gdzie: nnaazzwwaa__ggrruuppyy - chyba nie wymaga wyja¶niania :) hhaass³³oo - zakodowane has³o grupy aaddmmiinn - lista administratorów grupy cczz³³oonneekk - lista cz³onków grupy Polecenie gpasswd jest u¿ywane tylko do dodawania i usuwania cz³onków do/z grupy. "root" i ka¿dy z administratorów grupy mo¿e usuwaæ i dodawaæ cz³onków. Has³o dla grupy mo¿e byæ zmienione za pomoc± polecenia passwd przez "root-a" i ka¿dego z administratorów grupy. Chocia¿ nie ma strony do podrêcznika systemowego dla gpasswd, to zrozumienie opcji tego polecenia nie jest takie trudne jak ju¿ rozumiesz jego format i koncept. gpasswd bez ¿adnych parametrów poda opcje jakie przyjmuje. 77..55.. PPrrooggrraammyy ddoo sspprraawwddzzaanniiaa ppoopprraawwnnoo¶¶ccii.. 77..55..11.. ppwwcckk Program pwck sprawdza poprawno¶æ plików /etc/passwd i /etc/shadow. Sprawdzi ka¿dego u¿ytkownika czy ma: · poprawn± ilo¶æ pól, · unikalny identyfikator, · dobry UID i GID · dobr± grupê domy¶ln± · poprawny katalog domowy · poprawn± pow³okê Ostrze¿e nas tak¿e je¶li znajdzie konta bez hase³. Uruchomienie tego programu po zainstalowaniu pakietu _S_h_a_d_o_w _S_u_i_t_e jest dobrym pomys³em. Powinno sie go tak¿e uruchamiaæ okresowo - co tydzieñ, co miesi±c. Je¶li u¿yjesz opcji -r, to mo¿esz u¿yæ programu cron, aby uruchamiaæ pwck okresowo i dostawaæ raport poczt±. 77..55..22.. ggrrppcckk Program ten sprawdza poprawno¶æ plików /etc/group i /etc/gshadow. Sprawdza: · ilo¶æ pól, · unikaln± nazwê grupy · poprawno¶æ listy administratorów i cz³onków. Ma tak¿e opcjê -r do automatycznych raportów. 77..66.. HHaass³³aa pprrzzeezz tteelleeffoonn.. ((DDiiaall--uupp)) Has³a przez telefon s± inn± opcjonaln± lini± obrony dla systemów, które umo¿liwiaj± dostêp przez telefon. Je¶li masz system z du¿± ilo¶æi± u¿ytkowników ³±cz±cych siê lokalnie albo poprzez sieæ, ale chcesz ograniczyæ kto mo¿e sie po³±czyæ, to "has³a przez telefon" s± dla ciebie. Aby w³aczyæ "has³a przez telefon" musisz wyedytowaæ plik /etc/login.defs i upewniæ siê, ¿e DIALUPS_CHECK_ENAB jest ustawione na yes. S± dwa pliki, które zawieraj± informacje o po³±czeniach przez telefon: /etc/dialups, który zawiera "tty" (jeden na liniê bez "/dev/"). Je¶li dany tty jest tam zawarty to po³±czenie jest sprawdzane; oraz /etc/d_passwd z pe³n± ¶cie¿k± dostêpu do pow³oki oraz opcjonalnym has³em. Je¶li u¿ytkownik zaloguje siê na liniê, która jest podana w /etc/diulups i jego pow³oka jest podana w /etc/d_passwd, to bêdzie móg³ siê zalogowaæ tylko po podaniu poprawnego has³a. Innym u¿ytecznym celem "hase³ przez telefon" mo¿e byæ ustawienie linii, która pozwala tylko na po³±czenia konkretnego rodzaju (np. PPP lub/i UUCP). Je¶li u¿ytkownik próbuje siê po³±czyæ inaczej (np. list± pow³ok), to musi znaæ has³o na tê liniê. Zanim bêdziesz móg³ u¿ywaæ tych w³a¶ciwo¶ci musisz stworzyæ te pliki. Polecenie dpasswd przypisuje has³a do konkretnych pow³ok zawartych w pliku /etc/d_passwd. Wiêcej informacji znajdziesz na stronie podrêcznika systemowego. 88.. OObbss³³uuggaa pprrzzeess³³aanniiaannyycchh hhaassee³³ ww pprrooggrraammaacchh ww CC.. Dodawanie obs³ugi hase³ przes³anianych do programów jest ca³kiem proste. Jedynym problemem jest to, ¿e program musi zostaæ uruchomiony z prawami "root-a", aby mieæ dostêp do pliku /etc/shadow. Tutaj pojawia siê jeden wielki problem: podczas pisania takich programów nale¿y siê trzymaæ jak naj¶ci¶lej zasad bezpieczeñstwa. Na przyk³ad je¶li program posiada wyj¶cie do pow³oki, to nniiee mmoo¿¿ee siê to zdarzyæ na prawach "root-a". Je¶li program musi mieæ dostêp do /etc/shadow i nie potrzebuje wiêcej praw "root-a", to lepiej uruchomiæ go z prawami grupy "shadow". Program xlock jest przyk³adem takiego programu. W przyk³adzie podanym ni¿ej, pppd-1.2.1d jest ju¿ uruchomiony z prawami "root-a", tak wiêc dodanie obs³ugi hase³ przes³anianych nie powinno zagroziæ bezpieczeñstwu. 88..11.. PPlliikkii nnaagg³³óówwkkoowwee.. Pliki te powinny znajdowaæ siê w /usr/include/shadow. Powinien tam byæ tak¿e plik /usr/include/shadow.h, ale bêdzie to symboliczne do³aczenie do /usr/include/shadow/shadow.h. Aby dodaæ obs³ugê hase³ przes³anianych do programu, musisz do³±czyæ pliki nag³ówkowe: #include <shadow/shadow.h> #include <shadow/pwauth.h> Dobrym pomys³em by³oby u¿ycie dyrektyw kompilatora, aby skompilowaæ warunkowo kod z obs³ug± hase³ przes³anianych. (tak jak w przyk³adzie poni¿ej.) 88..22.. BBiibblliiootteekkaa lliibbsshhaaddooww..aa Biblioteka ta zosta³a zainstalowana w /usr/lib jak instalowa³e¶ pakiet _S_h_a_d_o_w _S_u_i_t_e. Kiedy kompilujesz obs³ugê przes³aniancyh hase³ w programie trzeba poinformowaæ "linker-a", aby do³±czy³ bibliotekê libshadow.a. Robi siê to tak: gcc program.c -o program -lshadow Chocia¿ jak zobaczymy w poni¿szym przyk³adzie, wiêkszo¶æ du¿ych programów u¿ywa plików Makefile i ma zwykle zmienn± LIBS=..., któr± siê modyfikuje. 88..33.. SSttrruukkttuurraa SShhaaddooww.. Biblioteka libshadow.a u¿ywa struktury spwd dla informacji, które otrzyma z pliku /etc/shadow. Oto definicja tej struktury wziêta z /usr/include/shadow/shadow.h: ______________________________________________________________________ struct spwd { char *sp_namp; /* identyfikator */ char *sp_pwdp; /* zakodowane has³o */ sptime sp_lstchg; /* data ostatniej zmiany */ sptime sp_min; /* minimalna ilo¶æ dni miêdzy zmianami */ sptime sp_max; /* maksymalna ilo¶æ dni miêdzy zmianami */ sptime sp_warn; /* ilo¶æ dni przed wyga¶niêciem has³a kiedy bêdzie wysy³ane ostrze¿enie */ sptime sp_inact; /* ilo¶æ dni, po jakiej wygasa has³o dopóki konto nie bêdzie zablokowane */ sptime sp_expire; /* ilo¶æ dni od 01.01.1970 dopóki konto nie wyga¶nie */ unsigned long sp_flag; /* zarezerwowane na przysz³o¶æ */ }; ______________________________________________________________________ Do pola sp_pwdp mo¿na dodatkowo wstawiæ nawzê programu: identyfikator:Npge08pfz4wuk;@/sbin/extra:9479:0:10000:::: Oznacza to, ¿e oprócz podania has³a bêdzie wykonany program /sbin/extra, który wykona dalsz± autentykacjê. Wywo³any program otrzyma identyfikator i prze³±cznik, który okre¶li dlaczego zosta³ wywo³any. Wiêcej informacji znajdziesz w /usr/include/shadow/pwauth.h i pwauth.c. Oznacza to, ¿e powinni¶my u¿yæ funkcji pwauth do przeprowadzenia poprawnej autentykacji, poniewa¿ zajmie siê ona tak¿e drug± autentykacj±. Jest to u¿yte w przyk³adzie poni¿ej. Autor pakietu _S_h_a_d_o_w _S_u_i_t_e twierdzi, ¿e odk±d wiêkszo¶æ programów tego nie stosuje, mo¿e to zostaæ usuniête lub zmienione w przysz³ych wersjach pakietu. 88..44.. FFuunnkkccjjee ppaakkiieettuu SShhaaddooww SSuuiittee.. Plik shadow.h zawiera deklaracje funkcji zawartych w bibliotece libshadow.a: ______________________________________________________________________ extern void setspent __P ((void)); extern void endspent __P ((void)); extern struct spwd *sgetspent __P ((__const char *__string)); extern struct spwd *fgetspent __P ((FILE *__fp)); extern struct spwd *getspent __P ((void)); extern struct spwd *getspnam __P ((__const char *__name)); extern int putspent __P ((__const struct spwd *__sp, FILE *__fp)); ______________________________________________________________________ Funkcja, któr± u¿yjemy w przyk³adzie to getspnam, która odczyta strukturê spwd dla podanego identyfikatora. 88..55.. PPrrzzyykk³³aadd.. Jest to przyk³ad na dodanie obs³ugi hase³ przes³anianych do programu, który tego potrzebuje, ale nie ma domy¶lnie w³±czonego. Przyk³ad ten u¿ywa serwera _P_o_i_n_t_-_t_o_-_P_o_i_n_t _P_r_o_t_o_c_o_l (pppd-1.2.1d), który ma tryb do autentykacji _P_A_P u¿ywaj±c identyfikatora i has³a z pliku /etc/passwd zamiast z plików _P_A_P czy _C_H_A_P. Nie musisz dodawaæ tego kodu do pppd-2.2.0, poniewa¿ on ju¿ tam jest. Ta w³a¶ciwo¶æ pppd przypuszczalnie nie jest czêsto u¿ywana, ale je¶li zainstalowa³e¶ _S_h_a_d_o_w _S_u_i_t_e, to serwer ten nie bêdzie dzia³a³ poniewa¿ has³a nie s± ju¿ zapisywane w /etc/passwd. Kod do autentykacji u¿ytkowników przez pppd-1.2.1d umieszczony jest w pliku /usr/src/pppd-1.2.1d/pppd/auth.c. Poni¿szy kod musi zostaæ dodany na pocz±tku pliku gdzie znajduj± siê wszystkie inne dyrektywy #include. Otoczyli¶my je dyrektywami warunkowymi (czyli skompiluj± siê tylko je¶li kompilujemy z w³aczon± obs³ug± hase³ przes³anianych). ______________________________________________________________________ #ifdef HAS_SHADOW #include <shadow.h> #include <shadow/pwauth.h> #endif ______________________________________________________________________ Nastêpnym krokiem jest modyfikacja w³a¶ciwiego kodu. Ci±gle modyfikujemy plik auth.c. Funkcja auth.c przed modyfikacj±: ______________________________________________________________________ /* * login - Check the user name and password against the system * password database, and login the user if OK. * * returns: * UPAP_AUTHNAK: Login failed. * UPAP_AUTHACK: Login succeeded. * In either case, msg points to an appropriate message. */ static int login(user, passwd, msg, msglen) char *user; char *passwd; char **msg; int *msglen; { struct passwd *pw; char *epasswd; char *tty; if ((pw = getpwnam(user)) == NULL) { return (UPAP_AUTHNAK); } /* * XXX If no passwd, let them login without one. */ if (pw->pw_passwd == '\0') { return (UPAP_AUTHACK); } epasswd = crypt(passwd, pw->pw_passwd); if (strcmp(epasswd, pw->pw_passwd)) { return (UPAP_AUTHNAK); } syslog(LOG_INFO, "user %s logged in", user); /* * Write a wtmp entry for this user. */ tty = strrchr(devname, '/'); if (tty == NULL) tty = devname; else tty++; logwtmp(tty, user, ""); /* Add wtmp login entry */ logged_in = TRUE; return (UPAP_AUTHACK); } ______________________________________________________________________ Has³o u¿ytkownika jest umieszczane w pw->pw_passwd, tak ¿e wszystko co musimy zrobiæ, to dodaæ funkcjê getspnam. Umie¶ci to has³o w spwd->sp_pwdp. Dodamy funkcjê pwauth, aby przeprowadziæ w³a¶ciw± autentykacjê. Przeprowadzi to tak¿e drug± autentykacjê je¶li plik shadow jest odpowiednio ustawiony. Funkcja auth.c po modyfikacji do obs³ugi hase³ przes³anianych: ______________________________________________________________________ /* * login - Check the user name and password against the system * password database, and login the user if OK. * * This function has been modified to support the Linux Shadow Password * Suite if USE_SHADOW is defined. * * returns: * UPAP_AUTHNAK: Login failed. * UPAP_AUTHACK: Login succeeded. * In either case, msg points to an appropriate message. */ static int login(user, passwd, msg, msglen) char *user; char *passwd; char **msg; int *msglen; { struct passwd *pw; char *epasswd; char *tty; #ifdef USE_SHADOW struct spwd *spwd; struct spwd *getspnam(); #endif if ((pw = getpwnam(user)) == NULL) { return (UPAP_AUTHNAK); } #ifdef USE_SHADOW spwd = getspnam(user); if (spwd) pw->pw_passwd = spwd->sp-pwdp; #endif /* * XXX If no passwd, let NOT them login without one. */ if (pw->pw_passwd == '\0') { return (UPAP_AUTHNAK); } #ifdef HAS_SHADOW if ((pw->pw_passwd && pw->pw_passwd[0] == '@' && pw_auth (pw->pw_passwd+1, pw->pw_name, PW_LOGIN, NULL)) || !valid (passwd, pw)) { return (UPAP_AUTHNAK); } #else epasswd = crypt(passwd, pw->pw_passwd); if (strcmp(epasswd, pw->pw_passwd)) { return (UPAP_AUTHNAK); } #endif syslog(LOG_INFO, "user %s logged in", user); /* * Write a wtmp entry for this user. */ tty = strrchr(devname, '/'); if (tty == NULL) tty = devname; else tty++; logwtmp(tty, user, ""); /* Add wtmp login entry */ logged_in = TRUE; return (UPAP_AUTHACK); } ______________________________________________________________________ Po dok³adnym prze¶ledzaniu tego kodu oka¿e siê, ¿e zrobili¶my jeszcze jedn± zmianê. Oryginalna wersja pozwala³a na dostêp (zwraca³a UPAP_AUTHACK) je¶li nniiee bbyy³³oo has³a w pliku /etc/passwd. Nie jest to dobrze, poniewa¿ popularnym u¿yciem tej w³a¶ciwo¶ci programu login jest u¿ywanie jednego konta, na dostêp do programu PPP, a potem sprawdzenie identyfikatora i has³a dostarczonych przez PAP z tymi w plikach /etc/passwd i /etc/shadow. Tak wiêc je¶li ustwiliby¶my oryginaln± wersjê, aby uruchamia³a pow³okê dla u¿ytkownika np. ppp, to ka¿dy móg³by uzyskaæ po³±czenie ppp przez podanie identyfikatora ppp i pustego has³a. Poprawili¶my to przez zwrócenie UPAP_AUTHNAK zamiast UPAP_AUTHACK je¶li pole z has³em jest puste. Interesuj±ce jest to, ¿e pppd-2.2.0 ma ten sam problem. Nastêpnie musimy zmodyfikowaæ plik Makefile tak, ¿eby pojawi³y siê dwie rzeczy: USE_SHADOW musi byæ zdefiniowane i libshadow.a musi byæ dodana w procesie "linkowania". Wyedytuj plik Makefile i dodaj: LIBS = -lshadow Potem znajd¼ liniê: COMPILE_FLAGS = -I.. -D_linux_=1 -DGIDSET_TYPE=gid_t i zmieñ j± na: COMPILE_FLAGS = -I.. -D_linux_=1 -DGIDSET_TYPE=gid_t -DUSE_SHADOW Teraz kompilacja i instalacja. 99.. CCzzêêssttoo zzaaddaawwaannee ppyyttaanniiaa.. _P_: Kiedy¶ kontrolowa³em terminale z jakich móg³ siê logowaæ "root" przez plik /etc/securettys, teraz nie wygl±da na to ¿eby dzia³a³o. Co jest grane ? _O_: Teraz kiedy pakiet _S_h_a_d_o_w _S_u_i_t_e jest zainstalowany plik /etc/securettys nie ma ¿adnego znaczenia. Terminale, z których mo¿e siê zalogowaæ "root" s± teraz podawane w pliku konfiguracyjnym /etc/login.defs. Pozycja w tym pliku mo¿e wskazywaæ na jaki¶ inny plik. _P_: Zainstalowa³em pakiet _S_h_a_d_o_w _S_u_i_t_e i nie mogê siê zalogowaæ, co przegapi³em ? _O_; Przypuszczalnie zainstalowa³e¶ pakiet i zapomnia³e¶ uruchomiæ program pwconv albo zapomnia³e¶ skopiowaæ /etc/npasswd na /etc/passwd oraz /etc/nshadow na /etc/shadow. Mo¿esz musisz tak¿e skopiowaæ login.defs do /etc. _P_: W sekcji o "xlock-u" by³o napisane, ¿eby zmieniæ grupê pliku /etc/shadow na shadow, ale ja nie mam takiej grupy - co mam zrobiæ ? _O_: Mo¿esz j± dodaæ. Po prostu wyedytuj plik /etc/group i dodaj liniê definiuj±c± grupê shadow. Musisz siê upewniæ, ¿e numer grupy nie jest u¿ywany przez ¿adn± inn± i musisz j± dodaæ przed pozycj± nogroup. Albo po prostu ustaw bit SUID dla programu xlock. _P_: Jest jaka¶ lista dyskusyjna dla Linux Shadow Password Suite ? _O_: Tak, ale jest ona dla rozwijaj±cych ten pakiet i dla testuj±cych wersje BETA. Mo¿esz siê zapisaæ na tê listê wysy³aj±c list na adres _s_h_a_d_o_w_-_l_i_s_t_-_r_e_q_u_e_s_t_@_n_e_p_t_u_n_e_._c_i_n_._n_e_t o tytule _s_u_b_s_c_r_i_b_e. Na li¶cie tej dyskutuje siê w³a¶ciwie o konkretnej serii shadow-YYMMSS. Powiniene¶ siê na ni± zapisaæ je¶li chcesz byæ w³±czony do dalszego rozwoju albo je¶li zainstalowa³e¶ sobie ten pakiet i chcesz wiedzieæ o nowszych wersjach. _P_: Zainstalowa³em _S_h_a_d_o_w _S_u_i_t_e, ale kiedy u¿ywam polecenia userdel dostajê: "userdel: cannot open shadow group file" - co zrobi³em ¼le ? _O_: Skompilowa³e¶ pakiet z w³±czon± opcj± SHADOWGRP, ale nie masz pliku /etc/gshadow. Musisz albo wyedytowaæ plik config.h i skompilowaæ ponownie pakiet albo stworzyæ plik /etc/gshadow. Zobacz sekcjê dotycz±c± przes³anianych grup. _P_: Zainstalowa³em _S_h_a_d_o_w _S_u_i_t_e, ale zakodowane has³a pojawiaj± siê w pliku /etc/passwd, co jest ? _O_: Albo w³aczy³e¶ opcjê AUTOSHADOW w pliku config.h, albo twoja biblioteka libc by³a skompilowana z opcj± SAHDOW_COMPAT. Musisz dowiedzieæ siê, które z tych dwóch jest prawdziwe i skompilowaæ ponownie. 1100.. PPrraawwaa aauuttoorrsskkiiee ppooddzziiêêkkoowwaanniiaa ii rróó¿¿nnee.. 1100..11.. PPrraawwaa aauuttoorrsskkiiee Linux Shadow Password HOWTO jest chronione prawami autorskimi Michaela H. Jacksona. Dozwolone jest dystrybuowanie kopii tego dokumentu zak³adaj±c, ¿e wzmianka o prawach autorskich i to pozwolenie jest zawarte we wszystkich kopiach. Dozwolone jest dytrybuowanie i kopiowanie modyfikowanych wersji tego dokumentu pod warunkami kopiowania z powy¿szego akapitu, zak³adaj±c, ¿e zawarta jest jasna informacja, ¿e jest to wersja modyfikowana tego dokumentu. Dozwolone jest kopiowanie i dystrybucja t³umaczeñ tego dokumentu na inne jêzyki pod warunkami dla wersji modyfikowanych wymienionymi wy¿ej. Dozwolone jest konwertowanie tego dokumentu na inne media pod warunkami podanymi powy¿ej dla wersji modyfikowanych zak³adaj±c, ¿e informacja o ¼ródle nowego dokumentu jest zawarta przez oczywisty odno¶nik do dokumentu ¼ród³owego w nowej wersji tego dokumentu. Je¶li wystêpuj± jakie¶ w±tpliow¶ci co do s³owa "oczywiste", w³a¶ciciel praw autorskich rezerwuje sobie prawo decyzji. 1100..22.. PPooddzziiêêkkoowwaanniiaa ii rróó¿¿nnee.. Przyk³ady kodów dla auth.c zosta³y wziête z pppd-1.2.1d i ppp-2.1.0e, Copyright (c) 1993 and The Australian National University oraz Copyright (c) 1989 Carnegie Mellon University. Podziêkowania dla Marka Micha³kiewicza <marekm@i17linuxb.ists.pwr.wroc.pl> za napisanie i opiekê nad pakietem _S_h_a_d_o_w _S_u_i_t_e dla Linux-a oraz za przejrzenie i komentarze do tego dokumentu. Podziêkowania dla Rona Tidda <rtidd@tscnet.com> za jego pomocne przejrzenie i testowanie. Podziêkowania dla wszystkich, którzy przys³ali do mnie komentarze, aby pomóc w ulepszeniu tego dokumentu. Je¶li masz jakie¶ uwagi lub sugestie to napisz do mnie proszê, z powa¿aniem Michael H. Jackson <mhjack@tscnet.com> 1100..33.. OOdd tt³³uummaacczzaa.. T³umaczenie to jest chronione prawami autorskimi © Bartosza Maruszewskiego. Dozwolone jest rozprowadzanie i dystrybucja na prawach takich samych jak dokument oryginalny. Je¶li znalaz³e¶ jakie¶ ra¿±ce b³êdy ortograficzne, gramatyczne, sk³adniowe, techniczne to pisz do mnie: B.Maruszewski@zsmeie.torun.pl Oficjaln± stron± t³umaczeñ HOWTO jest http://www.jtz.org.pl/ Aktualne wersje przet³umaczonych dokumentów znajduj± siê na tej¿e stronie. Dostêpne s± tak¿e poprzez anonimowe ftp pod adresem ftp.ippt.gov.pl w katalogu /pub/Linux/JTZ/. Przet³umaczone przeze mnie dokumenty znajduj± siê tak¿e na mojej stronie WWW. <http://www.zsmeie.torun.pl/~bart/tlumaczenie.html> S± tam te¿ odwo³ania do Polskiej Strony T³umaczeniowej. Kontakt z nasz± grup±, grup± t³umaczy mo¿esz uzyskaæ poprzez listê dyskusyjn± jtz@ippt.gov.pl. Je¶li chcesz sie na ni± zapisaæ, to wy¶lij list o tre¶ci subscribe jtz Imiê Nazwisko na adres listproc@ippt.gov.pl Zmiany w tym dokumencie wprowadzone przez t³umacza to: · - "chmod 700 /etc/login/defs" na "chmod 600 /etc/login.defs" plik ten nie musi byæ wykonywalny, · - "cp passwd ~passwd" na "cp passwd ~/passwd" - ewidentna literówka autora · - "chmod 600 ~passwd" na "chmod 600 ~/passwd" - to samo · - przy zmianie grupy pliku /etc/shadow dodane "cd /etc" · - oraz polskie serwery WWW i ftp.