Linux Professional Institute Learning Logo.
Przejdź do głównej treści
  • Strona Główna
    • Wszystkie Zasoby
    • Materiały Dydaktyczne LPI
    • Zostań Współautorem
    • Partnerzy Wydawniczy
    • Zostań Partnerem Wydawniczym
    • FAQ
    • Współautorzy
    • Harmonogram
    • Kontakt
  • LPI.org
5.1 Lekcja 1
Temat 1: Społeczność Linuxa i kariera w środowisku Open Source
1.1 Ewolucja Linuksa i popularne systemy operacyjne
  • Wkrótce...
1.2 Najważniejsze aplikacje Open Source
  • 1.2 Lekcja 1
1.3 Oprogramowanie i licencje typu open source
  • 1.3 Lekcja 1
1.4 Umiejętności ICT i praca w systemie Linux
  • 1.4 Lekcja 1
Temat 2: Poruszanie się po systemie Linux
2.1 Podstawy wiersza poleceń
  • 2.1 Lekcja 1
  • 2.1 Lekcja 2
2.2 Korzystanie z wiersza poleceń w celu uzyskania pomocy
  • 2.2 Lekcja 1
2.3 Korzystanie z katalogów i listy plików
  • 2.3 Lekcja 1
  • 2.3 Lekcja 2
2.4 Tworzenie, przenoszenie i usuwanie plików
  • 2.4 Lekcja 1
Temat 3: Siła wiersza poleceń
3.1 Archiwizacja plików za pomocą wiersza poleceń
  • 3.1 Lekcja 1
3.2 Wyszukiwanie i wyodrębnianie danych z plików
  • 3.2 Lekcja 1
  • 3.2 Lekcja 2
3.3 Przekształcanie poleceń w skrypt
  • 3.3 Lekcja 1
  • 3.3 Lekcja 2
Temat 4: System operacyjny Linux
4.1 Wybór systemu operacyjnego
  • Wkrótce...
4.2 Zrozumienie sprzętu komputerowego
  • 4.2 Lekcja 1
4.3 Gdzie są przechowywane dane
  • 4.3 Lekcja 1
  • 4.3 Lekcja 2
4.4 Komputer w sieci
  • 4.4 Lekcja 1
Temat 5: Bezpieczeństwo i uprawnienia do plików
5.1 Podstawy bezpieczeństwa i identyfikacja typów użytkowników
  • 5.1 Lekcja 1
5.2 Tworzenie użytkowników i grup
  • 5.2 Lekcja 1
5.3 Zarządzanie uprawnieniami do plików i prawami własności plików
  • 5.3 Lekcja 1
5.4 Katalogi i pliki specjalne
  • 5.4 Lekcja 1
How to get certified
  1. Temat 5: Bezpieczeństwo i uprawnienia do plików
  2. 5.1 Podstawy bezpieczeństwa i identyfikacja typów użytkowników
  3. 5.1 Lekcja 1

5.1 Lekcja 1

Certyfikat:

Linux Essentials

Wersja:

1.6

Temat:

5 Bezpieczeństwo i uprawnienia do plików

Cel nauki:

5.1 Podstawy bezpieczeństwa i identyfikacja typów użytkowników

Lekcja:

1 z 1

Wstęp

Ta lekcja skupi się na podstawowej terminologii dotyczącej kont użytkowników, kontroli dostępu i bezpieczeństwie lokalnych systemów Linux. Będzie także o narzędziach interfejsu wiersza poleceń (CLI) w systemie Linux do podstawowej kontroli dostępu oraz podstawowych plikach do obsługi kont użytkowników i grup, w tym tych, które kontrolują przydzielanie podstawowych praw dostępu.

Podstawowe zabezpieczenia w systemach Linux opierają się na uniksowych kontrolach dostępu, które mimo upływu prawie pięćdziesięciu lat są nadal bardzo skuteczne, nawet w porównaniu z niektórymi młodszymi popularnymi konsumenckimi systemami operacyjnymi. Nawet niektóre popularne systemy operacyjne oparte na systemie Unix, w przeciwieństwie do systemów Linux, mają skłonność do “swobody” w zakresie “łatwego dostępu”.

Nowoczesne środowiska i interfejsy systemu Linux upraszczają procedury tworzenia użytkowników i zarządzania nimi. Często także automatyzują przypisywanie kontroli dostępu, gdy użytkownik loguje się do systemu Linux, systemu audio i innych usług. Obecnie praktycznie nie wymagają one ręcznej interwencji ze strony administratora systemu. Jednak ważne jest, aby zrozumieć podstawowe pojęcia związane z systemem operacyjnym Linux.

Konta użytkowników

Bezpieczeństwo obejmuje wiele koncepcji, a jedną z najbardziej powszechnych jest ogólna koncepcja kontroli dostępu. Zanim będzie można zająć się kontrolą dostępu do plików, taką jak własność i uprawnienia, należy zrozumieć podstawowe pojęcia dotyczące kont użytkowników, które są podzielone na kilka typów.

Każdy użytkownik systemu Linux ma przypisane konto, które oprócz danych logowania (takich jak nazwa użytkownika i hasło) określa również, w jaki sposób i gdzie użytkownik może uzyskać interakcję z systemem. Uprawnienia i kontrola dostępu określają “granice”, w ramach których każdy użytkownik może działać.

Identyfikatory (UIDs/GIDs)

Identyfikatory Użytkowników UID (User Identifier) oraz Identyfikatory Grup GID (Group Identifier) to podstawowe, numeryczne odniesienia do kont. Wczesne implementacje były ograniczone do 16-bitowych liczb całkowitych (wartości od 0 do 65535), ale systemy w XXI wieku obsługują 64-bitowe identyfikatory UID i GID. Użytkownicy i grupy są liczone niezależnie od siebie, więc ten sam numer identyfikatora może reprezentować zarówno użytkownika, jak i grupę.

Każdy użytkownik ma nie tylko identyfikator UID, ale także podstawowy GID. Podstawowy identyfikator użytkownika może być unikalny tylko dla danego użytkownika i nie może być używany przez żadnego innego użytkownika w systemie. Jednak grupa może być również grupą współdzieloną przez wielu użytkowników. Oprócz grupy podstawowej każdy użytkownik może być także członkiem innych grup.

Domyślnie w systemie Linux każdy użytkownik jest przypisany do grupy o takiej samej nazwie jak jego nazwa użytkownika i tym samym GID, co jego identyfikator UID. Na przykład, jeśli utworzysz nowego użytkownika o nazwie newuser, to domyślną grupą będzie również newuser.

Konto superużytkownika (The Superuser Account)

W systemie Linux konto superużytkownika to root, które zawsze ma UID 0. Superużytkownik jest czasami nazywany administratorem systemu i ma nieograniczony dostęp i kontrolę nad systemem, w tym jego użytkownikami.

Domyślna grupa superużytkownika ma identyfikator GID o numerze 0 i jest również nazywana root. Katalog domowy superużytkownika to dedykowany katalog najwyższego poziomu /root, dostępny tylko dla samego użytkownika root.

Standardowe konta użytkowników

Wszystkie konta z wyjątkiem root są technicznie zwykłymi kontami użytkowników. Jednakże w systemie Linux termin konto użytkownika często oznacza “zwykłe” (nieuprzywilejowane) konto użytkownika. Z kilkoma wyjątkami, mają one zazwyczaj następujące właściwości:

  • Identyfikatory UID zaczynają się od 1000, więc mają 4 cyfry (chociaż w niektórych starszych systemach mogą zaczynać się od 500).

  • Istnieje zdefiniowany katalog domowy dla każdego konta, zwykle jest to podkatalog katalogu /home w zależności od lokalnej konfiguracji systemu.

  • Istnieje zdefiniowana powłoka logowania. W systemie Linux domyślną powłoką jest zwykle Bourne Again Shell (/bin/bash), chociaż możliwe są także inne powłoki logowania.

Jeśli do konta użytkownika w atrybutach nie jest przypisana poprawna powłoka, wówczas użytkownik nie będzie mógł otworzyć powłoki interaktywnej. Zwykle /sbin/nologin jest ustawiany jako niepoprawna powłoka. Może to być celowe działanie administratora systemu, jeśli użytkownik będzie uwierzytelniany tylko w przypadku usług innych niż dostęp do konsoli lub SSH, np. tylko dostęp do bezpiecznego protokołu FTP (sftp, Secure FTP).

Note

Aby uniknąć nieporozumień, termin konto użytkownika będzie odnosić się tylko do standardowych lub zwykłych kont użytkowników. W przeciwieństwie do tego, konto systemowe będzie oznaczać konto użytkownika systemu Linux, które jest typem konta użytkownika systemowego.

Konta systemowe (System Accounts)

Konta systemowe są zazwyczaj tworzone podczas instalacji systemu. Są one przeznaczone dla obiektów, programów i usług, które nie będą działać jako superużytkownicy. W idealnym świecie wszystkie te elementy byłyby urządzeniami systemu operacyjnego.

Konta systemowe są różne, ale wszystkie mają następujące cechy:

  • Identyfikatory UID są zwykle mniejsze niż 100 (2 cyfry) lub 500-1000 (3 cyfry).

  • Albo nie mają żadnego dedykowanego katalogu domowego, albo mają katalog, którego zwykle nie ma w katalogu /home.

  • Nie mają poprawnej powłoki logowania (zazwyczaj /sbin/nologin), z rzadkimi wyjątkami.

Większość kont systemowych w systemie Linux nigdy nie wymaga logowania, a co za tym idzie nie ma zdefiniowanej powłoki w swoich atrybutach. Wiele procesów, które należą do kont systemowych i są przez nie wykonywane, jest rozgałęzionych przez zarządzanie systemem do oddzielnego środowiska, które działa z określonym kontem systemowym. Z reguły te konta mają ograniczone lub w większości przypadków nie mają nawet żadnych uprawnień.

Note

Z punktu widzenia egzaminu LPI Linux Essentials, konta systemowe to konta, które mają UIDs <1000, z 2 lub 3-cyfrowymi identyfikatorami UID (oraz GID).

Ogólnie konta systemowe nie powinny mieć prawidłowej powłoki logowania, ponieważ w większości przypadków stanowiłoby to zagrożenie bezpieczeństwa.

Konta usług (Service Accounts)

Konta usług są zwykle tworzone podczas instalacji i konfiguracji usług. Podobnie jak konta systemowe, są one przeznaczone dla obiektów, programów i usług, które nie będą działać jako superużytkownik.

W wielu dokumentach nie ma rozróżnienia między kontami systemowymi i usługowymi, a terminy te są używane jako synonimy. Obejmuje to lokalizację katalogów domowych, które zazwyczaj znajdują się poza katalogiem /home, jeśli w ogóle zostały zdefiniowane (konta usług często mają taki katalog, w porównaniu z kontami systemowymi) i żaden z nich nie ma prawidłowej powłoki logowania. Chociaż nie ma wiążącej definicji, główna różnica między kontami systemowymi i usługowymi dotyczy UID i GID:

Konto systemowe

UID/GID <100 (2 cyfry) lub <500-1000 (3 cyfry)

Konto usług

UID/GID >1000 (4+ cyfry), ale nie jest to “standardowe” lub “zwykłe” konto użytkownika, tylko konto usług z UID/GID >1000 (4+ cyfry)

Niektóre dystrybucje Linuxa nadal mają wstępnie zarezerwowane konta usług z UID<100, ale te konta można również uznać za konta systemowe, chociaż nie są one tworzone podczas instalacji systemu. Na przykład w dystrybucjach Linuxa opartych na Fedorze (w tym Red Hat), użytkownik serwera WWW Apache ma UID (i GID) równy 48, i dlatego jest wyraźnie kontem systemowym, mimo że ma katalog domowy (zwykle /usr/share/httpd lub /var/www/html/).

Note

Z punktu widzenia egzaminu LPI Linux Essentials, konta systemowe mają UID<1000, podczas gdy zwykłe konta użytkowników mają UID>1000. Ponieważ liczba zwykłych kont użytkowników wynosi > 1000, te identyfikatory UID mogą również obejmować konta usług.

Powłoki logowania i katalogi domowe

Niektóre konta mają powłokę logowania, podczas gdy inne nie mają jej ze względów bezpieczeństwa, ponieważ nie wymagają interaktywnego dostępu. Domyślną powłoką logowania w większości dystrybucji Linuxa jest Bourne Again Shell (bash), ale inne powłoki mogą być także dostępne. Przykładem innych powłok jest powłoka C Shell (csh), powłoka Korn shell (ksh) lub powłoka Z shell (zsh).

Użytkownik może zmienić swoją powłokę logowania za pomocą polecenia chsh. Domyślnie polecenie działa w trybie interaktywnym i wyświetla monit z pytaniem, której powłoki należy użyć. Odpowiedzią powinna być pełna ścieżka do pliku binarnego powłoki, jak poniżej:

$ chsh

Changing the login shell for emma
Enter the new value, or press ENTER for the default
	Login Shell [/bin/bash]: /usr/bin/zsh

Polecenie można również uruchomić w trybie nieinteraktywnym, w którym po parametrze -s następuje ścieżka do pliku binarnego, na przykład:

$ chsh -s /usr/bin/zsh

Większość kont ma zdefiniowany katalog domowy. W systemie Linux jest to zwykle jedyne miejsce, w którym ten użytkownik ma określone uprawnienia do zapisu - z kilkoma wyjątkami, np. tymczasowymi obszarami systemu plików. Jednak niektóre konta są celowo skonfigurowane w taki sposób, aby ze względów bezpieczeństwa konta te nie miały dostępu do zapisu nawet we własnym katalogu domowym.

Uzyskiwanie informacji o użytkownikach

Podawanie podstawowych informacji o użytkowniku jest powszechną praktyką w systemie Linux. W niektórych przypadkach użytkownicy będą musieli przełączyć się na konta innych użytkowników, zwiększając w ten sposób swoje uprawnienia do wykonywania uprzywilejowanych zadań.

Użytkownicy mogą także wyświetlać listę atrybutów i uzyskiwać do nich dostęp z wiersza poleceń za pomocą wiersza poleceń. Podstawowe informacje w ograniczonym kontekście nie są uprzywilejowaną operacją.

Przykładowo wyświetlanie aktualnych informacji o użytkowniku w wierszu poleceń jest prostym poleceniem, jak dwuliterowe polecenie id. Dane wyjściowe będą się różnić w zależności od identyfikatora logowania:

$ id
uid=1024(emma) gid=1024(emma) 1024(emma),20(games),groups=10240(netusers),20480(netadmin) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Na powyższej liście użytkownik (emma) ma identyfikatory, które mają następujące cechy:

  • 1024 = ID użytkownika (UID), po którym następuje nazwa użytkownika (nazwa logowania) w nawiasach.

  • 1024 = identyfikator grupy podstawowej (GID), po którym następuje nazwa grupy (nazwa zwyczajowa) w nawiasach.

  • Lista dodatkowych identyfikatorów GID (nazw grup), do których należy również użytkownik.

Ostatni użytkownicy zalogowani do systemu są wyświetlani za pomocą komendy last:

$ last
emma     pts/3        ::1              Fri Jun 14 04:28   still logged in
reboot   system boot  5.0.17-300.fc30. Fri Jun 14 04:03   still running
reboot   system boot  5.0.17-300.fc30. Wed Jun  5 14:32 - 15:19  (00:46)
reboot   system boot  5.0.17-300.fc30. Sat May 25 18:27 - 19:11  (00:43)
reboot   system boot  5.0.16-100.fc28. Sat May 25 16:44 - 17:06  (00:21)
reboot   system boot  5.0.9-100.fc28.x Sun May 12 14:32 - 14:46  (00:14)
root     tty2                          Fri May 10 21:55 - 21:55  (00:00)
	...

Informacje wymienione w kolumnach mogą się różnić, ale niektóre godne uwagi wpisy na powyższej liście to:

  • Użytkownik (emma) jest zalogowany przez sieć (pseudo TTY pts/3) i jest nadal zalogowany.

  • Podany jest czas bieżącego procesu uruchamiania i jądra; tutaj około 25 minut przed zalogowaniem się użytkownika.

  • Superużytkownik (root) został na krótko zalogowany w połowie maja za pośrednictwem konsoli wirtualnej (TTY tty2).

Wariantem polecenia last jest polecenie lastb, które wyświetla listę wszystkich ostatnich nieudanych prób logowania.

Polecenie who oraz w wyświetlają listę tylko aktywnych logowań w systemie:

$ who
emma  pts/3        2019-06-14 04:28 (::1)

$ w
 05:43:41 up  1:40,  1 user,  load average: 0.25, 0.53, 0.51
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
emma  pts/3     04:28    1:14m  0.04s  0.04s -bash

Oba polecenia pokazują część tych samych informacji. Na przykład, jeden użytkownik (emma) jest zalogowany za pomocą urządzenia pseudo-TTY (pts/3), a czas logowania to 04:28.

Polecenie w wyświetla więcej informacji, w tym następujące:

  • Bieżący czas i jak długo system był uruchomiony

  • Ilu użytkowników jest podłączonych

  • Średnie obciążenie systemu (load averages) z ostatnich 1, 5 i 15 minut

Dodatkowe informacje są wyświetlane dla każdej aktywnej sesji użytkownika.

  • Wybór całkowitego czasu wykorzystania procesora (IDLE, JCPU oraz PCPU)

  • Bieżący proces (-bash). Całkowity czas wykorzystania procesora przez ten proces jest ostatnim wpisem (PCPU).

Oba polecenia mają dodatkowe opcje wyświetlania różnych, dodatkowych informacji.

Przełączanie użytkowników i zwiększanie uprawnień

W idealnym świecie użytkownicy nigdy nie musieliby zwiększać uprawnień, aby wykonywać swoje zadania. System zawsze “po prostu działałby” i wszystko byłoby skonfigurowane pod kątem różnych dostępów.

Na szczęście dla nas, system Linux - po wyjęciu z pudełka - działa w ten sposób dla większości użytkowników, którzy nie są administratorami systemu, mimo że zawsze jest przestrzegany model bezpieczeństwa jak najmniej uprawnień. Oznacza to, że system Linux nie przyznaje nigdy więcej praw użytkownikom niż jest to absolutnie konieczne.

Istnieją jednak polecenia, które w razie potrzeby umożliwiają rozszerzenie uprawnień. Dwa z najważniejszych to su oraz sudo.

W większości dzisiejszych systemów Linux polecenie su jest używane tylko do przypisania uprawnień roota bieżącemu użytkownikowi, chyba że nazwa użytkownika jest określona po nazwie polecenia. Chociaż polecenie może być również wykorzystywane do przełączania się na innego użytkownika, to nie jest to dobra praktyka: użytkownicy powinni logować się do systemu Linux z innego systemu operacyjnego (najlepiej z innego komputera) przez sieć, fizyczną konsolę lub terminal.

emma ~$ su -
Password:
root ~#

Po wprowadzeniu hasła superużytkownika (root), użytkownik przełącza się na powłokę superużytkownika (zwróć uwagę na # na końcu wiersza poleceń) i może w ten sposób działać jako superużytkownik (root).

Przekazywanie haseł jest bardzo złą praktyką bezpieczeństwa, więc powinno być bardzo rzadko potrzebne wykorzystywanie polecenia su w nowoczesnym systemie Linux.

Symbol dollara ($) powinien kończyć wiersz poleceń powłoki w przypadku nieuprzywilejowanego użytkownika, podczas gdy symbol krzyżyka (#) powinien kończyć wiersz poleceń dla znaku zachęty powłoki superużytkownika (root). Zdecydowanie zaleca się, aby ostatni znak zachęty nigdy nie był definiowany inaczej niż przez ten “ogólnie przyjęty” standard, ponieważ ta nomenklatura jest również stosowana w materiałach do nauki, wliczając te.

Warning

Nigdy nie przełączaj się na superużytkownika (root) bez przekazywania parametru powłoki logowania (-). O ile system operacyjny lub producent oprogramowania nie zaleci inaczej, gdy wymagane jest wykorzystanie su należy zawsze uruchamiać su - (z bardzo nielicznymi wyjątkami). Środowiska użytkowników mogą powodować niepożądane zmiany w konfiguracji i problemy, gdy są używane jako superużytkownik w trybie pełnej kontroli.

Jaki jest największy problem z używaniem su do przełączania się na superużytkownika (root)? Jeśli sesja zwykłego użytkownika została skompromitowana, wówczas hasło superużytkownika (root) może zostać przechwycone. W tym miejscu pojawia się opcja “Switch User Do” (lub “Superuser Do”):

$ cat /sys/devices/virtual/dmi/id/board_serial
cat: /sys/devices/virtual/dmi/id/board_serial: Permission denied

$ sudo cat /sys/devices/virtual/dmi/id/board_serial
[sudo] password for emma:
/6789ABC/

W powyższym przykładzie użytkownik próbuje znaleźć numer seryjny swojej płyty systemowej. Jednak dostęp jest zabroniony, ponieważ te informacje są oznaczone jako uprzywilejowane.

Jednakże używając sudo i wprowadzając swoje własne hasło, użytkownik uwierzytelnia kim jest. Jeśli został upoważniony w konfiguracji sudoers do uruchomienia tego polecenia z podwyższonymi uprawnieniami, wówczas polecenie to zostanie wykonane.

Tip

Domyślnie pierwsze autoryzowane polecenie sudo będzie uwierzytelniać kolejne polecenia sudo przez (bardzo krótki) okres czasu. Jest to konfigurowane przez administratora systemu.

Pliki kontroli dostępu

Prawie wszystkie systemy operacyjne przechowują kontrolę dostępu w określonych lokalizacjach. W systemie Linux są to zazwyczaj pliki tekstowe zlokalizowane w katalogu /etc, w którym zwykle znajdują się pliki konfiguracyjne systemu. Domyślnie katalog ten ma uprawnienia do odczytu dla każdego użytkownika w systemie, ale uprawnienia zapisu w tym katalogu ma tylko użytkownik root.

Najważniejsze pliki związane z kontami użytkowników, atrybutami i kontrolą dostępu to:

/etc/passwd

Ten plik przechowuje podstawowe informacje o użytkownikach w systemie, w tym UID oraz GID, katalog domowy, powłokę itp. Pomimo mylącej nazwy, żadne hasła nie są tutaj przechowywane.

/etc/group

Ten plik zawiera podstawowe informacje o wszystkich grupach użytkowników w systemie, takie jak nazwa grupy, identyfikator GID i ich członkach.

/etc/shadow

Tutaj przechowywane są hasła użytkowników, które dla bezpieczeństwa zostały zaszyfrowane (zahashowane).

/etc/gshadow

Ten plik zawiera bardziej szczegółowe informacje o grupach, w tym zaszyfrowane hasło, które umożliwia użytkownikom tymczasowo stać się członkami grupy, listę użytkowników, którzy mogą zostać członkami grupy w dowolnym momencie oraz listę administratorów grup.

Warning

Te pliki nigdy nie powinny być edytowane bezpośrednio. Ta lekcja dotyczy tylko informacji przechowywanych w tych plikach, a nie tego, jak edytować te pliki.

Domyślnie każdy użytkownik może wejść do katalogu /etc i przeczytać pliki /etc/passwd oraz /etc/group. Domyślnie żaden użytkownik inny niż root, nie może czytać plików /etc/shadow lub /etc/gshadow.

Istnieją również pliki związane z podstawowym podniesieniem uprawnień w systemach Linux, takie jak polecenia su oraz sudo. Domyślnie są one dostępne tylko dla użytkownika root:

/etc/sudoers

Ten plik kontroluje, kto może uruchomić polecenie sudo i w jaki sposób.

/etc/sudoers.d

Ten katalog może zawierać pliki uzupełniające ustawienia w pliku sudoers.

Z punktu widzenia egzaminu LPI Linux Essentials, wystarczy znać ścieżkę i nazwę domyślnego pliku konfiguracyjnego sudo oraz /etc/sudoers. Jego konfiguracja wykracza poza zakres tych materiałów.

Warning

Mimo, że plik /etc/sudoers jest plikiem tekstowym, nigdy nie należy go edytować bezpośrednio. Jeśli potrzebne są jakieś zmiany w jego zawartości, należy je wprowadzić za pomocą narzędzia visudo.

Plik /etc/passwd

Plik /etc/passwd jest powszechnie nazywany “plikiem z hasłami”. Każdy wiersz zawiera wiele pól, które są zawsze oddzielone dwukropkiem (:). Pomimo nazwy, rzeczywisty skrót hasła jednokierunkowego nie jest już dziś przechowywany w tym pliku.

Typowa składnia wiersza w tym pliku to:

USERNAME:PASSWORD:UID:GID:GECOS:HOMEDIR:SHELL
Pola mają następujące znaczenie:
USERNAME

Nazwa użytkownika, czyli login (nazwa), na przykład root, nobody, emma.

PASSWORD

Starsza lokalizacja miejsca na skrót hasła. Prawie zawsze występuje x, co oznacza, że ​​hasło jest obecnie przechowywane w pliku /etc/shadow.

UID

Identyfikator użytkownika (UID), na przykład 0, 99, 1024.

GID

Domyślny identyfikator grupy (GID), na przykład 0, 99, 1024.

GECOS

Lista w formacie CSV zawierająca informacje o użytkowniku, w tym imię i nazwisko, lokalizację, numer telefonu. Na przykład: Emma Smith,42 Douglas St,555.555.5555

HOMEDIR

Ścieżka do katalogu domowego użytkownika, na przykład /root, /home/emma itd.

SHELL

Domyślna powłoka dla danego użytkownika, na przykład /bin/bash, /sbin/nologin, /bin/ksh, etc.

Na przykład poniższy wiersz opisuje użytkownika emma:

emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555:/home/emma:/bin/bash
Zrozumienie pola GECOS (GECOS Field)

Pole GECOS zawiera trzy lub więcej pól oddzielonych przecinkami (,), jest to zatem lista wartości oddzielonych przecinkami CSV (Comma Separated Values). Chociaż nie ma określonego standardu, pola są zwykle uporządkowane w następującej kolejności:

NAME,LOCATION,CONTACT
Pola mają następujące znaczenie:
NAME

To informacje o użytkowniku: “Pełna nazwa” lub “Nazwa oprogramowania” w przypadku konta usługi.

LOCATION

To zazwyczaj fizyczna lokalizacja użytkownika w budynku, numer pokoju, dział kontaktowy lub osoba w przypadku konta serwisowego.

CONTACT

Zawiera informacje kontaktowe, takie jak numer telefonu domowego lub służbowego.

Dodatkowe pola mogą zawierać dodatkowe informacje kontaktowe, takie jak numer domowy lub adres e-mail. Aby zmienić informacje w polu GECOS, użyj polecenia chfn i odpowiedz na pytania, jak pokazano poniżej. Jeśli po nazwie polecenia nie zostanie podana żadna nazwa użytkownika, zmień informacje dla bieżącego użytkownika:

$ chfn

Changing the user information for emma
Enter the new value, or press ENTER for the default
	Full Name: Emma Smith
	Room Number []: 42
	Work Phone []: 555.555.5555
	Home Phone []: 555.555.6666

Plik /etc/group

Plik /etc/group zawiera pola zawsze oddzielone dwukropkiem (:) i przechowuje podstawowe informacje o grupach w systemie. Czasami jest również nazywany “plikiem grup”. Składnia każdej linii to:

NAME:PASSWORD:GID:MEMBERS
Pola mają następujące znaczenie:
NAME

Nazwa grupy, na przykład root, users, emma itd.

PASSWORD

Oryginalna, starsza lokalizacja opcjonalnego skrótu hasła grupy. Prawie zawsze wystepuje x, co oznacza, że ​​hasło (jeśli jest zdefiniowane) jest obecnie przechowywane w pliku /etc/gshadow.

GID

Identyfikator grupy (GID), np. 0, 99, 1024.

MEMBERS

Rozdzielana przecinkami lista nazw użytkowników należących do grupy, na przykład jsmith,emma.

Poniższy przykład przedstawia wiersz zawierający informacje o grupie students:

students:x:1023:jsmith,emma

Jeśli grupa jest grupą podstawową dla użytkownika, użytkownik nie musi być wymieniony w polu jako członek. Jeśli Jeśli użytkownik jest wymieniony, oznacza to, że jest zdublowany i jest zbędny tj. nie ma zmian w funkcjonalności, czy jest wymieniony, czy nie.

Note

Używanie haseł dla grup wykracza poza zakres tej lekcji. Jednakże należy wspomnieć, że skrót hasła, jeśli został zdefiniowany, jest przechowywany w pliku /etc/gshadow, co również wykracza poza zakres tej lekcji.

Plik /etc/shadow

Poniższa tabela zawiera listę atrybutów przechowywanych w pliku /etc/shadow, powszechnie nazywanym “plikiem shadow”. Plik zawiera pola, które są zawsze rozdzielane dwukropkiem (:). Chociaż plik ma wiele pól, większość z nich wykracza poza zakres tej lekcji, z wyjątkiem pierwszych dwóch.

Podstawowa składnia wiersza w tym pliku to:

USERNAME:PASSWORD:LASTCHANGE:MINAGE:MAXAGE:WARN:INACTIVE:EXPDATE
Pola mają następujące znaczenie:
USERNAME

Nazwa użytkownika (taka sama jak /etc/passwd), na przykład root, nobody, emma.

PASSWORD

Jednokierunkowy skrót hasła, łącznie z poprzedzającą solą. Na przykład: !!, !$1$01234567$ABC…​, $6$012345789ABCDEF$012…​.

LASTCHANGE

Data ostatniej zmiany hasła w dniach od “epoch”, jak na przykład 17909.

MINAGE

Minimalny wiek hasła w dniach.

MAXAGE

Maksymalny wiek hasła, w dniach.

WARN

Okres ostrzegawczy przed wygaśnięciem hasła, w dniach.

INACTIVE

Maksymalny wiek hasła po dacie wygaśnięcia, w dniach.

EXPDATE

Data wygaśnięcia hasła w dniach od “epoch”.

W poniższym przykładzie możesz zobaczyć przykładowy wpis z pliku /etc/shadow. Zwróć uwagę, że niektóre wartości, takie jak INACTIVE and EXPDATE, są niezdefiniowane.

emma:$6$nP532JDDogQYZF8I$bjFNh9eT1xpb9/n6pmjlIwgu7hGjH/eytSdttbmVv0MlyTMFgBIXESFNUmTo9EGxxH1OT1HGQzR0so4n1npbE0:18064:0:99999:7:::

“Epoka” (“Epoch”) systemu POSIX to północ (godz. 00:00), według czasu uniwersalnego UTC (Universal Coordinate Time), czwartek, 1 stycznia 1970 roku. Większość dat i godzin POSIX jest w sekundach od „epoch” lub w przypadku pliku /etc/shadow w dniach od “epoch”.

Note

Plik shadow jest zaprojektowany w taki sposób, że może być odczytany tylko przez superużytkownika i wybrane podstawowe usługi uwierzytelniania systemu, które sprawdzają jednokierunkowy skrót hasła podczas logowania lub innej procedury uwierzytelniania.

Chociaż istnieją różne rozwiązania uwierzytelniania, najbardziej podstawową metodą przechowywania haseł jest jednokierunkowa funkcja skrótu (hash function). Dzieje się tak, aby hasło nigdy nie było przechowywane w systemie w postaci zwykłego tekstu, ponieważ funkcja haszowania (skrótu) jest nieodwracalna. Możesz przekonwertować hasło na hash, ale (jeszcze) nie jest możliwe przekonwertowanie hasha z powrotem na hasło.

Co najwyżej metoda brute force (brutalnej siły) jest wymagana do haszowania (mieszania) wszystkich kombinacji hasła, dopóki jedna z nich nie będzie pasować. Aby zmniejszyć prawdopodobieństwo, że skrót hasła zostanie złamany w systemie, systemy Linux używają losowej “soli” na każdym skrócie hasła użytkownika. Powoduje to, że skrót hasła użytkownika w jednym systemie Linux zwykle nie będzie taki sam jak w innym systemie Linux, nawet jeśli hasło jest takie samo.

W pliku /etc/shadow, hasło może przybierać różne formy, zazwyczaj w następujący sposób:

!!

Oznacza to konto “wyłączone” (bez możliwości uwierzytelnienia), dla którego nie jest przechowywany skrót hasła.

!$1$01234567$ABC…​

Konto “wyłączone” (rozpoznawalne po początkowym wykrzykniku), z poprzednią funkcją skrótu, solą hashującą i zapisanymi ciągami hash znaków.

$1$0123456789ABC$012…​

Konto "`włączone`"z funkcją skrótu, solą hashującą i zapisanymi ciągami hash znaków.

Funkcja skrótu, sól mieszająca i ciąg znaków skrótu są wprowadzane i rozdzielane symbolem dolara ($). Długość hasha soli musi wynosić od ośmiu do szesnastu (8-16) znaków. Oto przykłady trzech najczęściej występujących:

$1$01234567$ABC…​

Funkcja skrótu MD5 (1), z przykładową długością skrótu wynoszącą 8.

$5$01234567ABCD$012…​

Funkcja skrótu SHA256 (5), z przykładową długością skrótu 12.

$6$01234567ABCD$012…​

Funkcja skrótu SHA512 (6), z przykładową długością skrótu 12.

Note

Funkcja skrótu MD5 jest uważana za niezabezpieczoną kryptograficznie przy obecnym (od 2010 roku) poziomie ASIC, a nawet przy ogólnej wydajności obliczeniowej SIMD. Na przykład amerykańskie federalne standardy przetwarzania informacji FIPS (US Federal Information Processing Standards) nie zezwalają na używanie MD5 do jakichkolwiek funkcji kryptograficznych, a jedynie do bardzo ograniczonych aspektów walidacji, ale nie do integralności podpisów cyfrowych lub podobnych celów.

Aby zdać egzamin z LPI Linux Essentials, musisz tylko zrozumieć, że skrót hasła dla użytkownika lokalnego jest przechowywany tylko w pliku /etc/shadow, który mogą odczytać tylko usługi uwierzytelniające lub superużytkownik. Plik ten można modyfikować za pomocą innych poleceń.

Ćwiczenia z przewodnikiem

  1. Rozważ następujące dane wyjściowe polecenia id:

    $ id emma
    uid=1000(emma) gid=1000(emma) groups=1000(emma),4(adm),5(tty),10(uucp),20(dialout),27(sudo),46(plugdev)

    W których plikach przechowywane są następujące atrybuty?

    UID oraz GID

    Grupy

    • W którym pliku jest również zapisane hasło użytkownika?

  2. Który z poniższych typów kryptografii jest domyślnie używany do lokalnego przechowywania haseł w systemie Linux?

    • Asymetryczny

    • Jednokierunkowy hash

    • Symetryczny

    • ROT13

  3. Jeśli konto ma identyfikator użytkownika (UID) poniżej 1000, jaki to jest typ konta?

  4. Jak uzyskać listę aktywnych logowań w Twoim systemie, a także ich liczbę?

  5. Używając polecenia grep otrzymaliśmy poniższy wynik z informacjami o użytkowniku emma.

    $ grep emma /etc/passwd
    emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555,:/home/emma:/bin/ksh

    Uzupełnij tabelę odpowiednimi informacjami, korzystając z danych wyjściowych z poprzedniego polecenia:

    Nazwa użytkownika

    Hasło

    UID

    Podstawowy GID

    GECOS

    Katalog domowy

    Shell

Ćwiczenia eksploracyjne

  1. Porównaj wyniki polecenia last do wyników polecenia w oraz who. W jakich szczegółach dane wyjściowe polecenia się różnią?

  2. Uruchom polecenia who oraz w -his.

    • Które informacje zostały usunięte z wyniku polecenia w z wykorzystaniem opcji “bez nagłówka” (-h) oraz “krótko” (-s)?

    • Jakie informacje zostały dodane w wyniku polecenia w z wykorzystaniem opcji “Adres IP” (-i)?

  3. W którym pliku jest przechowywany skrót hasła jednokierunkowego konta użytkownika?

  4. Który plik zawiera listę grup, których członkiem jest konto użytkownika? Jak można stworzyć listę grup, których członkiem jest konto użytkownika?

  5. Domyślnie co najmniej jeden (1+) z poniższych plików nie jest domyślnie odczytywany przez zwykłych, nieuprzywilejowanych użytkowników. Który to plik?

    • /etc/group

    • /etc/passwd

    • /etc/shadow

    • /etc/sudoers

  6. Jak zmieniłbyś powłokę logowania bieżącego użytkownika na powłokę Korn Shell (/usr/bin/ksh) w trybie nieinteraktywnym?

  7. Dlaczego katalogu domowego użytkownika root nie ma w katalogu /home?

Podsumowanie

W tej lekcji dowiedzieliśmy się o bazach danych użytkowników i grup systemu Linux. Poznaliśmy najważniejsze właściwości użytkowników i grup, w tym ich nazwy i identyfikatory numeryczne. Sprawdziliśmy również, jak działa haszowanie haseł w systemie Linux i jak użytkownicy są przypisywani do grup.

Wszystkie te informacje są przechowywane w następujących czterech plikach, które zapewniają najbardziej podstawowe lokalne zabezpieczenia dostępu w systemie Linux:

/etc/passwd

Wszystkie atrybuty POSIX lokalnych kont użytkowników w systemie, z wyjątkiem skrótu hasła, mogą być odczytane przez każdego użytkownika.

/etc/group

Wszystkie atrybuty POSIX kont grup w systemie mogą być odczytane przez każdego użytkownika.

/etc/shadow

Wszystkie skróty haseł użytkowników lokalnych w systemie (i informacje o wygaśnięciu), są nieczytelne dla wszystkich (mogą być odczytane tylko przez wybrane procesy lub superużytkownika).

/etc/sudoers

Wszystkie informacje o nadaniu i dopuszczeniu lokalnych uprawnień do systemu za pomocą polecenia sudo.

W tej lekcji omówiono następujące polecenia:

id

Lista rzeczywistych (lub efektywnych) identyfikatorów użytkowników i grup.

last

Lista ostatnio zalogowanych użytkowników.

who

Lista aktualnie zalogowanych użytkowników.

w

Polecenie podobne do who, ale z dodatkowym kontekstem.

su

Polecenie su (Switch User or Superuser). Przełącz na innego użytkownika z powłoką logowania lub uruchamia polecenia jako ten użytkownik, podając hasło tego użytkownika.

sudo

Polecenie sudo (Switch User do). Przełącz użytkownika (lub Superużytkownika) Do: Bieżący użytkownik, jeśli jest uprawniony, wprowadza własne hasło (jeśli jest wymagane), aby podnieść swoje uprawnienia.

chsh

Zmienia powłokę użytkownika.

chfn

Zmienia informacje o użytkowniku w polu GECOS.

Odpowiedzi do ćwiczeń z przewodnikiem

  1. Rozważ następujące dane wyjściowe polecenia id:

    $ id emma
    uid=1000(emma) gid=1000(emma) groups=1000(emma),4(adm),5(tty),10(uucp),20(dialout),27(sudo),46(plugdev)

    W których plikach przechowywane są następujące atrybuty?

    UID oraz GID

    /etc/passwd

    Grupy

    /etc/group

    • W którym pliku jest również zapisane hasło użytkownika?

      Zaszyfrowane hasło użytkownika jest przechowywane w pliku /etc/shadow.

  2. Który z poniższych typów kryptografii jest domyślnie używany do lokalnego przechowywania haseł w systemie Linux?

    • Asymetryczny

    • Jednokierunkowy hash

    • Symetryczny

    • ROT13

      Domyślnie do przechowywania haseł używany jest jednokierunkowy hash.

  3. Jeśli konto ma identyfikator użytkownika (UID) poniżej 1000, jaki to jest typ konta?

    Konta z UID mniejszym niż 1000 są zwykle kontami systemowymi.

  4. Jak uzyskać listę aktywnych logowań w Twoim systemie, a także ich liczbę?

    Użyj polecenia w. Oprócz listy wszystkich aktywnych logowań, wyświetla również takie informacje jak liczba zalogowanych użytkowników, obciążenie systemu i czas pracy.

  5. Używając polecenia grep otrzymaliśmy poniższy wynik z informacjami o użytkowniku emma.

    $ grep emma /etc/passwd
    emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555,:/home/emma:/bin/ksh

    Uzupełnij tabelę odpowiednimi informacjami, korzystając z danych wyjściowych z poprzedniego polecenia:

    Nazwa użytkownika

    emma

    Hasło

    x - powinno zawsze mieć wartość x dla prawidłowego, aktywnego loginu użytkownika

    UID

    1000

    Podstawowy GID

    1000

    GECOS

    Emma Smith,42 Douglas St,555.555.5555

    Katalog domowy

    /home/emma

    Shell

    /bin/ksh

Odpowiedzi do ćwiczeń eksploracyjnych

  1. Porównaj wyniki polecenia last do wyników polecenia w oraz who. W jakich szczegółach dane wyjściowe polecenia się różnią?

    Narzędzia w oraz who wyświetlają użytkowników tylko aktualnie zalogowanych do systemu, podczas gdy last wyświetla również listę użytkowników, którzy się rozłączyli. Polecenie w wyświetla użycie systemu, natomiast polecenie who takiej informacji nie wyświetla.

  2. Uruchom polecenia who oraz w -his.

    • Które informacje zostały usunięte z wyniku polecenia w z wykorzystaniem opcji “bez nagłówka” (-h) oraz “krótko” (-s)?

      Nagłówek nie jest wyświetlany, co jest przydatne do analizowania. Czas logowania i wybrane informacje o procesorze nie są wyświetlane.

    • Jakie informacje zostały dodane w wyniku polecenia w z wykorzystaniem opcji “Adres IP” (-i)?

      Spowoduje to wyświetlenie adresu IP i zamiast próby rozpoznania nazwy DNS, a także wyświetli nazwę hosta. Ta opcja w lepiej dopasowuje domyślne wyjście polecenia last.

  3. W którym pliku jest przechowywany skrót hasła jednokierunkowego konta użytkownika?

    Plik /etc/shadow przechowuje jednokierunkowy skrót hasła konta użytkownika, ponieważ plik ten nie może być odczytany przez zwykłe, nieuprzywilejowane konto użytkownika (w przeciwieństwie do pliku /etc/passwd).

  4. Który plik zawiera listę grup, których członkiem jest konto użytkownika? Jak można stworzyć listę grup, których członkiem jest konto użytkownika?

    Plik /etc/group zawiera listę w formacie CSV nazw użytkowników w ostatnim polu, “członkowie”, w dowolnym wierszu dla grupy.

    Każdy wiersz w pliku /etc/group, w którym użytkownik jest wymieniony w ostatnim polu, “członkowie”, identyfikuje użytkownika jako członka tej grupy - pod warunkiem, że plik jest poprawnie sformatowany (rozdzielany CSV). Ponadto członkostwo użytkownika w grupie podstawowej w pliku /etc/passwd będzie miało również pasujący wpis w pliku /etc/group, zarówno dla nazwy grupy, jak i GID.

  5. Domyślnie co najmniej jeden (1+) z poniższych plików nie jest domyślnie odczytywany przez zwykłych nieuprzywilejowanych użytkowników. Który to plik?

    • /etc/group

    • /etc/passwd

    • /etc/shadow

    • /etc/sudoers

      Pliki /etc/shadow oraz /etc/sudoers nie są domyślnie odczytywalne przez zwykłych użytkowników, tylko przez superużytkownika i wybrane usługi systemowe. Odpowiedzi te zależą od używanych systemów i nazw użytkowników.

  6. Jak zmieniłbyś powłokę logowania bieżącego użytkownika na powłokę Korn Shell (/usr/bin/ksh) w trybie nieinteraktywnym?

    $ chsh -s /usr/bin/ksh
  7. Dlaczego katalogu domowego użytkownika root nie ma w katalogu /home?

    Ponieważ konto root jest wymagane do rozwiązywania problemów i naprawiania błędów, które mogą obejmować problemy z systemem plików związane z katalogiem /home. W takich przypadkach root powinien być w pełni funkcjonalny, nawet jeśli system plików /home nie jest jeszcze dostępny.

Linux Professional Insitute Inc. Wszelkie prawa zastrzeżone. Odwiedź stronę Learning Materials: https://learning.lpi.org
Dzieło jest udostępnione na licencji Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

Następna lekcja

5.2 Tworzenie użytkowników i grup (5.2 Lekcja 1)

Przeczytaj następną lekcję

Linux Professional Insitute Inc. Wszelkie prawa zastrzeżone. Odwiedź stronę Learning Materials: https://learning.lpi.org
Dzieło jest udostępnione na licencji Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

LPI jest organizacją non-profit.

© 2022 Linux Professional Institute (LPI) jest światowym standardem certyfikacji i organizacją wspierającą karierę profesjonalistów open source. Posiadając ponad 200 000 certyfikatów, LPI jest pierwszą i największą na świecie neutralną w stosunku do dostawców jednostką certyfikującą Linuksa i open source. LPI certyfikuje profesjonalistów w ponad 180 krajach, przeprowadza egzaminy w wielu językach i posiada setki partnerów szkoleniowych.

Naszym celem jest stworzenie ekonomicznych i kreatywnych możliwości dla każdego poprzez powszechny dostęp do wiedzy i umiejętności open source.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Skontaktuj się z nami
  • Polityka prywatności i plików cookiey

Zauważyłeś błąd lub chcesz pomóc ulepszyć tę stronę? Prosimy daj nam znać.

© 1999–2022 The Linux Professional Institute Inc. Wszelkie prawa zastrzeżone.