  Przesanianie hase (Shadow Password)
  Autor: Michael H. Jackson, mhjack@tscnet.com
  v1.3, 3 Kwietnia 1996
  WWeerrssjjaa ppoollsskkaa:: BBaarrttoosszz MMaarruusszzeewwsskkii
  BB..MMaarruusszzeewwsskkii@@zzssmmeeiiee..ttoorruunn..ppll
  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. Omwione zostao tutaj take zdobywanie i
  (ponowna) instalacja oprogramowania oraz demonw sieciowych, ktre
  potrzebuj dostpu do hase uytkownika. Oprogramowanie to nie jest
  waciw czci pakietu _S_h_a_d_o_w _S_u_i_t_e, ale bd one musiay zosta
  przekompilowane, aby mc korzysta z hase. Jest tutaj take zawarty
  przykad dla programistw, jak dodawa obsug przesanianych hase w
  swoich programach.  Pod koniec dokumentu zawarte zostay odpowiedzi na
  czsto zadawane pytania.  Dokument ten zosta napisany w standardzie
  ISO-8859-2.  Orygina mona 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 przesania plik passwd ?

  2.1.    Czemu moesz nie chcie przesania swojego pliku z hasami ?

  2.2.    Format pliku /etc/passwd.

  2.3.    Format pliku przesaniajcego.

  2.4.    Przegld 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 programw.

  4.1.    Rozpakowywanie archiww.

  4.2.    Konfiguracja w pliku config.h

  4.3.    Kopie zapasowe twoich oryginalnych programw.

  4.4.    Polecenie make

  5.      Instalacja

  5.1.    Zaopatrz si w dyskietk startow w razie gdyby co popsu.

  5.2.    Usuwanie zduplikowanych stron podrcznika systemowego.

  5.3.    Polecenie make install

  5.4.    Polecenie pwconv

  5.5.    Zmiany nazw plikw npasswd i nshadow

  6.      Inne programy, ktre moe musisz uaktualni albo "zaata".

  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 Protokou Point-to-Point)

  7.      Wprowadzanie pakietu Shadow Suite do uycia.

  7.1.    Dodawanie, Modyfikacja i usuwanie uytkownikw.

  7.1.1.  useradd.

  7.1.2.  usermod.

  7.1.3.  userdel.

  7.2.    Polecenie passwd i "termin wanoci" hasa.

  7.3.    Plik login.defs

  7.4.    Hasa dla grup.

  7.5.    Programy do sprawdzania poprawnoci.

  7.5.1.  pwck

  7.5.2.  grpck

  7.6.    Hasa przez telefon. (Dial-up)

  8.      Obsuga przesanianych hase w programach w C.

  8.1.    Pliki nagwkowe.

  8.2.    Biblioteka libshadow.a

  8.3.    Struktura Shadow.

  8.4.    Funkcje pakietu Shadow Suite.

  8.5.    Przykad.

  9.      Czsto zadawane pytania.

  10.     Prawa autorskie podzikowania i rne.

  10.1.   Prawa autorskie

  10.2.   Podzikowania i rne.

  10.3.   Od tumacza.
  ______________________________________________________________________

  11..  WWpprroowwaaddzzeenniiee..

  Jest to dokument z serii HOWTO (czyli Jak To Zrobi). Opisuje on jak i
  dlaczego instalowa obsug "shadow password" na swoim Linux-ie.
  Zawarte jest take kilka przykadw na uywanie pewnych waciwoci
  pakietu _S_h_a_d_o_w _S_u_i_t_e.

  Podczas instalacji pakietu oraz uywania jego narzdzi musisz by
  zalogowany jako _"_r_o_o_t_". Podczas instalacji bdziesz 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.

  11..11..  ZZmmiiaannyy ww ssttoossuunnkkuu ddoo ppoopprrzzeeddnniieejj wweerrssjjii..

  Dodane sekcje:
     Dodaem sekcj na temat dlaczego mgby niechcie instalowa
     pakietu Shadow Suite.
     Dodaem sekcj jak uaktualni xdm-a.
     Dodaem sekcj jak zmusi do dziaania specjalne waciwoci pakietu
     Shadow Suite.
     Dodaem sekcj zawierajc czsto zadawane pytania.

  Poprawki/Uaktualnienia:
     Poprawiem odwoania html do sunsite-a.
     Poprawiem sekcj na temat wu-ftpd, aby odzwierciedlaa dodawanie
     -lshadow do pliku Makefile.
     Poprawiem kilka literwek.
     Zmieniem sekcj na temat wu-ftpd, aby obsugiwa ELF.
     Uaktualniem cay dokument, aby odzwierciedla problemy bezpieczestwa
     w rnych programach.
     Dodaem rekomendacj pakietu Linux Shadow Suite napisanego
     przez Marka Michakiewicza

  11..22..  NNoowwee wweerrssjjee tteeggoo ddookkuummeennttuu..

  Najnowsz wersj oryginau tego dokumentu mona cign 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>. Mona te
  bezporednio od autora <mailto:mhjack@tscnet.com>. Autor bdzie te
  wysya nowe wersje na grup dyskusyjn comp.os.linux.answers

  Dokument ten jest take rozprowadzany wraz z dystrybucj pakietu
  Shadow-YYDDMM.

  Na temat nowych wersji tumaczenia zobacz sekcj ``Od tumacza''.

  11..33..  KKoommeennttaarrzzee..

  Prosz wszelkie komentarze, uaktualnienia czy sugestie wysya do mnie
  <mailto:mhjack@tscnet.com>. Im szybciej otrzymam poczt tym szybciej
  mog poprawi ten dokument. Jeli masz jakie uwagi na jego temat, to
  wylij je bezporednio do mnie, poniewa bardzo rzadko odwiedzam grupy
  dyskusyjne.

  22..  PPoo ccoo pprrzzeessaanniiaa pplliikk ppaasssswwdd ??

  W chwili obecnej wikszo dystrybucji Linux-a nie instaluje domylnie
  pakietu Shadow Suite. Dotyczy to Slackware 2.3, Slackware 3.0 i innych
  popularnych dystrybucji. Jednym z powodw tego jest to, e jeli
  zapacono jak kwot za Shadow Suite to prawa co do redystrybucji nie
  byy do koca jasne. Linux uywa licencji GNU, ktra pozwala na
  umieszczanie go w dowolnych pakietach (jak np. dystrybucje CD-ROM) i
  pobieranie za nie opaty.

  Obecny opiekun pakietu Shadow Suite, Marek Michakiewicz
  <mailto:marekm@ists.pwr.wroc.pl> otrzyma rda oryginau na licencji
  w stylu BSD, ktra pozwala na dystrybucj.  Teraz, kiedy ju sprawy
  praw kopiowania s rozwizane, spodziewane jest, e przysze
  dystrybucje bd zawiera domylnie przesanianie hase. Jednak do
  tego czasu, bdziesz musia je samemu instalowa.

  Jeli instalowae swoj dystrybucj z CD-ROM-u, to pomimo, e
  dystrybucja nie zainstalowaa Shadow Suite niektre pliki, ktrych
  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 dostpne poprzez anonimowane ftp oraz
  WWW.

  W Linux-ie bez zainstalowanego pakietu Shadow Suite informacje o
  uytkowniku wraz z hasem trzymane s w pliku /etc/passwd.  Haso
  znajduje si tam w formie zakodowanej (encrypted). Jednak jeli
  spytasz jakiego eksperta od kryptografii, to powie ci on/ona, e
  haso jest w postaci "encoded", a nie "encrypted" poniewa uywajc
  funkcji crypt(3), tekstowi jest przypisywany acuch pusty a haso
  jest kluczem. Dlatego, od tego momentu bd uywa okrelenia
  "encoded".

  Algorytm uywany do kodowania hasa jest technicznie okrelany jako
  algorytm dziaajcy w jedn stron. Jest to algorytm, ktry jest atwy
  do zastosowania w jedn stron, ale bardzo trudny do zamania. Wicej
  na ten temat znajdziesz w sekcji ``2.4'' albo na stronie podrcznika
  systemowego dotyczcej funkcji crypt(3).

  Kiedy uytkownik wybiera haso, albo jest mu ono przydzielone, jest
  ono kodowane losowo generowan wartoci zwan salt (sl). Oznacza to,
  e kade haso moe zosta zakodowane na 4096 sposobw. Warto salt
  jest potem zapisywana razem z zakodowanym hasem.

  Kiedy uytkownik si wlogowuje i podaje haso, najpierw pobierana jest
  warto salt z zakodowanego hasa. Nastpnie pobrane haso zostaje
  zakodowane pobran wartoci, i porwnane z zapisanym zakodowanym
  hasem. Jeli acuchy te s identyczne, to uytkownik zostaje
  "wpuszczony" do systemu. Jest bardzo trudno (ale nie jest to
  niemoliwe) wzi losowo zakodowane haso i otrzyma haso
  rozkodowane. Chocia, w kadym systemie z wiksz liczb uytkownikw,
  przynajmniej kilka hase bdzie zwykymi sowami albo jak wariacj
  zwykych sw.

  Wamywacze widz o tym wszystkim i po prostu koduj sownik ze
  sowami i popularnymi hasami wszytkimi moliwymi wartociami salt.
  Potem porwnaj wyniki z zawartoci twojego pliku /etc/passwd. Jak
  znajd jaki identyczny acuch, to maj haso na nastpne konto.
  Nazywane jest to atakiem sownikowym i jest to jeden z
  najpopularniejszych sposobw na pozyskiwanie dostpu do systemu przez
  osoby nieuprawnione.

  Jeli si nad tym zastanowisz, to zobaczysz, e 8-znakowe haso moe
  zosta zakodowane na 4096 * 13 sposobw. Tak wic sownik skadajcy
  si powiedzmy z 400.000 popularnych sw, nazw, imion, hase i ich
  prostych wariacji zmieciby si z atwoci na dysku o pojemnoci
  4GB. Wamywacz musi go tylko posortowa i sprawdzi czy ktry z
  acuchw nie jest hasem. Dysk o pojemnoci 4GB mona kupi za ok.
  1000 dolarw, tak wic mieci si to w moliwociach wikszoci
  wamywaczy systemowych.

  Jeli wamywacz zdobdzie twj plik /etc/passwd, to musi on zakodowa
  swj sownik kluczem, ktry znajduje si w tym pliku. Metoda ta moe
  by wykorzystana przez przecitnego nastolatka z kilkoma megabajtami
  na dysku i komputerem klasy 486.

  Nawet bez duej iloci wolnego miejsca na dysku, narzdzia takie jak
  crack(1) mog zwykle zama przynajmniej kilka hase z systemu z
  dostatecznie du iloci uytkownikw (zakadajc, e uytkownicy
  maj moliwo samemu wybiera sobie hasa).

  Plik /etc/passwd zawiera take takie informacje jak ID uytkownika i
  ID grupy, ktre s uywane przez wikszo programw. Dlatego plik
  /etc/passwd mmuussii pozosta odczytywalny dla kadego. Jeli chciae
  wanie zmieni prawa dostpu do pliku /etc/passwd tak, eby nikt nie
  mg go czyta (oprcz "root-a"), to pierwszym symptomem jaki by
  zauway, to to, e przy wydaniu polecenia ls -l pojawiyby si numery
  zamiast nazw uytkownikw.

  Pakiet Shadow Suite rozwizuje ten problem poprzez umieszczenie hase
  w innym pliku (z reguy jest to /etc/shadow). Plik /etc/shadow ma tak
  ustawione prawa dostpu, e nie moe go czyta nikt, oprcz "root-a".
  Niektre programy jak np. xlock, nie musz mie moliwoci zmiany
  hase, ale tylko ich odczytu. Programy te mog albo by uruchamiane z
  prawem "suid root", albo moesz doda grup shadow, ktra miaaby
  tylko prawo odczytu pliku /etc/shadow. Program ten moe wtedy nalee
  do grupy "shadow" i by uruchamiany z prawem "sgid".

  Przenoszc zakodowane hasa do innego pliku, efektywnie zabraniamy
  wamywaczom dostpu do nich, co uniemoliwia ataki sownikowe.

  Dodatkowo pakiet Shadow Suite posiada wiele innych zalet:

    Plik konfiguracyjny, w ktrym mona ustawic wartoci domylne
     podczas logowania (/etc/login.defs)

    Narzdzia do dodawania, modyfikacji i usuwania kont i grup.

    Ustalanie "daty wanoci" konta i jego wygasanie (expiration).

    Przesanianie hase dla grup. (opcjonalnie)

    Hasa o podwjnej dugoci (16 znakw) [NIE ZALECANE]

    Lepsza kontrola nad wybieraniem hase przez uytkownikw.

    Hasa przez telefon.

    Programy do dodatkowej autentykacji [NIE ZALECANE]

  Instalacja pakietu Shadow Suite przyczynia si do zwikszenia
  bezpieczestwa sieci opartej na Linux-ie, ale pozostaje jeszcze wiele
  innych rzeczy do zrobienia, aby zwikszy bezpieczestwo takiej sieci.
  Z czasem pojawi si seria HOWTO powicona bezpieczestwu.

  Na stronie powiconej bezpieczestwu w Linux-ie
  <http://bach.cis.temple.edu/linux/linux-security/> zawarte s rne
  informacje na ten temat jak rwnie ostrzeenia o znanych dziurach w
  systemie.

  22..11..  CCzzeemmuu mmooeesszz nniiee cchhcciiee pprrzzeessaanniiaa sswwoojjeeggoo pplliikkuu zz hhaassaammii ??

  Jest kilka okolicznoci i konfiguracji, w ktrych instalacja pakietu
  Shadow Suite nniiee bbyyaabbyy dobrym pomysem:

    Maszyna nie zawiera kont uytkownikw.

    Twoja maszyna jest w sieci LAN i uywa NIS (Network Information
     Services), aby obsugiwa nazwy uytkownikw i hasa na innych
     maszynach w tej samej sieci. (Waciwie mogoby to by zrobione,
     ale wykracza poza ramy tego dokumentu i nie zwikszyoby
     bezpieczestwa w znacznym stopniu.)

    Twoja maszyna jest uywana przez serwery terminali, aby weryfikowa
     uytkownikw poprzez NFS (Network File System), NIS albo jak inn
     metod.

    Na twojej maszynie znajduje si inne oprogramowanie, ktre
     autentykuje uytkownikw, a nie ma wersji tego oprogramowania dla
     shadow i nie masz rde.

  22..22..  FFoorrmmaatt pplliikkuu //eettcc//ppaasssswwdd..

  Nieprzesonity plik /etc/passwd ma nastpujcy format:

  identyfikator:haso:UID:GID:imie_nazw:katalog:powoka

  Gdzie:

     iiddeennttyyffiikkaattoorr
        Nazwa (login) uytkownika

     hhaassoo
        Zakodowane haso

     UUIIDD
        Numer uytkownika

     GGIIDD
        Numer domylnej grupy dla uytkownika

     iimmiiee__nnaazzww
        Imi i nazwisko uytkownika - Waciwie 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 podrcznika systemowego nazywaj to pole polem
        komentarza.

     kkaattaalloogg
        Katalog domowy uytkownika (pena cieka)

     ppoowwookkaa
        Powoka dla danego uytkownika (pena cieka)

  Na przykad:

  login:Nkjg97jh7yff8:503:100:Imi Nazwisko:/home/login:/bin/bash

  Gdzie Nk jest wartoci salt a jg97jh7yff8 jest zakodowanym hasem.
  Zakodowane haso z kluczem mogoby rwnie dobrze wyglda tak:
  ghHFgj75fR8iP a te dwa acuchy to dokanie te same hasa. Jest 4096
  moliwoci zakodowania pojedynczego hasa. {Przykadowym hasem 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 wypenia miejsce
  hasa. Format pliku /etc/passwd si nie zmieni, zmienio si tylko
  miejsce przechowywania zakodowanego hasa. Oznacza to, e kady
  program, ktry tylko czyta plik /etc/passwd,a nie zapisuje w nim
  hasa, bdzie nadal dziaa poprawnie.

  Hasa znajduj si obecnie w pliku /etc/shadow. (jest to domylna
  nazwa)

  22..33..  FFoorrmmaatt pplliikkuu pprrzzeessaanniiaajjcceeggoo..

  Plik /etc/shadow zawiera nastpujce informacje:

  login:haso:ostatnio_1970:moe:musi:ostrz:dni:dni_1970:zarez

  Gdzie:

     llooggiinn
        patrz /etc/passwd

     hhaassoo
        Zakodowane haso

     oossttaattnniioo__11997700
        Ilo dni od 1 Stycznia 1970, kiedy haso byo ostatnio
        modyfikowane

     mmooee
        Ilo dni w przecigu, ktrych haso moe by zmienione
     mmuussii
        Ilo dni, po ktrej haso musi zosta zmienione

     oossttrrzz
        Ilo dni przed wyganiciem hasa od jakiej naley zacz
        informowa uytkownika o wyganiciu hasa.

     ddnnii
        Ilo dni, po ktrej haso wygasa i konto jest blokowane

     ddnnii__11997700
        Ilo dni od 1 Stycznia 1970, po ktrej konto jest blokowane

     zzaarreezz
        Pole zarezerwowane

  Poprzedni przykad mg wic wyglda tak:

  login:Nkjg97jh7yff8:9479:0:10000::::

  22..44..  PPrrzzeegglldd ffuunnkkccjjii ccrryypptt((33))..

  Ze strony podrcznika systemowego "man":

  "crypt jest funkcj kodujc haso. Oparta jest na algorytmie DES
  (Data Encryption Standard) z dozwolonymi wariacjami (midzy innymi),
  aby zniechci do sprztowych rozwiza poszukiwania klucza.

  Kluczem jest podane przez uytkownika haso. [Zakodowany acuch jest
  wartociami NULL]

  Salt jest acuchem 2-znakowym wybranym ze zbioru [a-zA-Z0-9]. auch
  ten jest uyty po to, aby zaburzy algorytm w jeden z 4096 sposobw.

  Biorc 7 najmniej znaczcych bitw kadego znaku z klucza otrzymujemy
  56-bitowy klucz. Ten 56-bitowy klucz jest uywany, do powtrnego
  kodowania staego acucha (zwykle s to znaki NULL). Zwrcona warto
  wskazuje na zakodowane haso - seri 13 drukowalnych znakw ASCII (dwa
  pierwsze znaki reprezentuj warto salt). Warto zwracana wskazuje
  na stae dane, ktrych zawarto jest zmieniana przy kadym wywoaniu.

  UUwwaaggaa:: Liczba moliwych wartoci klucza to 2^56 = 7,2E16 (okoo 72
  biliardw). Wyczerpujce poszukiwania tego klucza ss mmoolliiwwee przy
  wykorzystaniu wielu rwnolegle wsppracujcych komputerw.
  Oprogramowanie, takie jak crack(1), jest dostpne i szuka ono takich
  kluczy, ktre z reguy uywane s przez ludzi. Dlatego wanie przy
  wybieraniu hasa powinno si unika przynajmniej zwykych sw. Zaleca
  si, uywanie programu passwd(1), ktre podczas zmiany hasa sprawdza
  czy nowe haso nie jest przesadnie proste.

  Algorytm DES ma w sobie pewne kruczki, ktre czyni uycie interfejsu
  crypt(3) bezuytecznym w przypadku innym ni autentykacja hase. Jeli
  masz zamiar uywa interfejsu crypt(3) do kryptografii nie rb tego:
  zdobd dobr ksik na temat kodowania (encryption) i jedn z
  szeroko dostpnych bibliotek DES."

  Wikszo pakietw Shadow Suite zawiera kod zwikszajcy ilo znakw
  w hale do 16. Eksperci od DES-a s temu przeciwni, poniewa w takim
  przypadku kodowanie najpierw odbywa si dla lewej strony duszego
  hasa, a potem dla prawej strony. Z powodu tego jak dziaa crypt, moe
  to stworzy mniej bezpiecznie zakodowane haso ni wtedy, gdy uyte
  zostaoby haso krtsze. Dodatkowo, jest mao prawdopodobne, eby
  uytkownik by w stanie zapamita haso 16-znakowe.

  Trwaj w tej chwili prace, ktre maj na celu zastpienie
  dotychczasowego algorytmu autentykacji czym bardziej bezpiecznym oraz
  z obsug duszych hase (szczeglnie algorytmem MD5) oraz
  pozostawienie kompatybilnoci z metod wykorzystujc crypt.

  Jeli szukasz dobrej ksiki na temat kodowania polecam:

          "Applied Cryptography: Protocols, Algorithms, and Source Code in C"
          by Bruce Schneier <schneier@chinet.com>
          ISBN: 0-471-59756-2

  33..  ZZddoobbyywwaanniiee ppaakkiieettuu SShhaaddooww SSuuiittee..

  33..11..  HHiissttoorriiaa ppaakkiieettuu SShhaaddooww SSuuiittee ddllaa LLiinnuuxx--aa..

  NNIIEE UUYYWWAAJJ PPAAKKIIEETTWW WWYYMMIIEENNIIOONNYYCCHH WW TTEEJJ SSEEKKCCJJII,, SS WW NNIICCHH PPRROOBBLLEEMMYY ZZ
  BBEEZZPPIIEECCZZEESSTTWWEEMM..

  Orygina pakietu Shadow Suite zosta napisany przez John F. Haugh II.

  Jest kilka wersji, ktre byy uywane 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 take
     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>, ktre uczyniy
  instalacj o wiele atwiejsz, at zrobion przez Joseph R.M.
  Zbiciak, ktra eliminuje dziury w programie /bin/login zwizane z
  opcjami -f, -h oraz kilka innych at.

  Pakiet shadow-mk by pakietem ppoopprrzzeeddnniioo rekomendowanym, ale powinien
  zosta zamieniony z powodu pprroobblleemmww z bezpieczestwem zwizanych z
  programem login.

  W pakietach 3.3.1, 3.3.1-2 oraz shadow-mk s problemy zwizane z
  programem login. Bd ten to niesprawdzanie dugoci podawanego
  identyfikatora. Powoduje to przepenienie bufora, co z kolei powoduje
  zaamania (crashes) programu albo gorzej. Podobno to przepenienie
  bufora moe by wykorzystane przez kogo, kto posiada konto w systemie
  w poczeniu z bibliotekami dzielonymi, aby uzyska przywileje rroooott--aa.
  Nie bd opisywa jak dokadnie dziaa ten bd poniewa jest duo
  systemw Linux-owych, ktre s zaraone, ale systemy z zainstalowanymi
  tymi pakietami Shadow Suite oraz wikszo systemw w wersji przed-ELF
  bbeezz pakietu Shadow Suite s podatne na atak!

  Wicej informacji na ten temat znajdziesz na stronie powiconej
  bezpieczestwu w Linux-ie <http://bach.cis.temple.edu/linux/linux-
  security/>. (Shared Libraries and login Program Vulnerability)
  33..22..  GGddzziiee zznnaallee ppaakkiieett SShhaaddooww SSuuiittee..

  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 uywane jest nastpujce nazewnictwo:

  shadow-RRMMDD.tar.gz

  gdzie RRMMDD oznacza dat wprowadzenia pakietu w obieg.

  Wersja ta ostatecznie bdzie wersj 3.3.3, kiedy zakoczone zostan
  testy w wersji BETA, a obsugiwana jest przez Marka Michakiewicza
  <marekm@i17linuxb.ists.pwr.wroc.pl>.

  Dostpna jest jako shadow-current.tar.gz
  <ftp://i17linuxb.ists.pwr.wroc.pl/pub/linux/shadow/>.

  Dostpna jest take pod adresem ftp.icm.edu.pl
  <ftp://ftp.icm.edu.pl/pub/Linux/shadow/>.

  Powiniene uy najnowszej dostpnej wersji.

  NNIIEE powiniene uywa wersji ssttaarrsszzeejj ni shadow-960129 poniewa
  wystpuje tam opisany powyej problem z programem login.

  Jeli pisz o pakiecie Shadow Suite, to mam na myli ten wanie plik.
  Zakada si te, e tej wanie wersji uywasz.

  Aby napisa ten dokument uyem tej wanie wersji pakietu.

  Jeli wczeniej uywae pakietu shadow-mk, powiniene zaktualizowa
  go do tej wersji i ponownie skompilowa wszystko to, co pierwotnie
  przekompilowae,

  33..33..  CCoo jjeesstt zzaawwaarrttee ww ppaakkiieecciiee SShhaaddooww SSuuiittee..

  Pakiet ten zawiera zastpcze wersje dla programw:
  su, login, passwd, newgrp, chfn, chsh, id

  Pakiet ten zawiera take nowe programy: chage, newusers, dpasswd,
  gpasswd, useradd, userdel, usermod, groupadd, groupdel, groupmod,
  groups, pwck, grpck, lastlog, pwconv, pwunconv.

  Dodatkowo znajduje si tam take biblioteka libshadow.a przeznaczona
  do pisania i kompilowania programw, ktre potrzebuj dostpu do hase
  uytkownikw.

  Zawarte s take strony podrcznika systemowego do wszystkich
  programw.

  Znajduje si tam take plik konfiguracyjny dla programu login, ktry
  zostanie zainstalowany jako /etc/login.defs.

  44..  KKoommppiillaaccjjaa pprrooggrraammww..

  44..11..  RRoozzppaakkoowwyywwaanniiee aarrcchhiiwwww..

  Pierwszym krokiem po cigniciu programu jest rozpakowanie go. Pakiet
  jest w formie starowanej i skompresowany programem gzip, tak wic
  najpierw przenie go do /usr/src, a potem napisz:

  tar -xzvf shadow-current.tar.gz

  Powstanie katalog /usr/src/shadow-RRMMDD, w ktrym znajd si rda
  pakietu.

  44..22..  KKoonnffiigguurraaccjjaa ww pplliikkuu ccoonnffiigg..hh

  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
  niektrych opcji konfiguracyjnych. Jeli uywasz _z_a_l_e_c_a_n_e_g_o pakietu,
  to polecam wyczenie na pocztek przesanianie hase grup.

  Domylnie opcja ta jest wczona. Aby to wyczy, wyedytuj plik
  config.h i zmie #define SHADOWGRP na #undef SHADOWGRP. Na pocztek
  proponuje to wyaczy, a pniej jak bdziesz chcia hase dla grup i
  administratorw grup, to moesz przekompilowa pakiet. Jeli zostawisz
  t opcj wczon mmuussiisszz stworzy plik /etc/gshadow.

  Wczanie opcji pozwalajcej na dusze hasa nniiee jest zalecane -
  patrz wyej.

  Opcja AUTOSHADOW zostaa zaprojektowana, aby umoliwi dziaanie
  programom, ktre ignoruj przesanianie hase. Teoretycznie brzmi to
  dobrze, ale niestety nie dziaa poprawnie. Jeli waczysz t opcj i
  program zostanie uruchomiony z przywilejami "root-a", moe on wywoa
  funkcj getpwnam() jako "root", a pniej zapisa zmienion pozycj
  spowrotem do pliku /etc/passwd (ii hhaassoo nniiee jjeesstt jjuu pprrzzeessoonniittee).

  Do takich programw zaliczaj si chfn i chsh. (Nie moesz obej tego
  przez zamian rzeczywistego uid z efektywnym uid przed wywoaniem
  funkcji getpwnam() poniewa root take moe uywa chfn i chsh.)

  To samo ostrzeenie jest suszne jeli kompilujesz bibliotek libc,
  ktra posiada opcj SHADOW_COMPAT, ktra robi to samo. NNiiee ppoowwiinnnnaa ona
  by uywana! Jeli zakodowane hasa zaczn si pojawia spowrotem w
  pliku /etc/passwd, to to wanie jest przyczyn.

  Jeli uywasz wczeniejszej wersji biblioteki ni 4.6.27, bdziesz
  musia zrobi troch wicej zmian w pliku config.h i Makefile.

  W pliku config.h zmie:

  #define HAVE_BASENAME

  na:

  #undef HAVE_BASENAME

  A nastpnie 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, ktry zawiera si w
  libc 4.6.27 i pniejszych.

  44..33..  KKooppiiee zzaappaassoowwee ttwwooiicchh oorryyggiinnaallnnyycchh pprrooggrraammww..

  Dobrym pomysem bdzie zrobienie kopii zapasowych programw, ktre
  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 moliwo wykonania tego poprzez program make,
  ale jest to w komentarzu w pliku Makefile, poniewa rne dystrybucje
  umieszczaj te programy w rnych miejscach. Mona to zrobi piszc:
  make save, ale najpierw trzeba skasowa znaki # z pliku Makefile od
  linii: save:

  Powiniene take zrobi kopi zapasow pliku /etc/passwd, ale bd
  ostrony, eby nie zmaza programu passwd w katalogu /etc.

  44..44..  PPoolleecceenniiee mmaakkee

  _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

  Moesz zobaczy ostrzeenie: rcsid defined but not used. Wszystko jest
  w porzdku, poniewa autor uywa wersji kontrolnej pakietu.

  55..  IInnssttaallaaccjjaa

  55..11..  ZZaaooppaattrrzz ssii ww ddyysskkiieettkk ssttaarrttooww ww rraazziiee ggddyybbyy ccoo ppooppssuu..

  Jeli co powanie pjdzie nie tak, byoby dobrze, gdyby mia
  dyskietk startow. Jeli masz dyskietki boot/root z czasw
  instalacji, to w porzdku, w innym przypadku przeczytaj Bootdisk-HOWTO
  <http://ftp.icm.edu.pl/pub/Linux/Documentation/HOWTO/Bootdisk-
  HOWTO.html>, ktre opisuje jak zrobi dyskietk startow.

  55..22..  UUssuuwwaanniiee zzdduupplliikkoowwaannyycchh ssttrroonn ppooddrrcczznniikkaa ssyysstteemmoowweeggoo..

  Powiniene take przenie strony podrcznika systemowego, ktre
  zostan zastpione. Nawet jeli jeste na tyle odwany, e instalujesz
  Shadow Suite bez kopii zapasowej, to i tak bdziesz chcia przenie
  stare strony podrcznika systemowego. Nowe strony normalnie nie
  usunyby starych, poniewa te drugie s przypuszczalnie
  skompresowane.

  Moesz uy takiej kombinacji polece: man -aW polecenie i locate
  polecenie, aby zlokalizowa strony, ktre maj by usunite czy
  przeniesione. Raczej atwiej zrobi to przed poleceniem make install.

  Jeli uywasz dystrybucji Slackware 3.0, to oto strony, ktre
  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, ktre take powinny zosta usunite/przeniesione.

  55..33..  PPoolleecceenniiee mmaakkee iinnssttaallll

  Jeste gotw, aby napisa (zrb to jako "root"):

  make install

  Zainstaluje to nowe programy i programy zastpcze oraz ustawi
  odpowiednie prawa dostpu do plikw. Zostan take zainstalowane
  strony podrcznika systemowego.

  S tu take instalowane pliki nagwkowe w odpowiednich miejscach w
  /usr/include/shadow.

  Jeli uywasz wersji BETA tego pakietu, to musisz rcznie skopiowa
  plik login.defs do katalogu /etc i upewni si, e ttyyllkkoo ""rroooott"" moe
  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 ktrych terminalli (tty)
  moe zalogowa si "root" oraz ustawiasz inne opcje bezpieczestwa
  (np. domylne wygasanie hase).

  55..44..  PPoolleecceenniiee ppwwccoonnvv

  Nastpnym krokiem jest polecenie pwconv. Musi ono take 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.

  Dostpny jest take program pwunconv jeli musisz zrobi normalny plik
  /etc/passwd z plikw /etc/passwd i /etc/shadow.

  55..55..  ZZmmiiaannyy nnaazzww pplliikkww nnppaasssswwdd ii nnsshhaaddooww

  Teraz, kiedy ju wykonae polecenie pwconv, stworzye dwa pliki -
  /etc/npasswd i /etc/nshadow. Ich nazwy musz zosta zmienione
  odpowiednio na /etc/passwd i /etc/shadow.  Chcemy take zrobi kopi
  oryginalnego pliku /etc/passwd i upewni si, e tylko "root" moe go
  czyta. Kopi zapasow umiecimy w katalogu domowym "root-a":

  cd /etc
  cp passwd ~/passwd
  chmod 600 ~/passwd
  mv npasswd passwd
  mv nshadow shadow

  Powiniene si take upewni, czy waciciel plikw i prawa dostpu s
  poprawne. Jeli masz zamiar uywa _X_W_i_n_d_o_w_s, to programy xlock i xdm
  musz mie moliwo odczytu pliku shadow, ale nie zapisu.

  S dwa sposoby na zrobienie tego. Moesz ustawi bit "SUID" dla
  programu xlock (chmod u+s xlock); xdm ma z reguy ten bit ustawiony.
  Albo moesz przydzieli plik /etc/shadow do grupy shadow, ale zanim to
  zrobisz, sprawd czy masz grup shadow w pliku /etc/group. Waciwie
  aden z uytkownikw systemu nie powinien by w tej grupie.

  cd /etc
  chown root.root passwd
  chown root.shadow shadow
  chmod 0644 passwd
  chmod 0640 shadow

  Twj system ma teraz przesonite hasa. Powiniene teraz przej na
  inny wirtualny terminal i sprawdzi czy moesz si zalogowa

  ZZrrbb ttoo tteerraazz -- nnaapprraawwdd !!

  Jeli nie moesz, to co jest nie tak ! Aby powrci do stanu sprzed
  instalacji _S_h_a_d_o_w _S_u_i_t_e zrb to:

  cd /etc
  cp ~/passwd passwd
  chmod 644 passwd

  Przywracasz w ten sposb stare pliki, ktre wczeniej zachowae, na
  ich waciwe miejsce.

  66..  IInnnnee pprrooggrraammyy,, kkttrree mmooee mmuussiisszz uuaakkttuuaallnnii aallbboo ""zzaaaattaa""..

  Pomimo, i pakiet _S_h_a_d_o_w _S_u_i_t_e posiada zastpcze programy dla
  wikszoci programw, ktre potrzebuj dostepu do hase, to prawie w
  kadym systemie s jeszcze dodatkowe programy, ktre potrzebuj
  dostpu do hase.

  Jeli masz dystrybucj _D_e_b_i_a_n (a nawet jeli nie masz), moesz znale
  rda programw, ktre 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 obsugiway przesonite
  hasa.

  Aby dowiedzie si jak zrobi obsug przesonitych hase w
  jakimkolwiek innym programie zobacz sekcj ``Obsuga przesanianych
  hase w programach w C''. (Programy te i tak musz by uruchomione z
  bitem "SUID" dla "root-a" albo grupy shadow, aby rzeczywicie mie
  dostp do hase.)

  66..11..  PPrrooggrraamm aadddduusseerr zz ddyyssttrryybbuuccjjii SSllaacckkwwaarree..

  Dystrybucja Slackware (i pewnie inne) zawiera interaktywny program
  sucy do dodawania nowych uytkownikw - /sbin/adduser.  Wersj tego
  programu obsugujc przesonite hasa mona pobra np. z
  ftp.icm.edu.pl z katalogu  /pub/Linux/sunsite/system/admin/accounts/.

  Ja zalecam uywanie programw, ktre 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 posugiwa
  zabiera troch czasu, ale opaca si to poniewa masz o wiele wiksz
  kontrol i maj one poprawne blokowanie plikw (file locking)
  /etc/passwd i /etc/shadow - adduser tego nie robi.

  Wicej informacji w nastpnej sekcji - ``Wprowadzanie pakietu Shadow
  Suite do uycia.''.

  Ale jeli 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

  66..22..  SSeerrwweerr wwuu__ffttppdd..

  Wraz z wikszoci dystrybucji Linux-a przychodzi serwer wu_ftpd.
  Jeli twoja dystrybucja nie instaluje domylnie pakietu _S_h_a_d_o_w _S_u_i_t_e,
  to twj serwer wu_ftpd nie bdzie skompilowany z obsug
  przesonitych hase. wu_ftpd jest odpalany z inetd/tcpd jako proces
  _"_r_o_o_t_-_a_". Jeli twj demon wu_ftpd jest star wersj, to bdziesz
  chcia j uaktualni tak czy inaczej poniewa stare wersje maj pewien
  bd, ktry kompromituje konto _"_r_o_o_t_". (Wicej informacji znajdziesz
  na Stronie Domowej Bezpieczestwa na Linuxie
  <http://bach.cis.temple.edu/linux/linux-security/Linux-Security-
  FAQ/Linux-wu.ftpd-2.4-Update.html>).

  Na szczcie musisz tylko zdoby rda tego programu i skompilowa go
  z wczon obsug "Shadow password".

  Jeli nie masz systemu ELF, to serwer wu_ftpd moesz 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 cigniesz te rda, 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 moesz uruchomi skrypt kompilujcy 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 uycie pliku konfiguracyjnego z obsug hase
  przesanianych dla Linux-a, skompilowanie i instalacj serwera.

  U siebie na Slackware 2.3 musiaem dodatkowo przed kompilacj zrobi
  co takiego:

  cd /usr/include/netinet
  ln -s in_systm.h in_system.h
  cd -

  Zgaszane byy problemy z kompilacj na systemie binarnym ELF, ale
  wersja BETA nastpnej wersji dziaa dobrze. Mona 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 cigniesz 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

  Nastpnie 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 ktrym
  twj serwer rzeczywicie si znajduje. Powiadomiono mnie, e niektre
  dystrybucje umieszczaj demony serwerw w innych miejscach, a wtedy
  wu_ftpd moe si znajdowa gdzie indziej.

  66..33..  SSttaannddaarrddoowwyy ffttppdd..

  Jeli masz u siebie standardowy serwer ftpd, zalecabym zmian na
  wu_ftpd. Poza znan dziur omwion wczeniej, wu_ftpd jest uznany za
  bardziej bezpieczny.

  Jeli nalegasz na standardowy, albo potrzebujesz obsugi _N_I_S, to na
  SUNSite Polska
  <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/system/network/file-
  transfer/> znajdziesz ftpd-shadow-nis.tgz.

  66..44..  ppoopp33dd ((PPoosstt OOffffiiccee PPrroottooccooll 33))

  Jeli potrzebujesz obsugi _P_o_s_t _O_f_f_i_c_e _P_r_o_t_o_c_o_l _3, bdziesz 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/> dostpne s
  dwie wersje:

    pop3d-1.00.4.linux.shadow.tar.gz

    pop3d+shadow+elf.tar.gz

  Obie s raczej proste do zainstalowania.

  66..55..  xxlloocckk

  Jeli zainstalujesz pakiet Shadow Suite i uruchomisz _X_W_i_n_d_o_w_s, a
  nastpnie zablokujesz (lock) ekran nie uaktualniajc programu xlock,
  bdziesz musia uy CTRL+ALT+Fx, aby przeczy si na wirtualn
  konsol tekstow (jeli masz jak), zalogowa si i zlikwidowa
  proces xlock (albo uy CTRL+ALT+BACKSPACE eby zamkn XWindows). Na
  szczcie uaktualnienie programu xlock jest do proste.

  Jeli masz XFree86 wersja 3.x.x, przypuszczalnie uywasz xlockmore
  (ktry jest wspaniaym "screensaver-em" w poaczeniu z "lock").
  Nastpujcy pakiet obsuguje przesonite hasa - xlockmore-3.5.tgz a
  dostpny jest z SUNSite Polska
  <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/X11/xutils/screensavers/>.
  Jeli masz starsz wersj zalecam uaktualnienie do tej.

  Oto "z grubsza" to, co musisz zrobi:

    cignij 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
     dostpu i wacicieli plikw

     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

  Twj xlock bdzie teraz dziaa poprawnie.

  66..66..  xxddmm

  xdm jest programem, ktry prezentuje ekran "logujcy" dla XWindows.
  Niektre systemy startuj ten program kiedy system ma si uruchomi w
  odpowiednim "runlevel-u" (zobacz /etc/inittab).

  Jeli zainstalowae przesaniane hasa, musisz uaktulani ten
  program. Na szczcie jest to do proste:

  xdm.tar.gz mona cign z SUNSite Polska
  <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/X11/xutils/>.

  cignij 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 wic nie musisz zmienia jego
  praw dostpu.

  66..77..  ssuuddoo

  Program sudo pozwala administratorowi na udostpnianie zwykym
  uytkownikom programw, ktre wymagaj uprawnie "root-a". Jest to
  poyteczne poniewa mona ogranicza dostp do konta "root" i
  jednoczenie pozwala uytkownikom np. montowa urzdzenia.

  sudo musi przeczyta haso poniewa weryfikuje uytkownika kiedy jest
  uruchamiane. sudo jest uruchamiane z bitem SUID "root" tak wic nie ma
  problemu z dostpem do pliku /etc/shadow.

  Program ten z obsug hase przesanianych dostpny jest na SUNSite
  Polska <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/system/admin> pod
  nazw sudo-1.2-shadow.tgz.

  UUwwaaggaa:: Podczas instalacji tego programu usunity zostanie plik
  /etc/sudoerrs i zastpiony domylnym przychodzcym razem z pakietem.
  Tak wic zrb sobie kopi zapasow jeli robie tam jakie zmiany.
  Albo moesz usun linijk kasujc ten plik z pliku Makefile.

  Obsuga przesanianych hase jest ju ustawiona w pakiecie, tak wic
  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

  66..88..  iimmaappdd ((EE--MMaaiill ppaakkiieett ppiinnee))..

  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 domylnym dla systemw Linux jest
  wczenie obsugi przesanianych hase. Ja jednak przekonaem si, e
  nie jest to prawda. Idc dalej, kombinacja skrypt tworzcy - Makefile
  bardzo utrudnia dodanie biblioteki libshadow.a podczas kompilacji,
  wic nie byem w stanie doda obsugi hase przesanianych do imapd.

  Jeli komu si to udao, to prosz o opis a ja umieszcz go w tym
  punkcie.

  66..99..  ppppppdd ((SSeerrwweerr PPrroottookkoouu PPooiinntt--ttoo--PPooiinntt))

  Serwer pppd moe zosta tak ustawiony, aby uywa rnych typw
  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 auchy hase
  z /etc/ppp/chap-secrets i/albo z /etc/ppp/pap-secrets. Jeli uywasz
  tego domylnego zachowania serwera pppd, to przeinstalowywanie go nie
  jest konieczne.

  pppd pozwala take na uycie parametrw _l_o_g_i_n_-_u (albo z wiersza
  polece, albo z pliku konfiguracyjnego, albo z pliku z opcjami). Jeli
  jest podana jaka opcja _l_o_g_i_n_-_u, to pppd uyje pliku /etc/passwd, eby
  zweryfikowa identyfikator i haso dla PAP. To oczywicie nie zadziaa
  odkd nasz plik z hasami jest przesaniany. Jeli uywasz
  pppd-1.2.1d, to bdziesz musia doda kod do obsugi hase
  przesanianych.

  Podany w dalszej czci przykad dodaje obsug dla tej wanie
  wersji.

  Wersja pppd-2.2.0 ma ju w sobie obsug przesanianych hase.

  77..  WWpprroowwaaddzzaanniiee ppaakkiieettuu SShhaaddooww SSuuiittee ddoo uuyycciiaa..

  Sekcja ta opisuje kilka rzeczy ktre bdziesz chcia wiedzie jak ju
  zainstalowae pakiet _S_h_a_d_o_w _S_u_i_t_e. Dalsze informacje zawarte s na
  stronach podrcznika systemowego na temat kadego polecenia.

  77..11..  DDooddaawwaanniiee,, MMooddyyffiikkaaccjjaa ii uussuuwwaanniiee uuyyttkkoowwnniikkww..

  Pakiet _S_h_a_d_o_w _S_u_i_t_e doda nastpujce polecenia do dodawania,
  modyfikacji i usuwania uytkownikw. S one obsugiwane z wiersza
  polece przez parametry (moge take zainstalowa program adduser).

  77..11..11..  uusseerraadddd..

  Polecenie useradd moe zosta uyte, aby doda uytkownika do systemu.
  Wykonujesz je take, eby zmieni domylne ustawienia.

  Pierwsz rzecz jak powiniene zrobi, to sprawdzi ustawienia
  domylne na twoim systemie i odpowiednio je zmieni:

  useradd -D

  ______________________________________________________________________
  GROUP=1
  HOME=/home
  INACTIVE=0
  EXPIRE=0
  SHELL=
  SKEL=/etc/skel
  ______________________________________________________________________

  Wartoci domylne to pewnie nie s te, ktre chcesz uywa, tak wic
  jeli zaczby dodawa uytkownikw teraz, to musiaby podawa
  informacje dla kadego uytkownika. Jednak moemy i powinnimy zmieni
  wartoci domylne:

    Niech domyln grup bdzie 100

    Niech hasa wygasaj po 60 dniach

    Niech konta nie bd blokowane po wyganiciu hasa

    Niech domyln powok bdzie /bin/bash

  Aby zrobi takie zmiany napisabym:

  useradd -D -g100 -e60 -f0 -s/bin/bash

  Teraz uruchomienie useradd -D pokae:

  ______________________________________________________________________
  GROUP=100
  HOME=/home
  INACTIVE=0
  EXPIRE=60
  SHELL=/bin/bash
  SKEL=/etc/skel
  ______________________________________________________________________

  W razie gdyby chcia wiedzie, to wartoci te s zapisywane w
  /etc/default/useradd.

  Teraz moesz uy polecenia useradd, aby doda uytkownikw do
  systemu. Na przykad, aby doda uytkownika fred uywajc wartoci
  domylnych napisaby:

  useradd -m -c "Fred Flintstone" fred

  Stworzy to nastpujc pozycj w /etc/passwd:

  fred:*:505:100:Fred Flinstone:/home/fred:/bin/bash

  oraz nastpujc 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 podalimy UID-u uyty zostanie nastpny wolny.

  Konto freda bdzie utworzone, ale nie bdzie on si mg zalogowa
  dopki go nie odblokujemy. Zrobimy to przez zmian hasa:

  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 bdzie:

  fred:J0C.WDR1amIt6:9559:0:60:0:0:0:0

  A fred bdzie mg si teraz zalogowa i korzysta z systemu.
  Najlepsze w uyciu programw, ktre przychodz razem z pakietem _S_h_a_d_o_w
  _S_u_i_t_e jest to, e wszelkie zmiany plikw /etc/passwd i /etc/shadow s
  wykonywane z tzw. blokowaniem. Ta wic jeli dodajesz uytkownika do
  systemu a inny uytkownik wanie sobie zmienia haso, to obie
  operacje zostan wykonane poprawnie.

  Powiniene uywa raczej dostarczonych programw ni edytowa rcznie
  pliki /etc/passwd i /etc/shadow. Jeli edytowae plik /etc/shadow i
  jaki uytkownik zmienia sobie w tym samym czasie haso, to po
  zapisaniu zmian dokonanych przez ciebie nowe haso uytkownika zginie.

  Oto may interaktywny skrypt, ktry dodaje nowego uytkownika uywajc
  useradd i passwd:

  ______________________________________________________________________
  #!/bin/bash
  #
  # /sbin/newuser - Skrypt dodajcy uytkownikw do systemu uywajcego
  #                 programw useradd z pakietu Shadow Suite i passwd.
  #
  # Napisany przez Mike'a Jacksona <mhjack@tscnet.com> jako przykad do
  # Shadow-Password-HOWTO. Pozwolenie na uywanie i modyfikacje wyranie dane.
  #
  # Monaby ten skrypt zmodyfikowa tak, eby pokazywa wartoci domylne
  # oraz pozwala na modyfikacj podobnie jak program adduser ze Slackware.
  # Monaby te sprawdza bdy, czy gupie wartoci.
  #
  #
  ##
  # Wartoci domylne dla polecenia useradd
  ##
  GROUP=100        # Domylna grupa
  HOME=/home       # Katalog domowy (/home/identyfikator)
  SKEL=/etc/skel   # Katalog szkieletowy
  INACTIVE=0       # Ilo dni, po ktrych wygasa haso.
  EXPIRE=60        # Ilo dni, przez ktr ma istnie haso
  SHELL=/bin/bash  # Domylna powoka (pena cieka)
  ##
  # Wartoci domylne dla polecenia passwd
  ##
  PASSMIN=0        # Ilo dni midzy ktr zmienia si haso
  PASSWARN=14      # Ilo dni przed wyganiciem hasa kiedy jest
  #                  wysyana wiadomo ostrzegajca.
  ##
  #            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 bdzie
  # prawie zawsze zawierao przynajmniej jedn spacj, a bez " polecenie
  # useradd "pomylaoby", e jest to nastpny parametr kiedy doszoby
  # do spacji.
  #
  /usr/sbin/useradd -c"$FULLNAME" -d$HOME/$USERNAME -e$EXPIRE \
          -f$INACTIVE -g$GROUP -m -k$SKEL -s$SHELL $USERNAME
  ##
  # Ustaw domylne wartoci dla hasa
  ##
  /bin/passwd -n $PASSMIN -w $PASSWARN $USERNAME >/dev/null 2>&1
  ##
  # Niech polecenie passwd zapyta poprawnie (dwa razy) o haso
  ##
  /bin/passwd $USERNAME
  ##
  # Poka, co zostao 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 ""
  ______________________________________________________________________

  Uycie skryptu do dodawania uytkownikw do systemu jest na prawd
  bardziej preferowane ni rczna edycja plikw /etc/passwd czy
  /etc/shadow czy te uywanie programu adduser ze Slackware. Moesz
  miao modyfikowa ten skrypt dla swoich potrzeb.

  Wicej informacji na temat useradd znajdziesz w podrczniku
  systemowym.

  77..11..22..  uusseerrmmoodd..

  Program usermod uywany jest do modyfikowania informacji na temat
  danego uytkownika. Opcje tego programu s podobne do opcji programu
  useradd.

  Powiedzmy, e chcesz zmieni powok dla freda; zrobiby to tak:

  usermod -s /bin/tcsh fred

  Teraz pozycja dotyczca freda w /etc/passwd zmieniaby si na:

  fred:*:505:100:Fred Flinstone:/home/fred:/bin/tcsh

  Zamy, e chcemy, eby konto freda wygaso 15.09.1997:

  usermod -e 09/15/97 fred <-- data w stylu angielskim-amerykaskim (mmddrr)

  Teraz pozycja dotyczca freda w /etc/shadow zmieniaby si na:

  fred:J0C.WDR1amIt6:9559:0:60:0:0:10119:0

  Wicej informacji na temat usermod znajdziesz w podrczniku
  systemowym.

  77..11..33..  uusseerrddeell..

  userdel robi dokadnie to czego si spodziewae - kasuje konto
  podanego uytkownika. Uycie jest proste:

  userdel -r <identyfikator>

  Opcja -r powoduje skasowanie wszystkich plikw z katalogu domowego
  uytkownika. Plikw zlokalizowanych w innym systemie plikw trzeba
  poszuka i skasowa je rcznie.

  Jeli chcesz tylko zablokowa dane konto, a nie skasowa to uyj
  polecenia passwd.

  77..22..  PPoolleecceenniiee ppaasssswwdd ii ""tteerrmmiinn wwaannooccii"" hhaassaa..

  Polecenie passwd uywane jest do zmiany hasa. Oprcz tego uywane
  jest przez "root-a" do:

    Blokowania i odblokowywania kont (-l i -u)

    Ustawiania maksymalnej iloci dni przez jak haso jest wane (-x)

    Ustawiania minimalnej iloci dni midzy zmianami hasa (-n)

    Ustawiania iloci dni, po ktrych wysyane jest ostrzeenie o
     wyganiciu hasa (-w)

    Ustawiania iloci dni, po ktrej haso wygasa przed zablokowaniem
     konta (-i)

    Pozwalania na przegldanie informacji o koncie w czytelniejszym
     formacie (-S)

  Na przykad, spjrzmy jeszcze raz na freda:

  passwd -S fred
  fred P 03/04/96 0 60 0 0

  Oznacza to, e haso freda jest wane, ostatnio byo zmieniane
  04.03.1996, moe by zmienione w kadej chwili, wygasa po 60 dniach,
  fred nie zostanie ostrzeony oraz konto nie zostanie zablokowane po
  wyganiciu hasa.

  Oznacza to po prostu tyle, e kiedy fred zaloguje si po wyganiciu
  hasa zostanie zaraz na pocztku poproszony o podanie nowego hasa.

  Jeli zdecydujemy si, e chcemy ostrzec freda na 14 dni przed
  wyganiciem jego hasa i zablokowa jego konto 14 dni po wyganiciu
  hasa trzebaby napisa tak:

  passwd -w14 -i14 fred

  Teraz dane o fredzie zmianiy si na:

  fred P 03/04/96 0 60 14 14

  Wicej informacji na temat passwd znajdziesz w podrczniku systemowym.

  77..33..  PPlliikk llooggiinn..ddeeffss

  Plik /etc/login jest plikiem konfiguracyjnym dla programu login oraz
  dla caego pakietu _S_h_a_d_o_w _S_u_i_t_e.

  /etc/login zawiera ustawienia od tego jak bd wyglda znaki zachty
  do tego jakie domylne wartoci bd dla wygasania hasa kiedy
  uytkownik 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, ktre mog by wczane i wyczane do okrelania
     iloci zalogowa.

    Zawiera wskazania na inne pliki konfiguracyjne.

    Zawiera domylne wartoci dla takich ustawie jak "termin wanoci"
     hasa.

  Z powyszej listy wynika, e jest to raczej wany plik i powiniene
  si upewni, e istnieje i e ustawienia s takie jak chciae.

  77..44..  HHaassaa ddllaa ggrruupp..

  Plik /etc/groups moe zawiera hasa, ktre pozwalaj uytkownikom
  doczy si do jakiej grupy. Funkcja ta jest wczona jeli
  zdefiniujesz sta SHADOWGRP w pliku /usr/src/shadow-YYMMDD/config.h .

  Jeli j zdefiniujesz i skompilujesz pakiet, musisz utworzy plik
  /etc/gshadow, eby trzyma tam hasa grup i informacje
  administracyjne.

  Do utworzenia pliku /etc/shadow uye programu pwconv; nie ma
  odpowiednika do utworzenia pliku /etc/gshadow, ale to nie ma znaczenia
  bo plik ten sam si sob zajmuje.

  Aby stworzy pocztkowy plik /etc/gshadow zrb tak:

  touch /etc/gshadow
  chown root.root /etc/gshadow
  chmod 700 /etc/gshadow

  Jak bdziesz tworzy nowe grupy, zostan one dodane do /etc/group i
  /etc/gshadow.

  Do modyfikacji grup su 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:czonek,czonek,...

  Gdzie:

     nnaazzwwaa__ggrruuppyy
        - chyba nie wymaga wyjaniania :)

     !!  - w tym miejscu normalnie byoby haso, ale teraz jest ono w
        gshadow

     GGIIDD
        - numer grupy

     cczzoonneekk
        - lista czonkw grupy.

  Format pliku /etc/gshadow jest taki:

  nazwa_grupy:haso:admin,admin,...:czonek,czonek,...

  Gdzie:

     nnaazzwwaa__ggrruuppyy
        - chyba nie wymaga wyjaniania :)

     hhaassoo
        - zakodowane haso grupy

     aaddmmiinn
        - lista administratorw grupy

     cczzoonneekk
        - lista czonkw grupy

  Polecenie gpasswd jest uywane tylko do dodawania i usuwania czonkw
  do/z grupy. "root" i kady z administratorw grupy moe usuwa i
  dodawa czonkw.

  Haso dla grupy moe by zmienione za pomoc polecenia passwd przez
  "root-a" i kadego z administratorw grupy.

  Chocia nie ma strony do podrcznika systemowego dla gpasswd, to
  zrozumienie opcji tego polecenia nie jest takie trudne jak ju
  rozumiesz jego format i koncept. gpasswd bez adnych parametrw poda
  opcje jakie przyjmuje.

  77..55..  PPrrooggrraammyy ddoo sspprraawwddzzaanniiaa ppoopprraawwnnooccii..

  77..55..11..  ppwwcckk

  Program pwck sprawdza poprawno plikw /etc/passwd i /etc/shadow.
  Sprawdzi kadego uytkownika czy ma:

    poprawn ilo pl,

    unikalny identyfikator,

    dobry UID i GID

    dobr grup domyln

    poprawny katalog domowy

    poprawn powok

  Ostrzee nas take jeli znajdzie konta bez hase.

  Uruchomienie tego programu po zainstalowaniu pakietu _S_h_a_d_o_w _S_u_i_t_e jest
  dobrym pomysem. Powinno sie go take uruchamia okresowo - co
  tydzie, co miesic. Jeli uyjesz opcji -r, to moesz uy programu
  cron, aby uruchamia pwck okresowo i dostawa raport poczt.

  77..55..22..  ggrrppcckk

  Program ten sprawdza poprawno plikw /etc/group i /etc/gshadow.
  Sprawdza:

    ilo pl,

    unikaln nazw grupy

    poprawno listy administratorw i czonkw.

  Ma take opcj -r do automatycznych raportw.

  77..66..  HHaassaa pprrzzeezz tteelleeffoonn.. ((DDiiaall--uupp))

  Hasa przez telefon s inn opcjonaln lini obrony dla systemw,
  ktre umoliwiaj dostp przez telefon. Jeli masz system z du
  iloi uytkownikw czcych si lokalnie albo poprzez sie, ale
  chcesz ograniczy kto moe sie poczy, to "hasa przez telefon" s
  dla ciebie. Aby waczy "hasa przez telefon" musisz wyedytowa plik
  /etc/login.defs i upewni si, e DIALUPS_CHECK_ENAB jest ustawione na
  yes.

  S dwa pliki, ktre zawieraj informacje o poczeniach przez telefon:
  /etc/dialups, ktry zawiera "tty" (jeden na lini bez "/dev/"). Jeli
  dany tty jest tam zawarty to poczenie jest sprawdzane; oraz
  /etc/d_passwd z pen ciek dostpu do powoki oraz opcjonalnym
  hasem.

  Jeli uytkownik zaloguje si na lini, ktra jest podana w
  /etc/diulups i jego powoka jest podana w /etc/d_passwd, to bdzie
  mg si zalogowa tylko po podaniu poprawnego hasa.

  Innym uytecznym celem "hase przez telefon" moe by ustawienie
  linii, ktra pozwala tylko na poczenia konkretnego rodzaju (np. PPP
  lub/i UUCP). Jeli uytkownik prbuje si poczy inaczej (np. list
  powok), to musi zna haso na t lini.

  Zanim bdziesz mg uywa tych waciwoci musisz stworzy te pliki.

  Polecenie dpasswd przypisuje hasa do konkretnych powok zawartych w
  pliku /etc/d_passwd. Wicej informacji znajdziesz na stronie
  podrcznika systemowego.

  88..  OObbssuuggaa pprrzzeessaanniiaannyycchh hhaassee ww pprrooggrraammaacchh ww CC..

  Dodawanie obsugi hase przesanianych do programw jest cakiem
  proste. Jedynym problemem jest to, e program musi zosta uruchomiony
  z prawami "root-a", aby mie dostp do pliku /etc/shadow.

  Tutaj pojawia si jeden wielki problem: podczas pisania takich
  programw naley si trzyma jak najcilej zasad bezpieczestwa. Na
  przykad jeli program posiada wyjcie do powoki, to nniiee mmooee si to
  zdarzy na prawach "root-a".

  Jeli program musi mie dostp do /etc/shadow i nie potrzebuje wicej
  praw "root-a", to lepiej uruchomi go z prawami grupy "shadow".
  Program xlock jest przykadem takiego programu.

  W przykadzie podanym niej, pppd-1.2.1d jest ju uruchomiony z
  prawami "root-a", tak wic dodanie obsugi hase przesanianych nie
  powinno zagrozi bezpieczestwu.

  88..11..  PPlliikkii nnaaggwwkkoowwee..

  Pliki te powinny znajdowa si w /usr/include/shadow.  Powinien tam
  by take plik /usr/include/shadow.h, ale bdzie to symboliczne
  doaczenie do /usr/include/shadow/shadow.h.

  Aby doda obsug hase przesanianych do programu, musisz doczy
  pliki nagwkowe:

  #include <shadow/shadow.h>
  #include <shadow/pwauth.h>

  Dobrym pomysem byoby uycie dyrektyw kompilatora, aby skompilowa
  warunkowo kod z obsug hase przesanianych. (tak jak w przykadzie
  poniej.)

  88..22..  BBiibblliiootteekkaa lliibbsshhaaddooww..aa

  Biblioteka ta zostaa zainstalowana w /usr/lib jak instalowae pakiet
  _S_h_a_d_o_w _S_u_i_t_e.

  Kiedy kompilujesz obsug przesaniancyh hase w programie trzeba
  poinformowa "linker-a", aby doczy bibliotek libshadow.a.

  Robi si to tak:

  gcc program.c -o program -lshadow

  Chocia jak zobaczymy w poniszym przykadzie, wikszo duych
  programw uywa plikw Makefile i ma zwykle zmienn LIBS=..., ktr
  si modyfikuje.

  88..33..  SSttrruukkttuurraa SShhaaddooww..

  Biblioteka libshadow.a uywa struktury spwd dla informacji, ktre
  otrzyma z pliku /etc/shadow. Oto definicja tej struktury wzita z
  /usr/include/shadow/shadow.h:

  ______________________________________________________________________
  struct spwd
  {
    char *sp_namp;                /* identyfikator */
    char *sp_pwdp;                /* zakodowane haso */
    sptime sp_lstchg;             /* data ostatniej zmiany */
    sptime sp_min;                /* minimalna ilo dni midzy zmianami */
    sptime sp_max;                /* maksymalna ilo dni midzy zmianami */
    sptime sp_warn;               /* ilo dni przed wyganiciem hasa
                                     kiedy bdzie wysyane ostrzeenie */
    sptime sp_inact;              /* ilo dni, po jakiej wygasa haso
                                     dopki konto nie bdzie zablokowane */
    sptime sp_expire;             /* ilo dni od 01.01.1970 dopki
                                     konto nie wyganie */
    unsigned long sp_flag;        /* zarezerwowane na przyszo */
  };
  ______________________________________________________________________

  Do pola sp_pwdp mona dodatkowo wstawi nawz programu:

  identyfikator:Npge08pfz4wuk;@/sbin/extra:9479:0:10000::::

  Oznacza to, e oprcz podania hasa bdzie wykonany program
  /sbin/extra, ktry wykona dalsz autentykacj. Wywoany program
  otrzyma identyfikator i przecznik, ktry okreli dlaczego zosta
  wywoany. Wicej informacji znajdziesz w /usr/include/shadow/pwauth.h
  i pwauth.c.

  Oznacza to, e powinnimy uy funkcji pwauth do przeprowadzenia
  poprawnej autentykacji, poniewa zajmie si ona take drug
  autentykacj. Jest to uyte w przykadzie poniej.

  Autor pakietu _S_h_a_d_o_w _S_u_i_t_e twierdzi, e odkd wikszo programw tego
  nie stosuje, moe to zosta usunite lub zmienione w przyszych
  wersjach pakietu.

  88..44..  FFuunnkkccjjee ppaakkiieettuu SShhaaddooww SSuuiittee..

  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, ktr uyjemy w przykadzie to getspnam, ktra odczyta
  struktur spwd dla podanego identyfikatora.

  88..55..  PPrrzzyykkaadd..

  Jest to przykad na dodanie obsugi hase przesanianych do programu,
  ktry tego potrzebuje, ale nie ma domylnie wczonego.

  Przykad ten uywa 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),
  ktry ma tryb do autentykacji _P_A_P uywajc identyfikatora i hasa z
  pliku /etc/passwd zamiast z plikw _P_A_P czy _C_H_A_P. Nie musisz dodawa
  tego kodu do pppd-2.2.0, poniewa on ju tam jest.

  Ta waciwo pppd przypuszczalnie nie jest czsto uywana, ale jeli
  zainstalowae _S_h_a_d_o_w _S_u_i_t_e, to serwer ten nie bdzie dziaa poniewa
  hasa nie s ju zapisywane w /etc/passwd.

  Kod do autentykacji uytkownikw przez pppd-1.2.1d umieszczony jest w
  pliku /usr/src/pppd-1.2.1d/pppd/auth.c.

  Poniszy kod musi zosta dodany na pocztku pliku gdzie znajduj si
  wszystkie inne dyrektywy #include. Otoczylimy je dyrektywami
  warunkowymi (czyli skompiluj si tylko jeli kompilujemy z waczon
  obsug hase przesanianych).

  ______________________________________________________________________
  #ifdef HAS_SHADOW
  #include <shadow.h>
  #include <shadow/pwauth.h>
  #endif
  ______________________________________________________________________

  Nastpnym krokiem jest modyfikacja waciwiego kodu. Cigle
  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);
  }
  ______________________________________________________________________

  Haso uytkownika jest umieszczane w pw->pw_passwd, tak e wszystko co
  musimy zrobi, to doda funkcj getspnam. Umieci to haso w
  spwd->sp_pwdp.

  Dodamy funkcj pwauth, aby przeprowadzi waciw autentykacj.
  Przeprowadzi to take drug autentykacj jeli plik shadow jest
  odpowiednio ustawiony.

  Funkcja auth.c po modyfikacji do obsugi hase przesanianych:

  ______________________________________________________________________
  /*
   * 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 dokadnym przeledzaniu tego kodu okae si, e zrobilimy jeszcze
  jedn zmian. Oryginalna wersja pozwalaa na dostp (zwracaa
  UPAP_AUTHACK) jeli nniiee bbyyoo hasa w pliku /etc/passwd. Nie jest to
  dobrze, poniewa popularnym uyciem tej waciwoci programu login
  jest uywanie jednego konta, na dostp do programu PPP, a potem
  sprawdzenie identyfikatora i hasa dostarczonych przez PAP z tymi w
  plikach /etc/passwd i /etc/shadow.

  Tak wic jeli ustwilibymy oryginaln wersj, aby uruchamiaa powok
  dla uytkownika np. ppp, to kady mgby uzyska poczenie ppp przez
  podanie identyfikatora ppp i pustego hasa.

  Poprawilimy to przez zwrcenie UPAP_AUTHNAK zamiast UPAP_AUTHACK
  jeli pole z hasem jest puste.

  Interesujce jest to, e pppd-2.2.0 ma ten sam problem.

  Nastpnie musimy zmodyfikowa plik Makefile tak, eby pojawiy 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.

  99..  CCzzssttoo zzaaddaawwaannee ppyyttaanniiaa..

  _P_: Kiedy kontrolowaem terminale z jakich mg si logowa "root"
  przez plik /etc/securettys, teraz nie wyglda na to eby dziaao. 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 ktrych moe
  si zalogowa "root" s teraz podawane w pliku konfiguracyjnym
  /etc/login.defs. Pozycja w tym pliku moe wskazywa na jaki inny
  plik.

  _P_: Zainstalowaem pakiet _S_h_a_d_o_w _S_u_i_t_e i nie mog si zalogowa, co
  przegapiem ?

  _O_; Przypuszczalnie zainstalowae pakiet i zapomniae uruchomi
  program pwconv albo zapomniae skopiowa /etc/npasswd na /etc/passwd
  oraz /etc/nshadow na /etc/shadow. Moesz musisz take skopiowa
  login.defs do /etc.

  _P_: W sekcji o "xlock-u" byo napisane, eby zmieni grup pliku
  /etc/shadow na shadow, ale ja nie mam takiej grupy - co mam zrobi ?

  _O_: Moesz j doda. Po prostu wyedytuj plik /etc/group i dodaj lini
  definiujc grup shadow. Musisz si upewni, e numer grupy nie jest
  uywany 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 rozwijajcych ten pakiet i dla testujcych
  wersje BETA. Moesz si zapisa na t list wysyajc 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 licie tej
  dyskutuje si waciwie o konkretnej serii shadow-YYMMSS. Powiniene
  si na ni zapisa jeli chcesz by wczony do dalszego rozwoju albo
  jeli zainstalowae sobie ten pakiet i chcesz wiedzie o nowszych
  wersjach.

  _P_: Zainstalowaem _S_h_a_d_o_w _S_u_i_t_e, ale kiedy uywam polecenia userdel
  dostaj: "userdel: cannot open shadow group file" - co zrobiem le ?

  _O_: Skompilowae pakiet z wczon 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
  dotyczc przesanianych grup.

  _P_: Zainstalowaem _S_h_a_d_o_w _S_u_i_t_e, ale zakodowane hasa pojawiaj si w
  pliku /etc/passwd, co jest ?

  _O_: Albo waczye opcj AUTOSHADOW w pliku config.h, albo twoja
  biblioteka libc bya skompilowana z opcj SAHDOW_COMPAT. Musisz
  dowiedzie si, ktre z tych dwch jest prawdziwe i skompilowa
  ponownie.

  1100..  PPrraawwaa aauuttoorrsskkiiee ppooddzziikkoowwaanniiaa ii rrnnee..

  1100..11..  PPrraawwaa aauuttoorrsskkiiee

  Linux Shadow Password HOWTO jest chronione prawami autorskimi Michaela
  H. Jacksona.

  Dozwolone jest dystrybuowanie kopii tego dokumentu zakadajc, 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 powyszego akapitu, zakadajc,
  e zawarta jest jasna informacja, e jest to wersja modyfikowana tego
  dokumentu.

  Dozwolone jest kopiowanie i dystrybucja tumacze tego dokumentu na
  inne jzyki pod warunkami dla wersji modyfikowanych wymienionymi
  wyej.

  Dozwolone jest konwertowanie tego dokumentu na inne media pod
  warunkami podanymi powyej dla wersji modyfikowanych zakadajc, e
  informacja o rdle nowego dokumentu jest zawarta przez oczywisty
  odnonik do dokumentu rdowego w nowej wersji tego dokumentu. Jeli
  wystpuj jakie wtpliowci co do sowa "oczywiste", waciciel praw
  autorskich rezerwuje sobie prawo decyzji.

  1100..22..  PPooddzziikkoowwaanniiaa ii rrnnee..

  Przykady kodw dla auth.c zostay wzite 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.

  Podzikowania dla Marka Michakiewicza
  <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.

  Podzikowania dla Rona Tidda <rtidd@tscnet.com> za jego pomocne
  przejrzenie i testowanie.

  Podzikowania dla wszystkich, ktrzy przysali do mnie komentarze, aby
  pomc w ulepszeniu tego dokumentu.

  Jeli masz jakie uwagi lub sugestie to napisz do mnie prosz,
  z powaaniem

  Michael H. Jackson <mhjack@tscnet.com>

  1100..33..  OOdd ttuummaacczzaa..

  Tumaczenie to jest chronione prawami autorskimi  Bartosza
  Maruszewskiego.  Dozwolone jest rozprowadzanie i dystrybucja na
  prawach takich samych jak dokument oryginalny.

  Jeli znalaze jakie race bdy ortograficzne, gramatyczne,
  skadniowe, techniczne to pisz do mnie:

  B.Maruszewski@zsmeie.torun.pl

  Oficjaln stron tumacze HOWTO jest http://www.jtz.org.pl/

  Aktualne wersje przetumaczonych dokumentw znajduj si na teje
  stronie. Dostpne s take poprzez anonimowe ftp pod adresem
  ftp.ippt.gov.pl w katalogu /pub/Linux/JTZ/.

  Przetumaczone przeze mnie dokumenty znajduj si take na mojej
  stronie WWW. <http://www.zsmeie.torun.pl/~bart/tlumaczenie.html> S
  tam te odwoania do Polskiej Strony Tumaczeniowej.

  Kontakt z nasz grup, grup tumaczy moesz uzyska poprzez list
  dyskusyjn jtz@ippt.gov.pl. Jeli chcesz sie na ni zapisa, to wylij
  list o treci subscribe jtz Imi Nazwisko na adres
  listproc@ippt.gov.pl

  Zmiany w tym dokumencie wprowadzone przez tumacza 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 literwka
     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.

