35, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta


Rozdział 35.
Użytkownicy i konta


Tim Parker

W tym rozdziale:

Każdy użytkownik ma dostęp do systemu linuxowego tylko poprzez swoje konto. Każde konto użytkownika musi zostać skonfigurowane przez administratora (za wyjątkiem konta root, które jest zakładane podczas instalacji systemu). Choć z niektórych systemów linuxowych korzysta tylko jeden użytkownik, nie powinien on używać na co dzień konta root. W wielu systemach możliwa jest równoczesna praca kilku użytkowników, czy to dzięki konsolom wirtualnym, czy też przez modem, czy za pomocą terminalu. Umiejętność konfigurowania i zarządzania kontami użytkowników jest ważnym aspektem administrowania systemem.

W tym rozdziale przyjrzymy się następującym zagadnieniom:

Konto administratora

W trakcie instalowania systemu linuxowego tworzone jest jedno konto - konto administratora, o identyfikatorze root. Podczas gdy większość kont użytkowników jest zabezpieczona przed wyrządzeniem jakichkolwiek szkód w systemie, użytkownik root może za pomocą jednego polecenia zniszczyć cały system. Na użytkownika root nie są nałożone żadne ograniczenia.

0x01 graphic

Możliwości, jakie oferuje konto root, mogą uzależniać. Nie trzeba martwić się o prawa dostępu czy konfigurację oprogramowania; można zrobić wszystko i wszędzie. To powoduje, że większość nowych użytkowników używa konta root do codziennej pracy. Zwykle porzucają ten zwyczaj w momencie, gdy przez przypadek uda im się zniszczyć cały system. Brak ograniczeń nałożonych na konto root pociąga za sobą brak jakichkolwiek zabezpieczeń. Z tego powodu konto root powinno być używane tylko do zadań o charakterze administracyjnym. Nie używaj konta root do codziennej pracy!

Konto root powinno być używane tylko wtedy, gdy sytuacja naprawdę tego wymaga. Dobrym pomysłem jest zmiana znaku zachęty dla użytkownika root, dzięki czemu będziesz widział, że jesteś zalogowany jako root i być może zastanowisz się przed wydaniem jakiegoś niefortunnego polecenia. Możesz to zrobić ustalając odpowiednio wartość zmiennej środowiskowej PS - dokładniejsze informacje na ten temat znajdziesz w rozdziale 14. „Programowanie w języku powłoki”. Jeśli systemu używasz tylko Ty i uda Ci się go przez przypadek zniszczyć - to jeszcze niewielki problem. O wiele gorzej sytuacja wygląda, gdy zniszczysz efekty pracy innych użytkowników…

Mając na uwadze wszystkie powyższe ostrzeżenia, nie masz chyba wątpliwości, że pierwsze, co powinieneś zrobić po zainstalowaniu systemu, to założenie dla siebie konta do codziennego użytku. Hasło użytkownika root nie może być łatwe do odgadnięcia dla innych użytkowników systemu. Powinieneś również w miarę regularnie je zmieniać.

Warto także założyć konta służące do prac administracyjnych nie wymagających aż tak szerokich uprawnień, jakie oferuje root, na przykład do tworzenia kopii zapasowych na taśmach. Użytkownik ten może mieć np. dostęp do całego systemu plików (tak jak root), ale bez prawa zapisu. Podobne konta mogą zostać stworzone do obsługi poczty, Internetu itp. Przemyśl dobrze przywileje, jakie trzeba nadać każdemu użytkownikowi - dzięki temu system będzie bezpieczniejszy i unikniesz przypadkowych uszkodzeń.

Jeśli chodzi o ścisłość, konto administratora nie musi nazywać się root. Może mieć dowolną nazwę, ale jego identyfikator numeryczny musi być ustawiony na 0 (w pliku /etc/passwd).

Konta użytkowników - plik /etc/passwd

Nawet jeśli jesteś jedynym użytkownikiem systemu, warto wiedzieć kilka rzeczy o kontach użytkowników i zarządzaniu nimi, choćby dlatego, że powinieneś posiadać konto do codziennej pracy (inne niż root). Musisz więc umieć dodać do systemu nowego użytkownika. Jeśli inne osoby również będą korzystać z systemu, czy to przez modem, czy też bezpośrednio, powinieneś założyć dla każdej z nich osobne konto. Można też utworzyć konta ogólnodostępne, np. dla przyjaciół tylko okazyjnie korzystających z Twojego systemu.

Każda osoba używająca systemu powinna posiadać własny identyfikator oraz hasło. Jedynym wyjątkiem mogą być użytkownicy typu guest, którzy powinni mieć jednak bardzo ograniczone prawa dostępu. Dzięki założeniu osobnego konta dla każdego użytkownika znacznie poprawia się bezpieczeństwo systemu. Jako administrator masz również lepsze pojęcie o tym, kto i w jakim celu z niego korzysta.

Wszystkie informacje o kontach użytkowników przechowywane są w pliku /etc/passwd. Jego właścicielem powinien być root, a identyfikator grupy powinien być ustawiony na 0 (grupa root albo system, zależnie od wpisu w pliku /etc/groups). Prawa dostępu powinny być tak ustawione, by zapisywać do tego pliku mógł tylko root, natomiast prawo odczytu powinni mieć wszyscy użytkownicy (o grupach i prawach dostępu będziemy jeszcze mówić w dalszej części tego podrozdziału). Wpisy w pliku /etc/passwd mają następujący format:

nazwa_uzytkownika:hasło:ID_użytkownika:ID_grupy:komentarz:katalog_domowy:powłoka_domyślna

Listing 35.1 przedstawia przykładową zawartość takiego pliku.

Listing 35.1. Plik /etc/passwd utworzony podczas instalacji Linuxa

root:jyGSAETCyfRDE:0:0:root:/root:/bin/bash
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
adm:*:3:4:adm:/var/adm:
lp:*:4:7:lp:/var/spool/lpd:
sync:*:5:0:sync:/sbin:/bin/sync
shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown
halt:*:7:0:halt:/sbin:/sbin/halt
mail:*:8:12:mail:/var/spool/mail:
news:*:9:13:news:/var/spool/news:
uucp:*:10:14:uucp:/var/spool/uucp:
operator:*:11:0:operator:/root:
games:*:12:100:games:/usr/games:
gopher:*:13:30:gopher:/usr/lib/gopher-data:
ftp:*:140:50:FTP User:/home/ftp:
nobody:*:-1:100:Nobody:/:

Każdy wiersz składa się z siedmiu pól rozdzielonych dwukropkami. Jeśli dane pole nie ma zawierać żadnych informacji, dwukropki muszą pozostać (tzn. każdy wiersz musi zawierać sześć dwukropków). Pola te mają następujące funkcje:

nazwa_uzytkownika: niepowtarzalny identyfikator użytkownika;

hasło: hasło dostępu do systemu, zakodowane tak, by jego odczytanie nie było możliwe;

ID_użytkownika: identyfikator numeryczny, inny dla każdego użytkownika, używany przez system;

ID_grupy: liczba określająca grupę, do której należy użyt­kow­nik;

komentarz: zwykle prawdziwe imię i nazwisko użytkownika, ale można tu wpisać dowolny tekst;

katalog_domowy: katalog, w którym użytkownik znajdzie się po zalogowaniu;

powłoka_domyślna program uruchamiany po zakończeniu procesu logowania.

Każdemu polu przyjrzymy się nieco dokładniej. Powinieneś orientować się, w jaki sposób są one wykorzystywane przez programy. Taki plik, jak /etc/passwd, używany jest nie tylko w systemie Linux, ale we wszystkich systemach UNIX-owych.

Identyfikatory użytkowników

Identyfikatorem użytkownika może być dowolny tekst, zwykle o długości do ośmiu znaków, inny dla każdego użytkownika. Ponieważ jest on podstawą identyfikacji podczas pracy w sieci, powinien być prosty i oczywisty; nie od rzeczy jest na przykład kombinacja taka jak pierwsza litera imienia + nazwisko lub jego część (np. tszydl czy wkuc) - taka konwencja jest dość często stosowana w większych systemach.

Zauważ, że wszystkie litery w powyższych przykładach są małe. Wielkość liter jest istotna w systemach UNIX-owych, więc identyfikator tszydl nie jest tożsamy z TSzydl. Zwykle używa się identyfikatorów składających się tylko z małych liter. Dozwolone, choć rzadko używane, są podkreślenia, przecinki, cyfry i niektóre inne symbole.

W niewielkich systemach często używa się identyfikatorów brzmiących nieco bardziej przyjaźnie, na przykład michal czy iwona. Jeśli dwóch użytkowników nosi te same imiona, trzeba znaleźć sposób na ich rozróżnienie (np. tomek i tom).

Niektórzy użytkownicy wolą, żeby ich identyfikatorem było przezwisko czy cokolwiek innego. Wszystko jest w porządku w niewielkich sieciach i do zastosowań „rozrywkowych”, ale staje się dziwactwem w pracy, gdzie tylko utrudnia życie innym osobom próbującym skontaktować się z danym użytkownikiem.

Hasła

System przechowuje hasła użytkowników w postaci zakodowanej. Hasło może być zmienione przez użytkownika po zalogowaniu się (co wymaga znajomości tegoż hasła) lub też przez użytkownika root. Pole pliku /etc/passwd zawierające hasło jest bardzo wrażliwe na wszelkiego rodzaju modyfikacje, które w zasadzie zawsze powodują zablokowanie dostępu do danego konta (aż do zmiany hasła przez administratora systemu).

0x01 graphic

W niektórych wersjach UNIX-a dla zapewnienia większego bezpieczeństwa hasła nie są przechowywane w pliku /etc/passwd. Jeśli w Twoim systemie zamiast zakodowanych haseł w pliku passwd znajduje się znak x, oznacza to, że istnieje inny plik, w którym zapisane są ich rzeczywiste wartości (ta technika nazywa się password shadowing - ukrywanie haseł).

Systemy korzystające z Yellow Pages lub Network Information Service nie wykorzystują tego pola, a zamiast tego używają wspólnego pliku zawierającego dane o użytkownikach. Pozwala to każdemu użytkownikowi na zalogowanie się do systemu za pomocą dowolnego komputera podłączonego do sieci.

Podczas logowania program login sprawdza, czy wprowadzone hasło odpowiada zakodowanemu. Jeśli nie, użytkownik nie uzyska dostępu do systemu.

Pole to może również być wykorzystane do ograniczenia dostępu do systemu. Jeśli dane konto nie powinno być używane, wystarczy do pola zawierającego hasło wprowadzić pojedynczą gwiazdkę (*). Ma to zastosowanie również w przypadku użytkowników systemowych, takich jak lp czy sync. Gwiazdka w polu hasła spowoduje zablokowanie dostępu do systemu dla określonego użytkownika.

Można pozostawić to pole puste, co daje wszystkim możliwość dostania się do systemu bez podawania hasła. Użytkownik, który ma taką możliwość, powinien mieć bardzo ograniczone prawa dostępu do plików w systemie, ponieważ każdy może zalogować się używając jego identyfikatora. Ogólnie nie należy jednak pozostawiać pustych haseł, chyba że używasz systemu wyłącznie do zabawy i w systemie plików nie są zapisane żadne istotne dane.

Nie powinieneś próbować wprowadzić zakodowanego hasła do pliku /etc/passwd ręcznie. Nie jest możliwe odtworzenie metody kodowania haseł, więc prawie na pewno skończy się to zablokowaniem dostępu do danego konta (aż do zmiany hasła przez administratora systemu).

Numeryczny identyfikator użytkownika

Z każdym identyfikatorem tekstowym użytkownika związany jest również identyfikator numeryczny. To on, a nie identyfikator tekstowy, jest używany przez system do rozróżniania użytkowników. Programy wyświetlające informacje o użytkownikach dokonują translacji numeru na odpowiadający mu identyfikator tekstowy (na podstawie zawartości pliku /etc/passwd) dla wygody czytającego.

W większości systemów UNIX-owych numery użytkowników mają wartości od 100 w górę, ponieważ numery od 0 do 99 zarezerwowane są dla użytkowników systemowych. W podanym wcześniej przykładowym pliku /etc/passwd można zauważyć, że użytkownikowi root przypisany jest numer 0 - jest to reguła obowiązująca w każdym systemie. Użytkownikowi nobody (używanemu do obsługi sieciowych systemów plików NFS) przypisany jest numer - 1, który jest nieprawidłowy. Przy zakładaniu nowych kont dobrze jest numerować użytkowników kolejno, rozpoczynając od wartości 100, następnie 101 itd.

Identyfikator grupy

Identyfikator grupy zapisany w pliku /etc/passwd jest również wartością liczbową. Decyduje on o tym, do której grupy należał będzie dany użytkownik po zalogowaniu. Grupy używane są dla ułatwienia zarządzania prawami dostępu do plików ale w wielu małych systemach ich możliwości nie są wykorzystywane. Numery grup rozpoczynają się od 0. Grupa o nazwie users zwykle posiada numer 100.

Identyfikator grupy używany jest do weryfikowania praw dostępu do plików, oraz przy tworzeniu i modyfikowaniu plików. Jeśli w Twoim systemie funkcjonuje tylko jedna grupa użytkowników, nie musisz martwić się o przydzielanie prawidłowych wartości identyfikatorów grupy. Jeśli chcesz założyć kilka grup, musisz również zmodyfikować plik /etc/group.

Komentarz

Pole komentarza używane jest przez administratora systemu po to, aby wpis można było łatwiej zidentyfikować. Zwykle zawiera ono prawdziwe imię i nazwisko użytkownika, czasem również wydział czy numer ewidencyjny. Nazywane jest czasem polem GECOS - nazwa ta pochodzi od pierwszego systemu, w którym go używano.

Niektóre programy bazują na informacjach zapisanych w tym polu przy wyświetlaniu danych o użytkownikach, nie należy więc wpisywać tam żadnych poufnych danych. Systemy poczty na przykład informują na jego podstawie o tym, kto wysłał daną wiadomość. Choć nie trzeba używać tego pola, w większych systemach ułatwia ono życie zarówno administratorowi, jak i innym użytkownikom.

Katalog domowy

Pole to określa, w jakim katalogu będzie znajdował się użytkownik po zalogowaniu się do systemu. Każdy użytkownik powinien posiadać własny katalog domowy, w którym nie są na niego nałożone żadne ograniczenia. W nim zapisywane są pliki konfiguracyjne różnych programów. Na ten katalog powinna wskazywać wartość zmiennej środowiskowej HOME.

Zwykle wszystkie katalogi domowe użytkowników zebrane są w jednym miejscu. W systemie Linux jest to przeważnie katalog /home. Czasem - jeśli administrator jest przyzwyczajony do innego ich umieszczenia - mogą znajdować się gdzieś indziej (na przykład w katalogu /usr czy /user; zdarza się również, szczególnie w większych systemach, że katalogi domowe użytkowników znajdują się w kilku różnych podkatalogach - przyp. tłum.).

Powłoka domyślna

Pole określające powłokę domyślną zawiera nazwę programu, który zostanie uruchomiony po zakończeniu logowania. W większości przypadków jest to interpreter poleceń bash czy tcsh, ale może to być dowolna aplikacja, taka jak program do obsługi poczty itp. - na przykład dla użytkownika uucp jest to program uucp. Jeśli pole to pozostawione jest puste, system uruchomi interpreter domyślny (zwykle bash, ale zależy to od konfiguracji systemu).

Wiele wersji Linuxa pozwala użytkownikowi na zmianę wartości tego pola za pomocą polecenia passwd -s lub chsh. Jeśli używasz któregoś z tych poleceń, możesz zmienić program uruchamiany tylko na jeden z tych, których nazwy zapisane są w pliku /etc/shells (plik ten można modyfikować dowolnym edytorem tekstów). Pozwala to na zachowanie wyższego poziomu bezpieczeństwa. Administrator może w tym polu wpisać dowolny program. Jeśli w Twoim systemie używany jest plik /etc/shells, powinien on mieć takie same prawa dostępu, jak plik /etc/passwd, ponieważ konsekwencje płynące z możliwości jego modyfikacji przez niepowołane osoby są równie niebezpieczne jak nieautoryzowany dostęp do pliku /etc/passwd.

Użytkownicy systemowi

Podany wcześniej przykładowy plik /etc/passwd zawiera kilkanaście wpisów, wprowadzonych przez system podczas instalacji. Wszyscy zdefiniowani w nim użytkownicy spełniają w systemie linuxowym specjalną rolę. Kilku z nich jest szczególnie wartych uwagi:

root administrator - użytkownik, na którego nie są nałożone żadne ograniczenia;

daemon konto używane dla procesów systemowych;

bin właściciel niektórych plików wykonywalnych;

sys właściciel niektórych plików wykonywalnych;

adm właściciel plików administracyjnych;

uucp konto używane do komunikacji za pomocą protokołu UUCP.

W innych systemach mogą również być założone konta do specyficznych zadań; ich nazwy zwykle wyjaśniają przeznaczenie - na przykład użytkownik postmaster przeznaczony jest do obsługi poczty. Większości z tych wpisów nie należy modyfikować. W polu hasła mają one wpisaną gwiazdkę, co zabezpiecza przed ich wykorzystaniem do zalogowania się do systemu.

Dodawanie nowego konta

Nowego użytkownika można dodać do systemu na dwa sposoby: ręcznie, edytując plik /etc/passwd, bądź też za pomocą skryptu automatyzującego wszystkie czynności, dzięki czemu minimalizowane jest ryzyko popełnienia błędów, co jest szczególnie ważne dla mało doświadczonych administratorów lub w przypadku dodawania większej liczby użytkowników. Tylko użytkownik root może modyfikować plik /etc/passwd.

0x01 graphic

Przed dokonaniem jakichkolwiek zmian w pliku /etc/passwd zrób jego kopię zapasową. Jeśli przez przypadek uszkodzisz go, może się zdarzyć, że nie będziesz mógł się zalogować nawet jako root (do systemu można wówczas dostać się tylko w trybie administracyjnym). Na wypadek problemów dobrze mieć kopię tego pliku na dyskietce startowej.

Aby dodać wpis do pliku /etc/passwd, można użyć dowolnego edytora tekstów. Dane nowego użytkownika można dopisać na końcu pliku; każdemu użytkownikowi musi odpowiadać oddzielny wiersz. Upewnij się, że numery identyfikacyjne użytkowników się nie powtarzają. Przykładowo, aby dodać użytkownika o identyfikatorze bill, numerze identyfikacyjnym 103 i numerze grupy 100, którego katalogiem domowym jest /home/bill, a domyślnym interpreterem poleceń - bash, powinieneś dodać wiersz:

bill::103:100:Bill Smalwood:/home/bill:/bin/bash

Pole określające hasło należy pozostawić puste, ponieważ nie da się wprowadzić zakodowanego hasła samodzielnie. Następnie należy zmienić hasło używając polecenia passwd:

passwd bill

Po wydaniu tego polecenia należy dwukrotnie wprowadzić hasło. Użytkownik bill powinien je zmienić jak najszybciej (na takie, które będzie znał tylko on). Niektórzy administratorzy jako pierwsze hasło wpisują jakiś łatwy do odgadnięcia tekst, na przykład password albo identyfikator użytkownika, zmuszając jednocześnie użytkownika do zmiany hasła zaraz po zalogowaniu się. Jest to dopuszczalne, jeśli pierwsze logowanie następuje zaraz po założeniu hasła. W przeciwnym przypadku konto przez dłuższy czas może pozostać niezabezpieczone, stwarzając potencjalne zagrożenie dla bezpieczeństwa systemu.

Po wpisaniu odpowiednich danych do pliku /etc/passwd należy utworzyć katalog domowy użytkownika, o ile nie istnieje on jeszcze w systemie. Jego właścicielem musi być osoba, która ma go używać:

mkdir /home/bill
chown bill /home/bill

Każdy użytkownik musi należeć do jakiejś grupy. Jeśli w Twoim systemie jest zdefiniowana tylko jedna grupa, dodaj identyfikator nowego użytkownika do odpowiedniego wiersza w pliku /etc/group. Plik ten jest omówiony bardziej szczegółowo w podrozdziale „Grupy”.

Na koniec należy jeszcze skopiować do katalogu domowego nowego użytkownika pliki konfiguracyjne interpreterów poleceń itp., na przykład tak:

cp /home/iwona/.profile /home/bill/.profile
chown bill /home/bill/.profile

Pliki takie warto przejrzeć na wypadek występowania w nich nieprawidłowych wpisów, na przykład ustawiających wartość zmiennej HOME czy katalog poczty. W przypadku używania powłoki C plik konfiguracyjny nazywa się .login lub .cshrc, w przypadku powłoki bash oraz pdksh - .profile.

Ogólnie proces dodawania nowego użytkownika składa się z trzech etapów:

  1. dodania wpisu do pliku /etc/passwd,

  2. utworzenia katalogu domowego i przypisania mu odpowiedniego właściciela,

  3. skopiowania plików konfiguracyjnych do katalogu nowego użytkownika.

Niektóre dystrybucje Linuxa zawierają polecenie przeniesione z wersji Berkley BSD UNIX o nazwie vipw, które wywołuje domyślny edytor (zwykle vi) na tymczasowej kopii pliku /etc/passwd; dzięki takiemu rozwiązaniu nie jest możliwe, aby dwóch użytkowników edytowało równocześnie ten sam plik, co zapobiega potencjalnym problemom. Przed zapisaniem pliku sprawdzana jest jego poprawność syntaktyczna, co dodatkowo podnosi poziom bezpieczeństwa.

Często można również użyć skryptów automatyzujących dodawanie nowych użytkowników, które nazywają się adduser albo useradd. Zwykle zadają one pytanie o początkowe hasło, które można pozostawić puste. Główną ich zaletą jest fakt, że automatycznie kopiują pliki konfiguracyjne dla wszystkich obsługiwanych powłok, często również same ustawiają poprawne wartości zmiennych środowiskowych. Może to znacząco ułatwić proces dodawania nowych użytkowników.

0x01 graphic

Hasła w systemie linuxowym to jeden z najbardziej newralgicznych, z punktu widzenia bezpieczeństwa, problemów. Do każdego konta powinno być przypisane bezpieczne hasło, chyba że masz pewność, ze nikt obcy nie korzysta z systemu (pewność taką możesz mieć tylko wtedy, gdy nie jesteś podłączony do sieci, a komputer jest pod kluczem). Hasła przypisuje się i zmienia poleceniem passwd. Administrator może zmienić każde hasło w systemie, natomiast zwykły użytkownik może zmienić tylko swoje hasło.

Usuwanie kont

Podobnie jak dodawanie nowego konta, usuwanie można przeprowadzić na dwa sposoby: ręcznie lub używając odpowiedniego skryptu, który zwykle nazywa się deluser lub userdel. Skrypt pyta o identyfikator użytkownika, którego należy usunąć z systemu, a następnie wykonuje wszystkie niezbędne czynności: usuwa wpis z pliku /etc/passwd, może również posprzątać w katalogach kolejek i usunąć katalog domowy.

Jeśli chcesz usunąć konto ręcznie, najpierw usuń odpowiedni wiersz z pliku /etc/passwd. Następnie możesz usunąć pliki, których właścicielem jest nieistniejący już użytkownik. Możesz również usunąć jego katalog domowy wraz z całą zawartością za pomocą polecenia:

rm -r /home/nazwa_użytkownika

/home/nazwa_użytkownika to pełna ścieżka dostępu do katalogu domowego użytkownika. Upewnij się najpierw, że w katalogu tym nie ma żadnych plików, które chciałbyś zatrzymać!

Następnie należy usunąć plik poczty, który zwykle znajduje się w katalogu /usr/spool/ mail/nazwa_użytkownika. Powinieneś sprawdzić, czy w pliku /etc/aliases nie ma wpisów dotyczących usuwanego użytkownika. Plik ten modyfikuje się za pomocą polecenia newaliases.

Na koniec wyłącz wszystkie zadania programów cron i at, których właścicielem był usuwany użytkownik. Dane o nich możesz uzyskać używając polecenia crontab.

Jeśli musisz pozostawić danego użytkownika w systemie z jakiegoś powodu, najłatwiej uniemożliwić mu logowanie, wpisując w miejsce hasła w pliku /etc/passwd gwiazdkę. Tak zablokowane konto może być ponownie uaktywnione poleceniem passwd.

Proces ręcznego usuwania użytkownika składa się z następujących etapów:

  1. usunięcie wpisów z plików /etc/passwd i /etc/group,

  1. usunięcie poczty użytkownika,

  2. wyłączenie zadań at i cron,

  3. usunięcie katalogu domowego (o ile pliki w nim zawarte nie będą już potrzebne).

Czasem trzeba tymczasowo zablokować konto użytkownika (na przykład kiedy wyjeżdża on na dłuższe wakacje i nie będzie używał systemu). W takim przypadku należy w miejsce hasła wpisać do pliku /etc/passwd gwiazdkę. Można również dodać gwiazdkę przed pierwszym znakiem hasła - po powrocie użytkownika będzie można ją usunąć, a hasło użytkownika nie ulegnie zmianie.

Grupy

Każdy użytkownik w systemie UNIX-owym musi należeć do jakiejś grupy. Grupa to logiczny zbiór użytkowników. Przykładowo, grupę mogą stanowić wszyscy pracownicy jednego wydziału, którzy powinni mieć dostęp do jakichś wspólnych danych, czy możliwość używania danego urządzenia, na przykład skanera czy kolorowej drukarki laserowej. W systemie może być dowolnie dużo grup. Użytkownik może być w danym momencie przypisany tylko do jednej grupy. Jeśli jednak należy jeszcze do innych (każdy użytkownik może należeć do dowolnej liczby grup), może w każdej chwili sam przyłączyć się do odpowiedniej grupy.

Prawa dostępu dla grup można ustalić tak, by ich członkowie mieli np. dostęp do danych urządzeń, plików czy systemów plików, natomiast nie mieli ich inni użytkownicy. Przykładowo, wszyscy pracownicy księgowości powinni mieć dostęp do rachunków firmy, do których jednak nie powinni mieć dostępu pozostali pracownicy - takie ograniczenie może być z łatwością zrealizowane za pomocą grup.

W wielu systemach linuxowych istnieje tylko jedna grupa użytkowników. Takie rozwiązanie jest akceptowalne w małych, najwyżej kilkuosobowych systemach. Dostęp do plików i urządzeń określany jest wówczas nie w oparciu o przynależność do grupy, ale o indywidualne ustawienia praw dostępu dla każdego pliku. Zalety używania grup ujawniają się, gdy z systemu zaczyna korzystać większa liczba użytkowników - na przykład dzieci i przyjaciele - wówczas, używając grup, można z łatwością manipulować prawami dostępu do plików.

Informacje o grupach przechowywane są w pliku /etc/groups, którego struktura jest podobna do struktury pliku /etc/passwd. Plik /etc/groups pochodzący ze świeżo zainstalowanego systemu przedstawiony jest na listingu 35.2.

Listing 35.2. Plik /etc/groups utworzony podczas instalacji Linuxa

root::0:root
bin::1:root,bin,daemon
daemon::2:root,bin,daemon
sys::3:root,bin,adm
adm::4:root,adm,daemon
tty::5:
disk::6:root
lp::7:daemon,lp
mem::8:
kmem::9:
wheel::10:root
mail::12:mail
news::13:news
uucp::14:uucp
man::15:
floppy:x:19:
games::20:
gopher::30:
dip::40:
ftp::50:
nobody::99:
users::100:
pppusers:x:230:
popusers:x:231:
slipusers:x:232:

Każdy wiersz składa się z czterech pól, rozdzielonych dwukropkami (dwa dwukropki obok siebie oznaczają, że dane pole jest puste):

nazwa_grupy:hasło_grupy:ID_grupy:użytkownicy

Pola te mają następujące znaczenie:

nazwa_grupy: niepowtarzalna nazwa grupy, składająca się maksymalnie z ośmiu znaków;

hasło_grupy: pole to zwykle pozostawiane jest puste (w niektórych wersjach systemu tu przechowywane jest hasło, które użytkownik musi podać, chcąc przyłączyć się do grupy); większość wersji Linuxa nie obsługuje tego pola;

ID_grupy: numer identyfikacyjny, różny dla każdej grupy, używany przez system operacyjny;

użytkownicy: lista użytkowników należących do danej grupy.

W każdym systemie istnieje pewna liczba grup tworzonych podczas instalacji, służących do obsługi samego systemu operacyjnego (jak na przykład bin, mail, uucp, sys itd.). Na powyższym wydruku są to wszystkie grupy oprócz ostatnich czterech. Nigdy nie powinieneś pozwolić użytkownikom, by należeli do jednej z tych grup, ponieważ daje im to prawa dostępu zagrażające bezpieczeństwu systemu. Mogą do nich należeć tylko użytkownicy systemowi.

Grupy systemowe

Jak widać na listingu 35.2, istnieje kilka grup systemowych, do których nie należą zwykli użytkownicy systemu. Funkcje niektórych z nich są następujące:

root/wheel/system zwykle używana, aby uzyskać prawa użytkownika root za pomocą polecenia su; grupa ta jest właścicielem większości plików systemowych;

daemon używana do obsługi katalogów kolejki dla poczty, drukarek itp.;

kmem używana przez programy wymagające bezpośredniego dostępu do pamięci (np. ps);

sys właściciel niektórych plików systemowych; w niektórych systemach grupa ta zachowuje się tak samo jak kmem;

tty właściciel plików obsługujących terminale.

Domyślna grupa dla zwykłych użytkowników nazywa się users i posiada numer identyfikacyjny 100 (w niektórych systemach funkcję tę pełni grupa group o numerze 50).

Dodawanie nowej grupy

Aby utworzyć nową grupę, można ręcznie edytować plik /etc/groups, ale można również w tym celu użyć skryptu o nazwie addgroup czy groupadd. Z punktu widzenia administratora ręczna edycja pliku jest nawet wygodniejsza, ponieważ umożliwia od razu wgląd w całą strukturę grup. Poza tym nie we wszystkich systemach dostępne są odpowiednie skrypty.

Jeśli chcesz modyfikować zawartość pliku /etc/groups, powinieneś najpierw wykonać jego kopię zapasową. Za pomocą dowolnego edytora tekstów dodaj nowy wiersz dla każdej grupy, którą zamierzasz utworzyć. Upewnij się, że nie popełniłeś żadnych błędów składniowych. Poniżej znajdują się dwa wiersze, które spowodują utworzenie dwóch nowych grup; do każdej z nich należeć będzie jeden użytkownik:

rachunki::101:bill
skaner::102:iwona

Numery identyfikacyjne tych grup to 101 i 102. Nowe wiersze można dodać w dowolnym miejscu pliku. Identyfikatory użytkowników mających należeć do danej grupy powinny znajdować się na końcu wiersza. W powyższym przykładzie do każdej z grup należy tylko jeden użytkownik - w następnym podrozdziale dowiesz się, w jaki sposób można dodać do grupy więcej niż jednego użytkownika. Definicje grup nie muszą pojawiać się w kolejności zgodnej z ich numerami identyfikacyjnymi.

Po dokonaniu zmian w pliku /etc/groups powinieneś sprawdzić, czy nadal ma on prawidłowo ustawione prawa dostępu. Jego właścicielem powinien być użytkownik root (lub system). Nikt prócz właściciela nie powinien mieć prawa zapisu do tego pliku.

Dodawanie użytkowników do grupy

Każdy użytkownik może być członkiem wielu grup; w takim przypadku jego identyfikator powinien pojawić się w każdym wierszu odpowiadającym grupie, do której on przynależy (identyfikatory użytkowników w pliku /etc/groups powinny być rozdzielone przecinkami). Nie ma formalnego ograniczenia liczby użytkowników mogących należeć do danej grupy, ale w praktyce nie jest aż tak dobrze: liczba użytkowników należących do grupy jest efektywnie ograniczana przez maksymalną długość wiersza w pliku /etc/groups (255 znaków). Istnieją metody obejścia tego problemu, ale w większości systemów nie będzie to konieczne.

Oto fragment pliku /etc/groups zawierającego definicje kilkuosobowych grup:

rachunki::101:bill,iwona,michal,root,szymon
scanner::102:iwona,janek,root
cad::103:michal,piotr,wojtek

Identyfikatory użytkowników mogą pojawiać się w dowolnej kolejności.

W danym momencie użytkownik może należeć tylko do jednej grupy. O tym, do której grupy będzie należał po zalogowaniu, decyduje wpis w pliku /etc/passwd.

Usuwanie grupy

Jeśli zdecydujesz, że dana grupa nie jest już potrzebna, możesz usunąć odpowiedni wpis z pliku /etc/groups. Powinieneś również sprawdzić w pliku /etc/passwd, czy któryś użytkownik nie loguje się jako członek tej grupy (w takim przypadku bowiem nie będzie mógł się zalogować). Możesz również wyszukać w systemie plików pliki i katalogi należące do danej grupy i zmienić ich przynależność (bądź też usunąć). Jeśli tego nie zrobisz, inni użytkownicy mogą nie mieć dostępu do tych plików.

W niektórych wersjach Linuxa do usuwania wpisów z pliku /etc/group przeznaczony jest skrypt o nazwie delgroup lub groupdel.

Polecenie su

Czasem zachodzi potrzeba wydania jakiegoś polecenia jako inny użytkownik. Jeśli jesteś zalogowany jako root, a chcesz stworzyć pliki, których właścicielem będzie bill, łatwiej zalogować się jako bill niż zmieniać potem prawa dostępu do plików. Podobnie wygląda sytuacja, jeśli jesteś zalogowany jako zwykły użytkownik, a potrzebujesz na chwilę uprawnień administratora. W takich sytuacjach z pomocą przychodzi polecenie su.

Polecenie su zmienia identyfikator użytkownika i przyznaje wszystkie uprawnienia, jakie posiada inny użytkownik. Jego parametrem jest identyfikator użytkownika, którym chcesz się na chwilę stać, na przykład:

su root

Po wydaniu takiego polecenia system zapyta Cię o hasło. Jeśli wprowadzisz je poprawnie, będziesz miał wszystkie uprawnienia użytkownika root (do czasu, aż wydasz polecenie exit lub wciśniesz Control+d). Jeśli jesteś zalogowany jako root, możesz stać się innym użytkownikiem bez podawania hasła, na przykład wydając polecenie:

su bill

Po wciśnięciu kombinacji klawiszy Control+d znowu staniesz się użytkownikiem root. Jeśli jesteś zalogowany jako zwykły użytkownik, a chcesz przełączyć się na chwilę na inne konto zwykłego użytkownika, również musisz podać hasło.

Podsumowanie

W tym rozdziale przyjrzeliśmy się plikom /etc/passwd oraz /etc/groups, za pomocą których kontrolowany jest dostęp do systemu. Jak widać, ich budowa jest prosta i mogą być łatwo modyfikowane dowolnym edytorem tekstów. Pamiętaj o tym, że są to pliki bardzo ważne dla prawidłowego działania systemu, więc należy wykonywać ich kopie zapasowe i sprawdzać, czy mają przypisane odpowiednie prawa dostępu.

Konfigurowanie i dodawanie do systemu urządzeń SCSI omówione jest w rozdziale 36. „Obsługa urządzeń SCSI”.

Jak skonfigurować system, by można było korzystać z poczty elektronicznej, dowiesz się z rozdziału 40. „Konfigurowanie poczty”.

Polecenie tar i tworzenie kopii zapasowych przedstawione są w roz­dziale 45. „Kopie zapasowe”.

578 Część VI Linux dla administratorów

578 E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\35.DOC

E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\35.DOC 579

Rozdzia³ 35. Użytkownicy i konta 579



Wyszukiwarka