Listy kontroli dostępu (ang. Access Control List, ACL) rozszerzają standardowy mechanizm uprawnień, kontrolujący dostęp do plików (a także katalogów, urządzeń, gniazd i innych obiektów systemu plików).
Standardowe uprawnienia definiują prawo do odczytu (r), zapisu (w) i wykonania (x) dla:
ACL pozwalają na bardziej rozbudowaną kontrolę - dają możliwość przydzielania trzech wymienionych uprawnień (rwx) nie tylko dla właściciela pliku, ale dla dowolnie wskazanego użytkownika, nie tylko dla grupy pliku, ale dla dowolnie wskazanej grupy.
ACL są wspierane przez różne linuksowe systemy plików, mi.in.: xfs, ext2, ext3, ext4, reiserfs, nfs, jfs.
Co ciekawe spośród znanych systemów plików nie obsługują ACL: FAT16, FAT32, zaś system plików exFAT w jednej z wersji systemu Windows je obsługiwał, ale współczesne wersje tego systemu list ACL w exFAT nie obsługują.
Uważa się, że ACL są zgodne ze standardem POSIX. W rzeczywistości opisujące je standardy POSIX 1003.1e i 1003.2c draft 17 nie zostały oficjalnie przyjęte. ACL są również wspierane w systemach firmy Microsoft, jednak nie zachowują one pełnej zgodności ze standardem i są wspierane jedynie przez system plików NTFS.
Minimalna lista kontroli dostępu pokrywa się ze standardowymi uprawnieniami, natomiast lista rozszerzona zawiera dodatkową pozycję - maskę i może zawierać także pozycje dla poszczególnych użytkowników i grup.
W liście ACL wyróżniamy następujące typy pozycji (w nawiasach słowa kluczowe):
(Uwaga: obecna w literaturze frazeologia nazwany użytkownik czy nazwana grupa ma to do siebie, że dobrze kojarzy się z angielską terminologią, jednak spośród wielu znaczeń angielskiego słowa name najbardziej pasujące tutaj to to mention explicitly : specify).
Rozszerzone listy kontroli dostępu oferują możliwość maskowania uprawnień, co oznacza, że podczas obliczania efektywnych uprawnień, oprócz uprawnień zdefiniowanych dla danego użytkownika, brana jest pod uwagę także maska. Z dwoma wyjątkami: uprawnienia zdefiniowane dla właściciela i dla tzw. pozostałych (other) są zawsze efektywne (maska nie ma na nie wpływu).
Efektywne uprawnienia do pliku są koniunkcją bitową maski i uprawnień zdefiniowanych w odpowiedniej pozycji (dla nazwanego użytkownika, grupy właściciela lub nazwanej grupy).
Przykład
Jeżeli prawa do pliku zdefiniowane są w następujący sposób:
user:testowy:r-x mask::rw-
to efektywne uprawnienia użytkownika "testowy" to: r--
Uwaga: domyślnie maska jest aktualizowana automatycznie i określa maksymalne uprawnienia dla użytkowników należących do nazwanych użytkowników, grupy właściciela lub grup nazwanych.
Rozszerzone uprawnienia są stosowane wg następującego algorytmu:
Do zarządzania listami ACL służą dwa polecenia:
Polecenie "getfacl" wypisuje rozszerzone uprawnienia do plików.
Przykład
% touch plik-testowy % ls -l plik-testowy -rw-r--r-- 1 janek bsk 0 2016-10-05 14:46 plik-testowy
% getfacl plik-testowy # file: plik-testowy # owner: janek # group: bsk user::rw- group::r-- other::r--
% getfacl plik-testowy –-omit-header user::rw- group::r-- other::r--
Polecenie "setfacl" pozwala modyfikować uprawnienia.
Jeżeli chcemy dodać lub zmienić uprawnienia używamy opcji -m (jak modify), a następnie podajemy: pozycję z listy (patrz punkt 1), jakie uprawnienia chcemy nadać (rwx) i jakiemu plikowi.
Przykład
% setfacl -m u:ala:rwx plik-testowy
% getfacl plik-testowy # file: plik-testowy # owner: janek # group: bsk user::rw- user:ala:rwx group::r-- mask::rwx other::r--
% ls -l plik-testowy -rw-rwxr--+ 1 janek bsk 0 2016-10-05 14:46 plik-testowy
Zwróćmy uwagę na wiersz powyżej. Znak + oznacza, że plik posiada rozszerzone uprawnienia, a zamiast uprawnień grupy widzimy maskę (co nie powinno dziwić, bo maska opisuje maksymalne uprawnienia dla wszelkich grup).
Maskę możemy zmieniać korzystając z setfacl (mask::), a także poprzez chmod (zmiana praw dla grupy powoduje zmianę maski).
Opcji -x (jak exclude) używa się tak:
% setfacl -x u:ala plik-testowy % getfacl plik.txt –-omit-header user::rw- group::r-- mask::r-- other::r--
% ls -l plik.txt rw-r--r--+ 1 janek bsk 0 2016-10-05 14:46 plik-testowy
Inne opcje pozwalają na przykład na usunięcie uprawnień dotyczących wszystkich pozycji (-b, jak blank), czy modyfikację uprawnień rekurencyjnie w drzewie katalogów (-R).
Uprawnienia domyślne dotyczą tylko katalogów. Jeżeli katalogowi nadamy domyślne uprawnienia rozszerzone, to nowo utworzone pozycje w tym katalogu będą je dziedziczyć.
Do modyfikowania uprawnień domyślnych służy opcja -d (jak default) polecenia setfacl, po której następują znane już -m, -x itd.
Przykład dodania uprawnień domyślnych
% setfacl -d -m group:testowa:wx bsk-lab1 % getfacl bsk-lab1 –-omit-header user::rwx group::r-x other::r-x default:user::rwx default:group::r-x default:group:testowa:-wx default:mask::rwx default:other::r-x
Opcja -k kasuje domyślne uprawnienia.
Poniższe obrazki ilustrują działanie ACL w systemie Windows XP.
System plików NTFS umożliwia związanie z każdym plikiem (lub katalogiem) list kontroli dostępu. Dostęp do prostych ustawień ACL pliku jest możliwy z poziomu np. Eksploratora Windows w opcji Właściwości (menu Plik lub kontekstowe). Rozszerzone listy ACL są dostępne po wyborze uprawnień Zaawansowanych.
System Windows nie zapewniał obsługi ACL dla swoich pierwotnych systemów plików FAT (FAT16 i FAT32). W Windows CE 6 wprowadzono obsługę ACL dla systemu plików exFAT, jednak w późniejszych wersjach systemu Windows nie została ona wprowadzona.
Zalety ACL:
Problemy: nie wszystkie narzędzia wspierają ACL:
Jedną z metod radzenia sobie z drugim problemem jest zapamiętywanie informacji ACL. Na przykład polecenie:
% getfacl -R --skip-base . >backup.acl
spowoduje zapisanie do pliku "backup.acl" informacji o ACL z całego drzewa systemu plików (opcja -R) z pominięciem domyślnych uprawnień (--skip-base). Używając polecenia setfacl z opcją --restore=backup.acl, można potem przywrócić rozszerzone uprawnienia.
man 5 acl
man do poleceń: getfacl, setfacl, chmod, umask
1. Sprawdź czy istnieje użytkownik "testowy", a jeżeli nie to załóż konto o takim loginie.
2. Stwórz katalog "bsk1" z prawami 0755 i obejrzyj standardowe uprawnienia oraz listę rozszerzonych uprawnień do tego katalogu.
3. Dodaj (rozszerzone) uprawnienia do odczytu, zapisu i przeszukiwania do powyższego katalogu użytkownikowi "testowy". Ponownie sprawdź uprawnienia.
4. Zaloguj się jako "testowy" i sprawdź, czy możesz zapisać jakiś plik do katalogu "bsk1" stworzonego w poprzednim punkcie.
5. Zabierz grupie właściciela prawo do pisania dla katalogu "bsk1".
6. Zaloguj się jako "testowy" i sprawdź, czy możesz zapisać jakiś plik do katalogu "bsk1" stworzonego w poprzednim punkcie. Wyjaśnij powody zaistniałej sytuacji.
7. Po zakończeniu ćwiczenia usuń katalog "bsk1" wraz z zawartością.
1. Stwórz katalog "bsk2" z prawami 0777 i obejrzyj standardowe uprawnienia oraz listę rozszerzonych uprawnień do tego katalogu.
2. Dodaj (rozszerzone) uprawnienia do odczytu i przeszukiwania do powyższego katalogu użytkownikowi "testowy".
3. Zaloguj się jako "testowy" i sprawdź, czy możesz zapisać jakiś plik do katalogu "bsk2" stworzonego w poprzednim punkcie. Wyjaśnij powody zaistniałej sytuacji.
4. Po zakończeniu ćwiczenia usuń katalog "bsk2" wraz z zawartością.
1. Sprawdź, czy istnieje grupa "testowa", a jeżeli nie, to załóż grupę o takiej nazwie.
2. Stwórz katalog "bsk3" z prawami 0750. Jakie uprawnienia będą miały pliki założone w tym katalogu?
3. Stwórz plik "plik3a" w katalogu "bsk3".
4. Dodaj domyślne uprawnienia do katalogu "bsk3": do odczytu, zapisu i wykonywania dla grupy "testowa" oraz do odczytu i wykonywania dla pozostałych.
5. Stwórz plik "plik3b" oraz katalog "kat3" w katalogu "bsk3".
6. Porównaj uprawnienia obiektów z katalogu "bsk3".
7. Po zakończeniu ćwiczenia usuń katalog "bsk3" wraz z zawartością.
Jądro systemu, usługi systemowe i różne aplikacje zapisują informacje o swoim działaniu w dziennikach systemowych (logach). Dlatego pierwszym miejscem, do którego należy zajrzeć, kiedy jakaś usługa nie uruchamia się poprawnie, jest odpowiedni dziennik.
W systemach uniksowych i linuksowych dominującym systemem rejestracji zdarzeń jest syslog. Poznamy bliżej jedną z jego nowszych wersji o nazwie rsyslog.
Pliki dzienników znajdują się z reguły w katalogu:
/var/log
Ważniejsze pliki które możesz tam znaleźć to :
Wpis do dziennika jest najczęściej pojedynczym wierszem zawierającym datę i czas wystąpienia zdarzenia, a także jego rodzaj i poziom ważności.
Za zbieranie informacji o działaniu systemu i umieszczania ich w plikach odpowiada usługa systemowa syslogd (lub nowsza rsyslogd). Plikiem konfiguracyjnym dla syslogd jest /etc/syslog.conf a dla rsyslogd /etc/rsyslog.conf (zachowana jest zgodność wstecz).
(r)syslog umożliwia sortowanie komunikatów ze względu na źródło ich pochodzenia i stopień ważności oraz na kierowanie ich w różne miejsca: do plików, na terminale użytkowników a także na inne komputery.
Plik konfiguracyjny opisuje reguły systemu rejestrowania. Podstawowy format jest następujący:
usługa.poziom <co najmniej jeden znak tabulacji> przeznaczenie
Usługa określa z jakiej części systemu pochodzi informacja. Może przyjąć następujące wartości: auth, authpriv, cron, daemon, kern, ftp, local0-7, lpr, mail, mark, news, syslog, user, uucp.
Poziom określa priorytety komunikatów. Wszystkie wiadomości o tym lub wyższym priorytecie trafiają do dziennika. Poziomy ważności są następujące (w kolejności rosnącego znaczenia): debug, info, notice, warning (warn), error (err), crit, alert, emerg (panic).
Znak "=" przed nazwą poziomu wskazuje, że należy zbierać wiadomości o dokładnie takim poziomie, a "!" oznacza "oprócz tego i wyższych poziomów". Symbol "*" oznacza wszystkie usługi i poziomy a "none" - "żaden poziom". W pojedynczej regule może występować wiele usług oddzielonych przecinkami lub par usługa-poziom oddzielonych średnikami.
Przeznaczenie określa gdzie trafiają zebrane komunikaty. Może to być między innymi:
Nazwa pliku poprzedzona "-" oznacza, że system plików nie powinien być synchronizowany po zapisaniu każdego wpisu do dziennika (włączone buforowanie).
Przykład
mail.info /var/log/mail.log
Powyższy wpis spowoduje, że komunikaty systemu pocztowego o poziomach info i wyższych będą trafiały do pliku /var/log/mail.log a następujący:
*.emerg;user.none *
że wszystkie komunikaty awaryjne oprócz takich, które są generowane przez procesy użytkownika, pojawią się na ekranach wszystkich zalogowanych użytkowników.
Przykładowy plik rsyslog.conf znajdziesz na końcu scenariusza.
Aby zmusić demona (r)syslog działającego nieprzerwanie do ponownego odczytania pliku konfiguracyjnego należy wysłać do niego sygnał HUP. Pid procesu demona jest zapisany w pliku /var/run/rsyslogd.pid, więc właściwe polecenie ma następującą postać:
% kill -HUP $(cat /var/run/(r)syslogd.pid)
Co można zrobić również w następujący sposób:
% /etc/init.d/rsyslog restart
Do sprawdzenia poprawności składniowej pliku konfiguracyjnego służy polecenie:
% rsyslogd -f /etc/rsyslog.conf -N1
System rejestrujący pozwala także na korzystanie z tzw. modułów - wtyczek zapewniających różnorodną funkcjonalność. Polecenia dołączenia odpowiednich modułów powinny znaleźć się na początku pliku konfiguracyjnego. Dzięki schematom (templates) można określić format logowanej wiadomości.
Rsyslog umożliwia także filtrowanie wiadomości na podstawie jej zawartości. Udostępnia operacje porównywania takie jak: contains, isequal, startswith, regex. Ogólna postać polecenia jest następująca:
:własność,[!]operacja, "wzorzec"
gdzie najczęściej wykorzystywaną własnością jest :msg (treść komunikatu).
Przykład
:msg,contains,"iptables" /var/log/iptables.log :msg,regex,"fatal .* error" /var/log/fatal-error.log
Rsyslog może także zapisywać informacje do baz danych MySQL lub PostgreSQL (po instalacji pakietu rsyslog-mysql lub rsyslog-pgsql). Jako miejsce przeznaczenia można wtedy podać nazwę tabeli.
Kolejną możliwością rsyslog jest wybór protokołu TCP lub RELP zamiast UDP. Nazwę maszyny przeznaczenia należy poprzedzić znakiem @@ (TCP) lub :omrelp: (RELP). Wcześniej należy załadować odpowiedni moduł.
Po instalacji rsyslog domyślnie czas jest zapisywany w skróconej formie: np. 2016-10-05 14:17:42 odpowiada za to poniższa linia w pliku konfiguracyjnym (by włączyć dokładne zapisywanie czasu - trzeba zamienić ją na komentarz).
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
Polecenie logger jest interfejsem do systemu syslog z poziomu interpretera poleceń (powłoki). Warto je wykorzystać do testowania zmian w pliku konfiguracyjnym. Na przykład aby sprawdzić regułę:
local2.info /tmp/test.log
możesz wydać polecenie:
% logger -p local2.info "test local2 info"
Samo zbieranie i czytanie dzienników to nie wszystko o co powinien zadbać administrator - na maszynach z setką intensywnie pracujących użytkowników mogą one przyrastać bardzo szybko powodując przepełnienie systemu plików. Należy pamiętać, że samo skasowanie pliku nie rozwiązuje problemu (i-węzeł pliku nie zostanie zwolniony, dopóki plik nie zostanie zamknięty). Aby ułatwić zadania administratorowi system udostępnia polecenie logrotate, które umożliwia rotację plików z dziennikami, ich kompresję, przesyłanie pocztą do użytkowników i usuwanie. Jest zazwyczaj uruchamiany codziennie jako zadanie regularne przez podsystem cron. Jego plik konfiguracyjny to /etc/logrotate.conf
Istnieją również narzędzia wspomagające analizowanie dzienników, tworzące odpowiednie raporty i przesyłające je pod wskazany adres. Przykładami takich narzędzi są swatch i logcheck.
man rsyslog.conf
man rsyslogd
man logger
man logrotate
http://www.rsyslog.com/doc/rsyslog_conf.html
Alternatywa dla syslog: systemd
1. Przejrzyj zawartość katalogu /var/log. Sprawdź czasy ostatniej modyfikacji plików. Czy znajdują się tam pliki skompresowane? Wyświetl ostatnie wpisy wybranych logów (skorzystaj z tail).
2. Wykonaj polecenie sudo su, a następnie sprawdź, w którym pliku pojawiła się informacja o tym (przydatne może okazać się polecenie ls -ltr).
3. Znajdź w plikach konfiguracyjnych logrotate zasady rotowania plików dla kern.log i syslog.
4. Wykonaj polecenia dmesg i last.
5. Przeczytaj /etc/rsyslog.conf i przy pomocy polecenia logger sprawdź kilka reguł. Spróbuj wskazać komunikaty, które trafiają do więcej niż jednego dziennika.
6. Zmodyfikuj plik konfiguracyjny i skorzystaj z polecenia logger do wysłania komunikatu do wszystkich użytkowników, wybranego użytkownika, na wybrany terminal, na inny komputer.
7. Zastosuj filtrowanie wiadomości na podstawie jej zawartości.
Załącznik | Wielkość |
---|---|
rsyslog.conf_.txt | 2.56 KB |