przejście do zawartości
Jan Kończak
Narzędzia użytkownika
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
Ostatnie zmiany
Menadżer multimediów
Indeks
Jesteś tutaj:
start
»
so
»
users_chmod
so:users_chmod
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
===== Użytkownicy i grupy ===== W uniksopodobnych systemach istnieją użytkownicy i grupy. \\ Użytkownicy identyfikowani są po numerycznych identyfikatorach **uid** (//user identifier//), które są mapowane na nazwy użytkowników. \\ Podobnie grupy mają identyfikatory numeryczne o nazwie **gid** (//group identifier//), które też są mapowane na nazwy grup. Każdy użytkownik jest w jednej podstawowej grupie (nazywanej jego grupą podstawową, //primary group//) i może należeć do dowolnie wielu grup (nazywanych jego grupami dodatkowymi, //supplementary groups//). Lista dostępnych użytkowników i grup oraz powiązania uid/gid z nazwami zwykle są czytane z plików ''/etc/passwd'' i ''/etc/groups'', ale po odpowiedniej konfiguracji może być pobierana też z innych źródeł. \\ <small>Np. można wykorzystać serwer LDAP, czy kontroler domeny AD za pośrednictwem programu ''winbindd''. Więcej informacji na [[https://en.wikipedia.org/wiki/Name_Service_Switch|tutaj]]. \\ Hasła lokalnych użytkowników i grup są przechowywane w ''/etc/shadow'' i ''/etc/gshadow''</small> W systemie plików zapisane są uidy i gidy (a nie nazwy użytkowników), stąd np. podłączenie dysku z jednego komputera do drugiego przypisze pliki innym nazwom użytkowników i grup jeżeli mapowania uid/gid na nazwy nie są identyczne na obu systemach. \\ <small>To dotyczy również kontenerów (sic!).</small> <html><small></html> Dla procesów uniksopodobne systemy przechowują efektywny, zapisany i rzeczywisty uid (analogicznie gid). \\ Dla zwykłych procesów te identyfikatory są równe, dla procesów które zmieniały użytkownika mogą być różne. Więcej informacji na [[https://en.wikipedia.org/wiki/User_identifier|tutaj]]. \\ W tej chwili zakres uid'ów i gid'ów w Linuksie to 0÷(2<sup>32</sup>-2) <html></small></html> Użytkownik o uid równym **0** nazywany jest **superużytkownikiem** (//superuser//) i ma zwyczajowo nadaną nazwę **[[https://pl.wikipedia.org/wiki/Root|root]]**. Żeby sprawdzić swoją nazwę użytkownika, można skorzystać z komendy ''**whoami**''. \\ Do sprawdzenia listy grup służy komenda ''**groups** [//użytkownik//]''. Bez argumentów wyświetla grupy bieżącego użytkownika. ~~Zadanie.#~~ Przetestuj działanie komendy ''whoami''. ~~Zadanie.#~~ Sprawdź listę grup w której jesteś. Sprawdź listę grup w której jest użytkownik student. <html><small></html> Komenda ''**id** [//użytkownik//]'' wyświetla nazwy i numery użytkownika, jego grupy podstawowej i grup dodatkowych. Informację o użytkowniku można wyciągnąć poleceniem ''getent passwd //użytkownik//'', o grupach – ''getent group //grupa//''. ~~Zadanie.#~~ Sprawdź jaki masz uid i gid, zarówno poleceniem ''id'' jak i ''getent''. <html></small></html> Zmiana hasła użytkownika jest wykonywana przy pomocy komendy **''passwd''**. \\ <small>Root może przy pomocy ''passwd //user//'' ustawić hasło każdego użytkownika, może też zmienić czas ważności hasła bądź zablokować konto.</small> <html><small></html> Podstawowe komendy administracyjne do zarządzania użytkownikami to: * dodawanie nowego użytkownika: ''useradd [-m] [-g //grupa//] //nazwa//'' * dodawanie nowej grupy: ''groupadd //nazwa//'' * dodanie użytkownika do grupy: ''gpasswd -a //użytkownik// //grupa//'' * zmiana/usunięcie użytkownika/grupy: ''usermod'' / ''userdel'' / ''groupmod'' / ''groupdel'' <html></small></html> ===== Użytkownicy w systemie, historia logowania, komunikacja ===== Listę osób bieżąco używających systemu można wyświetlić komendą **''w -n''** oraz ''who''. Historię logowań można wyświetlić używając polecenia ''**last** [-n //ile_ostatnich//] [//username//]''. ~~Zadanie.#~~ Zaloguj się po ssh na polluksa. Sprawdź jacy inni użytkownicy są zalogowani. ~~Zadanie.#~~ Na polluksie sprawdź jacy trzej użytkownicy logowali się ostatnio. ~~Zadanie.#~~ Na polluksie sprawdź kiedy ostatnio logował się użytkownik root. <html><small></html> ~~Zadanie.#~~ Sprawdź jacy użytkownicy byli zalogowaniu na polluksie w chwili ''2023-03-03 13:30'' <html></small></html> Komendą ''**write** //użytkownik// [//terminal//]'' można wysłać tekst do wybranego użytkownika (kończąc wpisany tekst przez EOF, zwykle //Ctrl+d//). \\ Spowoduje to wyświetlenie mu podanego testu poprzedzonego komunikatem "message from…" w terminalu. \\ Otrzymywanie takich wiadomości można zablokować (bądź odblokować) komendą ''**mesg {n|y}**''. Można też wysłać wiadomość do wszystkich użytkowników komendą ''wall''. ~~Zadanie.#~~ Napisz do sąsiada wiadomość. Zobacz na własnym ekranie wiadomość wysłaną od kogoś. <html><small></html> Istnieje też komenda ''[[https://en.wikipedia.org/wiki/Talk_(software)|talk]] //użytkownik//'' pozwalająca na rozmowę między dwoma użytkownikami. <html></small></html> ===== Przełączenie się na innego użytkownika ===== Posiadając odpowiednie uprawnienia i/lub znając odpowiednie hasło (w zależności od ustawień systemu) można przełączyć się na innego użytkownika bądź wykonać komendę jako inny użytkownik. Komenda ''**su** [-] [//użytkownik//]'' po autoryzacji uruchamia domyślną powłokę dla podanego użytkownika (domyślnie roota). \\ Komenda ''su -c //komenda// [-] [//użytkownik//]'' po autoryzacji uruchamia w domyślnej powłoce dla podanego użytkownika (domyślnie roota) podaną komendę. \\ ''su'' jest dostępna w każdym uniksopodobnym systemie. W domyślnych ustawieniach Linuksa komenda ''su'' wymaga podania hasła użytkownika docelowego (i w niektórych dystrybucjach przynależności do odpowiedniej grupy, zwykle ''wheel''). Na wielu dystrybucjach instalowana jest też komenda ''sudo'' która ma na celu zezwolenie wybranym użytkownikom na wykonywanie wybranych komend z uprawnieniami wskazanych użytkowników. Do autoryzacji ''sudo'' wykorzystuje hasło bieżącego bądź docelowego użytkownika. W niektórych dystrybucjach komenda ''sudo'' jest nadużywana do zastąpienia komendy ''su''. ~~Zadanie.#~~ Zaloguj się na podany przez prowadzącego serwer przez ssh (prawdopodobnie ''ssh user//N//@fe80::1%br0''). Zmień użytkownika na ''root''. Zmień użytkownika na innego ''user//N//''. <html><small></html> Root może też korzystać z komend ''runuser'' i ''setpriv'' do uruchamiania komend z innym uid/gid/[[https://linux.die.net/man/7/capabilities|uprawnieniami]]. <html></small></html> ===== Uprawnienia dostępu do plików ===== ==== Rodzaje i zapis uprawnień ==== W uniksopodobnych systemach dostęp do pliku określają trzy podstawowe uprawnienia: odczytu (__**r**__ead), zapisu (__**w**__rite) i wykonania (e__**x**__ecute). \\ Każde z tych uprawnień jest przyznawane osobno właścicielowi pliku (__**u**__ser), grupie pliku (__**g**__roup) i pozostałym użytkownikom (__**o**__thers). \\ Dodatkowo można ustawić trzy uprawnienia specjalne: set-user-id (suid, __**s**__), set-group-id (sgid, __**s**__) i sticky (__**t**__). Prawo do wykonania dla pliku oznacza możliwość uruchomienia go (jako skrypt, program etc.), dla katalogu – wejścia do niego. Suid/sgid nadany zwykłym plikom oznacza, że po uruchomieniu proces będzie działać z efektywnym uid/gid właściciela pliku. \\ <small> Zauważ że skrypt są interpretowane przez inny program, nie uruchamiane. Nadanie skryptowi suid/sgid nie ma wpływu na jego działanie. \\ Suid pozwala np. zwykłemu użytkownikowi zmienić hasło (czyli zmienić plik /etc/shadow do którego zwykły użytkownik nie ma dostępu). \\ Sgid pozwala np. zwykłemu użytkownikowi uruchamiać maszyny wirtualne w VirtualBoxie czy analizować pakiety sieciowe w Wiresharku. </small> [[https://en.wikipedia.org/wiki/Sticky_bit|Sticky bit]] nadany katalogowi D oznacza, że plik X z katalogu D może usunąć tylko właściciel pliku X bądź katalogu D. \\ <html><small></html> Sticky bit ustawiany jest w katalogu ''/tmp'' i innych, gdzie każdy użytkownik może tworzyć pliki o to, by tylko właściciel (bądź root) mogli usunąć pliki. Suid/sgid dla innych plików niż zwykłe i sticky bit dla innych plików niż katalogi nie mają spójnego znaczenia w uniksopodobnych systemach. Przy montowaniu systemu plików można ustawić opcję ''nosuid'' która wyłącza działanie suid/sgid <html></small></html> Uprawnienia są przechowywane jako liczba, gdzie wartości kolejnych bitów oznaczają (od najstarszego bitu): prawa specjalne (w kolejności suid, sgid, sticky), i prawa dla użytkownika, grupy, innych (w kolejności odczyt, zapis, wykonanie). \\ Numerycznie uprawnienia zapisuje się w systemie ósemkowym, np: ''<color #f000f0>4</color><color #800000>7</color><color #008000>5</color><color #000080>1</color>'' gdzie kolejne cyfry oznaczają uprawnienia <color #f000f0>specjalne</color> (tutaj: suid), <color #800000>użytkownika</color> (tutaj: wszystkie), <color #008000>grupy</color> (tutaj: odczyt i wykonanie) i <color #000080>innych</color> (tutaj: wykonanie). Tekstowo uprawnienia zapisuje się jako: ''<color #800000>rwx</color><color #008000>rwx</color><color #000080>rwx</color>'', gdzie kolejne trójki to właśnie uprawnienia <color #800000>użytkownika</color>, <color #008000>grupy</color> i <color #000080>innych</color>. \\ Brak danego uprawnienia zapisuje się przez **''-''**. \\ Zwykle przed tak zapisanymi uprawnieniami pojawia się dodatkowa litera określająca typ pliku. \\ Uprawnienia specjalne zapisuje się na pozycji uprawnień wykonania: suid i prawo do wykonanie to ''s'', suid i brak prawa do wykonania to ''S'' na pozycji użytkownika. Analogicznie prezentowany jest sgid na pozycji grupy, i sticky bit z literami ''t'' i ''T'' na pozycji pozostałych. \\ Przykładowo: ''rw-r--r--'' oznacza że użytkownik ma prawo zapisu i odczytu, a grupa i pozostali tylko do odczytu (równoważne ''644''), \\ a ''rwx--x--x'' pozwalają właścicielowi na odczyt, zapis i wykonanie pliku, a grupie i pozostałym tylko na wykonanie (''711''). Aby zobaczyć szczegółowe informacje o pliku, w tym uprawnienia, można wykonać ''**stat** //plik//''. \\ Uprawnienia są też wyświetlane w wynikach ''ls -l'' i ''tree -p''. \\ Wszystkie powyższe polecenia dodają na początek uprawnień literę określającą rodzaj pliku. ~~Zadanie.#~~ Sprawdź jakie uprawienia mają (na twoim komputerze): * twój katalog domowy * podkatalog ''.ssh'' w twoim katalogu domowym * plik ''.bash_history'' w twoim katalogu domowym * plik ''/etc/passwd'' i ''/etc/shadow'' * katalog ''/tmp'' * plik ''/usr/bin/passwd'' i ''/usr/bin/write'' ~~Zadanie.#~~ Sprawdź jakie mają uprawnienia i jakim są rodzajem plików: * ''/var/run'' * ''/dev/sda'' lub ''/dev/nvme0n1'' * ''/dev/null'' * ''/run/initctl'' * ''/run/rpcbind.sock'' ==== Zmiana uprawnień, grupy i użytkownika pliku ==== Domyślnie uprawnienia nadawane plikom i katalogom określa maska którą można odczytać poleceniem ''**umask**'' (i zmienić dla bieżącej powłoki poleceniem ''umask //oktalnie//''). Do zmiany uprawnień służy komenda ''**chmod** //uprawnienia// //plik//''. \\ ''chmod'' przyjmuje uprawnienia w postaci ósemkowej, np. ''chmod 644 plik'' lub w postaci symbolicznej. \\ Postać symboliczna to oddzielone przecinkami wyrażenia na które składa się: * litera ''u'', ''g'', ''o'' lub ''a'' (user, group, others lub __**a**__ll - wszyscy) * operacja ''+'', ''-'' lub ''='' (dodaj, usuń lub ustaw te prawa) * uprawnienia ''r'', ''w'', ''x'', ''s'' lub ''t''. Np. ''chown u+x,o= //plik//'' doda użytkownikowi prawo do zapisu i ustawi brak praw dla innych (a prawa grupy zostaną bez zmian). \\ <small>Pominięcie litery ''[ugoa]'' przed operacją ma specjalne znaczenie, szczegóły w podręczniku systemowym.</small> Właściciel pliku będący w kliku grupach może użyć komendy ''**chgrp** //grupa// //plik//'' do zmiany grupy do której należy plik. Tylko root może zmienić właściciela (i grupę) pliku poleceniem ''**chown** [//właściciel//][:[//grupa//]] //plik//''. Zarówno ''chmod'', ''chgrp'' i ''chown'' przyjmują przełączniki ''-R'' (''--recursive'') dla rekursywnej zmiany i ''--reference=//plik//'' dla ustawienia uprawnień/grupy/właściciela identycznego jak we wskazanym pliku. //Ćwiczenia wykonuj na podanym przez prowadzącego serwerze. \\ Do tworzenia plików możesz wykorzystać np. komendę // ''fortune > //plik//''. ~~Zadanie.#~~ Stwórz plik. Ustaw takie prawa dostępu, żeby tylko właściciel mógł odczytać plik. \\ Sprawdź poprawność nadanych praw przełączając się na innych użytkowników. ~~Zadanie.#~~ Stwórz plik. Ustaw korzystając z ósemkowego zapisu takie prawa dostępu, żeby właściciel mógł zmodyfikować i odczytać plik, a grupa mogła tylko odczytać plik. Sprawdź poprawność nadanych praw. ~~Zadanie.#~~ Stwórz plik. Ustaw korzystając z symbolicznego zapisu takie prawa dostępu, żeby właściciel mógł zmodyfikować i odczytać plik, a grupa mogła tylko odczytać plik. ~~Zadanie.#~~ Zmień grupę pliku z poprzedniego zadania. ~~Zadanie.#~~ Stwórz plik. Ustaw takie prawa dostępu, żeby tylko właściciel i pozostali mogli odczytać plik. Sprawdź czy osoba należąca do grupy pliku może go odczytać. ~~Zadanie.#~~ Stwórz katalog ze zwykłym plikiem w środku. Odbierz prawo do wykonywania katalogu. Spróbuj wylistować katalog, wejść do katalogu i wyświetlić plik bez wchodzenia do katalogu. ~~Zadanie.#~~ Zmień prawa dostępu katalogu na ''u=rwx,go=rx''. Stwórz w tym katalogu zwykły plik. Wyświetl plik jako inny użytkownik. Wyświetl zawartość katalogu jako inny użytkownik. \\ Następnie zmień prawa do katalogu ''u=rwx,go=x''. Spróbuj ponownie wyświetlić plik i zawartość katalogu jako inny użytkownik. ~~Zadanie.#~~ Stwórz katalog z prawami dostępu ''777'' i stwórz w nim dwa pliki. Jednemu z nich ustaw prawa ''600''. Z innego użytkownika spróbuj usunąć oba pliki. ~~Zadanie.#~~ W katalogu użytkownika A z prawami dostępu ''777'' stwórz jako użytkownik B dwa katalogi: jeden pusty, jeden z plikiem w środku. Spróbuj usunąć te katalogi jako użytkownik A. ~~Zadanie.#~~ Czy możesz zmienić nazwę katalogu K który nie dał się usunąć w poprzednim zadaniu? Czy możesz przenieść katalog K do innego? Czy możesz przenieść katalog zawierający K do innego? ~~Zadanie.#~~ Stwórz plik i katalog z plikiem w środku i odbierz wszystkim trzem wszystkie uprawnienia. Zmień użytkownika na root i spróbuj wyświetlić oba pliki. ~~Zadanie.#~~ Z roota zmień właściciela wybranego pliku. Następnie zmień grupę innego pliku na ''www-data''. ===== Data utworzenia, modyfikacji, dostępu ===== Linuksowe system plików zwykle przechowują datę zmiany metadanych (//change//, ctime), zmiany treści (//modify//, mtime) i ostatniego dostępu (//access//, atime) dla każdego pliku. Niektóre systemy plików dodatkowo przechowują też czas utworzenia pliku. \\ <small>Montując system plików często wyłącza się rejestrowanie czasu ostatniego dostępu podając opcję ''noatime'' lub ustawia zmianę tego czasu tylko w szczególnych przypadkach podając opcję ''relatime''. Komenda ''mnt'' i ''findmnt'' wyświetlają z jakimi opcjami zamontowano system plików.</small> Polecenie ''**stat** //plik//'' pokazuje te czasy. Komenda ''**touch** //plik//'' ustawia czas dostępu i modyfikacji pliku, domyślnie na teraz. \\ Podając ''-d //data//'' lub ''--reference=//plik//'' można wybrać inną datę, a ''-a'', ''-c'' i ''-m'' wybierają który czas zmodyfikować. \\ Jeśli plik docelowy nie istnieje, domyślnie komenda ''touch'' go stworzy. Jest to często używane do tworzenia pustych plików. ~~Zadanie.#~~ Sprawdź daty dla pliku ''/var/log/wtmp'' ~~Zadanie.#~~ Zmień daty do swojego katalogu domowego. <html><small></html> ~~Zadanie.#~~ Zmień datę zmiany zawartości wybranego pliku na ''13:30 PDT Saturday month ago''. <html></small></html> ~~META: language = pl ~~
so/users_chmod.1679305865.txt.gz
· ostatnio zmienione: 2023/03/20 10:51 przez
jkonczak
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Złóż / rozłóż wszystko
Do góry