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 TTYpts/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 (TTYtty2
).
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
orazPCPU
) -
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 ( |
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 |
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 |
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 |
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ładroot
,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
-
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?
-
-
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
-
-
Jeśli konto ma identyfikator użytkownika (UID) poniżej 1000, jaki to jest typ konta?
-
Jak uzyskać listę aktywnych logowań w Twoim systemie, a także ich liczbę?
-
Używając polecenia
grep
otrzymaliśmy poniższy wynik z informacjami o użytkownikuemma
.$ 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
-
Porównaj wyniki polecenia
last
do wyników poleceniaw
orazwho
. W jakich szczegółach dane wyjściowe polecenia się różnią? -
Uruchom polecenia
who
orazw -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
)?
-
-
W którym pliku jest przechowywany skrót hasła jednokierunkowego konta użytkownika?
-
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?
-
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
-
-
Jak zmieniłbyś powłokę logowania bieżącego użytkownika na powłokę Korn Shell (
/usr/bin/ksh
) w trybie nieinteraktywnym? -
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
-
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
.
-
-
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.
-
-
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.
-
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. -
Używając polecenia
grep
otrzymaliśmy poniższy wynik z informacjami o użytkownikuemma
.$ 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żytkownikaUID
1000
Podstawowy GID
1000
GECOS
Emma Smith,42 Douglas St,555.555.5555
Katalog domowy
/home/emma
Shell
/bin/ksh
Odpowiedzi do ćwiczeń eksploracyjnych
-
Porównaj wyniki polecenia
last
do wyników poleceniaw
orazwho
. W jakich szczegółach dane wyjściowe polecenia się różnią?Narzędzia
w
orazwho
wyświetlają użytkowników tylko aktualnie zalogowanych do systemu, podczas gdylast
wyświetla również listę użytkowników, którzy się rozłączyli. Poleceniew
wyświetla użycie systemu, natomiast poleceniewho
takiej informacji nie wyświetla. -
Uruchom polecenia
who
orazw -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 polecenialast
.
-
-
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
). -
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. -
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.
-
-
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
-
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 przypadkachroot
powinien być w pełni funkcjonalny, nawet jeśli system plików/home
nie jest jeszcze dostępny.