Zrozumienie uprawnień i typów plików UNIX


68

Nigdy tak naprawdę nie rozumiałem, jak się to chmodułożyło do dzisiaj. Postępowałem zgodnie z samouczkiem, który wyjaśnił mi wielką sprawę.

Na przykład przeczytałem, że masz trzy różne grupy uprawnień:

  • właściciel ( u)
  • grupa ( g)
  • wszyscy ( o)

Na podstawie tych trzech grup wiem, że:

  • Jeśli plik jest własnością użytkownika, uprawnienia użytkownika określają dostęp.
  • Jeśli grupa pliku jest taka sama jak grupa użytkownika, uprawnienia grupy określają dostęp.
  • Jeśli użytkownik nie jest właścicielem pliku i nie należy do grupy, używane jest inne uprawnienie.

Dowiedziałem się również, że masz następujące uprawnienia:

  • read ( r)
  • write ( w)
  • execute ( x)

Utworzyłem katalog, aby przetestować moją nowo zdobytą wiedzę:

mkdir test

Potem zrobiłem kilka testów:

chmod u+rwx test/
# drwx------
chmod g+rx test/
# drwxr-x---
chmod u-x test/
# drw-r-x---

Po wygłupianiu się przez jakiś czas myślę, że w końcu zrozumiałem chmodi jak ustawiłeś uprawnienia za pomocą tego polecenia.


Ale...

Nadal mam kilka pytań:

  • Co oznacza dpoczątek?
  • Jak nazywa się i jakie jest użycie zawierającego gniazdo i jakie inne wartości może on przechowywać?
  • Jak mogę go ustawić i rozbroić?
  • Jaka jest tego wartość d? (Ponieważ masz tylko 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1)
  • Dlaczego ludzie czasami używają 0777zamiast 777ustawiać swoje uprawnienia?

Ale ponieważ nie powinienem zadawać wielu pytań, postaram się zadać jedno pytanie.

W systemie opartym na UNIX, takim jak wszystkie dystrybucje Linuksa, dotyczące uprawnień, co oznacza pierwsza część ( d) i jaki jest pożytek z tej części uprawnień?


3
Następnym razem spróbuj zadać tylko jedno pytanie, wiele pytań jest zwykle nieodpowiednich do odwoływania się i prawie nigdy nie ma na nie odpowiedzi w tym samym czasie.
Kiwy,

1
@ Kiwi Przykro mi, myślałem, że zrobię to w ten sposób, ponieważ dotyczy tego samego tematu. Jeśli chcesz, możesz zaproponować lepszy tytuł dla mojego pytania, aby poprawić jego odniesienie.
Peter

1
Nawiasem mówiąc, wartość „d” wynosi 040000 - można ją znaleźć w plikach nagłówków pod nazwą S_IFDIR. Nie używasz go podczas ustawiania trybu pliku, ale stat()funkcja faktycznie zwraca wartość 040750 dla drwxr-x---.
Random832

2
@ jamesqf Właściwie teraz, kiedy rozumiem, w jaki sposób mapowane są kody ósemkowe, łatwiej jest mi myśleć o tym w ten sposób.
HalosGhost

4
@Peter: nie ma głupich pytań - tylko głupcy, którzy się nie uczą, bo boją się zadawać.
mgarciaisaia

Odpowiedzi:


117

Odpowiem na twoje pytania w trzech częściach: typy plików, uprawnienia i przypadki użycia dla różnych form chmod.

Typy plików

Pierwszy znak ls -lwyjściowy reprezentuje typ pliku; doznacza, że ​​jest to katalog. Nie można go ustawić ani rozbroić, zależy to od sposobu utworzenia pliku. Pełną listę typów plików można znaleźć w dokumentacji ls ; są te, na które możesz się natknąć

  • -: „Zwykły” plik, utworzony za pomocą dowolnego programu, który może zapisać plik
  • b: można zablokować plik specjalny, zwykle dysk lub urządzenie partycjonujące mknod
  • c: znak specjalny plik, można również utworzyć za pomocą mknod(patrz /devprzykłady)
  • d: katalog, można utworzyć za pomocą mkdir
  • l: link symboliczny, można utworzyć za pomocą ln -s
  • p: nazwany potok, można utworzyć za pomocą mkfifo
  • s: gniazdo, można utworzyć za pomocą nc -U
  • D: door , stworzony przez niektóre procesy serwerowe w Solaris / openindiana.

Uprawnienia

chmod 0777służy do ustawiania wszystkich uprawnień w jednym chmodwykonaniu, zamiast łączenia zmian z u+itp. Każda z czterech cyfr jest liczbą ósemkową reprezentującą zestaw uprawnień:

  • suid, sgidI „lepka” (patrz poniżej)
  • uprawnienia użytkownika
  • uprawnienia grupowe
  • „Inne” uprawnienia

Wartość ósemkowa jest obliczana jako suma uprawnień:

  • „Czytaj” to 4
  • „Pisać” to 2
  • „Wykonaj” to 1

Dla pierwszej cyfry:

  • suidwynosi 4; pliki binarne z tym zestawem bitów są uruchamiane jako użytkownik ich właściciel (zwykle root)
  • sgidwynosi 2; pliki binarne z tym zestawem bitów są uruchamiane jako grupa właścicieli (było to używane w grach, aby można było udostępniać wysokie wyniki, ale często stanowi to zagrożenie bezpieczeństwa w połączeniu z lukami w grach), a pliki utworzone w katalogach z tym zestawem bitów należą do domyślnie grupa właścicieli katalogów (jest to przydatne do tworzenia folderów współdzielonych)
  • „Lepkie” (lub „ograniczone usuwanie”) to 1; pliki w katalogach z tym zestawem bitów mogą zostać usunięte tylko przez ich właściciela, właściciela katalogu lub root(zobacz /tmptypowy przykład tego).

Szczegółowe informacje można znaleźć na stronie chmodpodręcznika . Zauważ, że w tym wszystkim ignoruję inne funkcje bezpieczeństwa, które mogą zmieniać uprawnienia użytkowników do plików (SELinux, listy ACL plików ...).

Bity specjalne są obsługiwane w różny sposób w zależności od typu pliku (zwykłego pliku lub katalogu) i systemu bazowego. (Jest to wspomniane na stronie chmodpodręcznika.) W systemie, w którym testowałem to (z coreutils8.23 na ext4systemie plików, na którym działa jądro Linux 3.16.7-ckt2), zachowanie jest następujące. W przypadku pliku bity specjalne są zawsze usuwane, chyba że jest to jawnie ustawione, więc chmod 0777jest to równoważne chmod 777, a oba polecenia usuwają bity specjalne i dają wszystkim pełne uprawnienia do pliku. W przypadku katalogu specjalne bity nigdy nie są w pełni usuwane przy użyciu czterocyfrowej formy numerycznej, więc w rzeczywistości chmod 0777jest również równoważne zchmod 777ale jest to mylące, ponieważ niektóre specjalne bity pozostaną bez zmian. (Poprzednia wersja tej odpowiedzi dostał to źle). Aby wyczyścić specjalne bity na katalogach trzeba użyć u-s, g-si / lub o-tjawnie lub podać ujemną wartość liczbową, więc chmod -7000będzie usunąć wszystkie specjalne bity na katalogu.

Na ls -lwyjściu suid, sgidi „lepki” pojawiają się w miejscu xwejścia: suidjest salbo Szamiast użytkownika x, sgidto sczy Szamiast grupa użytkownika x, a „lepki” jest talbo Tzamiast innych x. Mała litera oznacza, że ​​zarówno bit specjalny, jak i bit wykonywalny są ustawione; duża litera oznacza, że ​​ustawiony jest tylko bit specjalny.

Różne formy chmod

Z powodu zachowania opisanego powyżej, użycie pełnych czterech cyfr chmodmoże być mylące (przynajmniej okazuje się, że byłem zdezorientowany). Jest to przydatne, gdy chcesz ustawić bity specjalne, a także bity uprawnień; w przeciwnym razie bity są usuwane, jeśli manipulujesz plikiem, zachowywane, jeśli manipulujesz katalogiem. Więc chmod 2750zapewnia dostaniesz przynajmniej sgidi dokładnie u=rwx,g=rx,o=; ale chmod 0750niekoniecznie wyczyści specjalne bity.

Używanie trybów numerycznych zamiast poleceń tekstowych ( [ugo][=+-][rwxXst]) jest prawdopodobnie bardziej przyzwyczajeniem i celem polecenia. Kiedy już przyzwyczaisz się do korzystania z trybów numerycznych, często łatwiej jest po prostu określić w ten sposób pełny tryb; i warto myśleć o uprawnieniach za pomocą trybów numerycznych, ponieważ wiele innych poleceń może z nich korzystać ( install, mknod...).

Przydają się niektóre warianty tekstu: jeśli po prostu chcesz mieć pewność, że plik może być wykonany przez kogokolwiek, chmod a+xzrobi to, niezależnie od innych uprawnień. Podobnie +Xdodaje uprawnienia do wykonywania tylko wtedy, gdy jedno z uprawnień do wykonywania jest już ustawione lub plik jest katalogiem; może to być przydatne do przywracania uprawnień na całym świecie bez konieczności przechowywania plików specjalnych v. katalogów. Jest zatem chmod -R ug=rX,u+w,o=równoważny z zastosowaniem chmod -R 750do wszystkich katalogów i plików wykonywalnych oraz chmod -R 640do wszystkich innych plików.


Chociaż pozostałe odpowiedzi były całkiem dobre, naprawdę spędziłeś trochę czasu odpowiadając na to pytanie. Dzięki.
Peter,

Na * BSD katalogi zachowują się tak, jakby ich sgidbit był zawsze ustawiony, niezależnie od jego rzeczywistej wartości. W FreeBSD suidbit można skonfigurować tak, aby działał analogicznie do sgid(tzn. Utworzone w nim pliki i podkatalogi będą miały tego samego właściciela co katalog), pod warunkiem, że bazowy system plików to obsługuje i zostanie zamontowany z suiddiropcją.
lcd047

+Xdodaje uprawnienia do wykonywania tylko wtedy, gdy jedno z uprawnień do wykonywania jest już ustawione lub plik jest katalogiem” dziękuję @ Stephen-kitt brakuje Dokumentacja jest już ustawiona” naprawdę rzucała mnie na pętlę!
Ryan Fisher

39

Tak więc uprawnienia w systemie Linux są bardzo ważne. Spróbuję zrobić krótkie wyjaśnienie.

Dla fragmentów trybu pliku

Każdy plik uniksowy ma zestaw uprawnień, które określają, czy można go odczytać, zapisać lub uruchomić. Uruchomienie ls -l wyświetla uprawnienia. Oto przykład takiego wyświetlacza:

-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile

Załączam obraz fragmentów trybu pliku:

wprowadź opis zdjęcia tutaj

Typ może być inną rzeczą. Na przykład:

  • d (katalog)
  • c (urządzenie znakowe)
  • l (dowiązanie symboliczne)
  • p (nazwany potok)
  • s (gniazdo)
  • b (urządzenie blokowe)
  • D (drzwi, nie są powszechne w systemach Linux, ale zostały przeniesione)

Jeśli chcesz ustawić uprawnienia dla wszystkich katalogów, możesz użyć atrybutu R, na przykład:

chmod -R 777 /some/directory/

Dla chmod 777 vs 0777

chmodPolecenie zwykle oczekuje wejściowe do numer ósemkowy zer odnosi się do wartości lepkiej / sgid / suid bitów trioli. Jednak w C zrobiłoby to różnicę, ponieważ 777zostałoby przetłumaczone na 01411(ósemkowe), ustawiając w ten sposób lepki bit (patrz chmod(2)strona podręcznika ), uprawnienia do odczytu dla właściciela i wykonywalny bit dla grupy i innych (co jest dość dziwną kombinacją) .

EDYCJA 1

Znalazłem inne zdjęcie na temat uprawnień do systemu Linux i dołączę je, aby łatwiej zrozumieć: Uprawnienia do plików w systemie UNIX


5
Mylisz się co do 777 vs 0777. Oba są ósemkowe (dziesiętne i tak nie ma sensu w tym przypadku), ale w postaci czteroznakowej pierwsza cyfra ustawia specjalne bity (lepki i setuid).
orion

3
@orion Czasami jest to prawdą, np. w kodzie podobnym do C w chmod(777)rzeczywistości byłby odpowiednikiem działania chmod 1411(tj. chmodpolecenie z argumentem 1411).
peterph

2
... co w przypadku syscall (lub jego otoki) i pliku binarnego o tej samej nazwie może być nieco mylące.
peterph

3
Python Mistrz Race rozwiązał ten problem poprzez wsteczną zakazu wszystkie „numery”, które zaczynają się od 0, zmuszając użytkownika do być jawne, jeśli chcą coś innego niż po przecinku, np hex: 0x1FFbinarnie: 0b111111111albo ósemkowy: 0o777. PYTHON POWER
Nick T

Źródło obrazu?
rugk

10

doznacza, że ​​jest to katalog, jeśli masz plik, to jest, -a jeśli jest to link, znajdziesz l. Nie można go ustawić / rozbroić.

Jeśli użyjesz 0777 jako uprawnień, dajesz pełną kontrolę (odczyt + zapis + wykonanie) każdemu użytkownikowi / grupie systemu. Jest to leniwy sposób rozwiązywania problemów, gdy użytkownicy / grupy nie mają dostępu do katalogów / plików.

Na przykład, jeśli wyświetlisz zawartość katalogu i otrzymasz to:

-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so

preloadable_libintl.so to plik należący do użytkownika root i grupy root. Właściciel ma czytać i pisać dostęp do systemu, grupa ma dostęp tylko do odczytu i każdy inny użytkownik ma dostęp do odczytu. Można to przetłumaczyć jako 644.

Jeśli zmienię na 777, będzie to wyglądać następująco:

-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so


7

Po uzyskaniu odpowiedzi na moje pytanie i po przeprowadzeniu badań dotyczących rezultatu znalazłem artykuł, który wyjaśnia wszystko bardzo dobrze. Chciałbym udostępnić tutaj niektóre części tego artykułu do wykorzystania w przyszłości.

Przeglądanie uprawnień

Aby użyć chmoddo zmiany uprawnień do pliku lub katalogu, najpierw musisz wiedzieć, jaki jest obecny tryb dostępu. Możesz wyświetlić zawartość katalogu w terminalu, przechodząc cddo tego katalogu, a następnie użyć:

$ ls -l

-lPrzełącznik jest ważne, ponieważ używając lsbez niego będą wyświetlane tylko nazwy plików lub folderów w katalogu.

Poniżej znajduje się przykład użycia ls -lw moim katalogu domowym:

total 128
drwxr-xr-x 2 peter users  4096 Jul  5 21:03 Desktop
drwxr-xr-x 6 peter users  4096 Jul  5 17:37 Documents
drwxr-xr-x 2 peter users  4096 Jul  5 13:45 Downloads
drwxr-xr-x 2 peter users  4096 Jun 24 03:36 Movies
drwxr-xr-x 2 peter users  4096 Jun 24 03:38 Music
drwxr-xr-x 2 peter users  4096 Jun 26 00:09 Pictures
-rw-r--r-- 1 peter users   354 Jul  6 17:15 chmodtest

Co oznaczają kolumny?

Pierwsza kolumna to typ każdego pliku:

  • - oznacza normalny plik.
  • d oznacza katalog, tzn. folder zawierający inne pliki lub foldery.
  • p oznacza nazwaną potok (aka FIFO).
  • l oznacza łącze symboliczne.

Kolejne litery to uprawnienia, ta pierwsza kolumna najbardziej nas interesuje. Druga to liczba linków w pliku, które możemy bezpiecznie zignorować. Trzecia kolumna ma dwie wartości / nazwy: Pierwsza (w moim przykładzie „peter”) to nazwa użytkownika, który jest właścicielem pliku. Druga wartość (w tym przykładzie „użytkownicy”) to grupa, do której należy właściciel (czytaj więcej o grupach).

Następna kolumna to rozmiar pliku lub katalogu w bajtach, a informacje to daty i godziny ostatniej modyfikacji pliku lub katalogu oraz oczywiście nazwa pliku lub katalogu.

Co oznaczają uprawnienia?

Pierwsze trzy litery, po pierwszej -lub d, są uprawnieniami właściciela. Następne trzy litery to uprawnienia dotyczące grupy. Ostatnie trzy litery to uprawnienia, które dotyczą wszystkich pozostałych.

Każdy zestaw trzech liter składa się z r wi x. rjest zawsze na pierwszej pozycji, wjest zawsze na drugiej pozycji i xzawsze jest na trzeciej pozycji. rjest uprawnieniem do odczytu, wjest uprawnieniem do zapisu i xjest uprawnieniem do wykonania. Jeśli -w miejscu jednej z tych liter znajduje się myślnik ( ), oznacza to, że pozwolenie nie zostało udzielone, a jeśli list jest obecny, to jest przyznawany.

Lornetka składana

W przypadku folderów bity trybu można interpretować w następujący sposób:

  • r (czytaj) oznacza zdolność do czytania spisu treści danego katalogu,
  • w(zapis) oznacza możliwość zapisu spisu treści danego katalogu (tworzenie nowych plików, folderów; zmiana nazwy, usuwanie istniejących plików, folderów) tylko wtedy, gdy ustawiony jest bit wykonania. W przeciwnym razie to uprawnienie nie ma znaczenia.
  • x (wykonanie) oznacza możliwość wejścia do danego katalogu za pomocą polecenia cd i dostępu do plików, folderów w tym katalogu.

Zmiana uprawnień za pomocą komendy chmod

chmodto polecenie w Linuksie i innych systemach operacyjnych typu Unix. Pozwala zmienić uprawnienia (lub tryb dostępu) do pliku lub katalogu.

Możesz zmienić uprawnienia na dwa różne sposoby: - ​​Na podstawie tekstu - Na podstawie chmod liczbchmod

Metoda tekstowa

Aby zmienić tryb uprawnień lub dostępu do pliku, używamy komendy chmod w terminalu. Poniżej znajduje się ogólna struktura polecenia:

chmod who=permissions filename

Gdzie jest ktokolwiek z szeregu liter, a każdy oznacza, komu masz zamiar udzielić pozwolenia. Są to:

u - The user that owns the file.
g - The group the file belongs to.
o - The other users i.e. everyone else.
a - all of the above - use this instead of having to type ugo.

Uprawnienia są takie same jak już omówione ( r, w, i x).

Polecenie chmod pozwala nam dodawać i odejmować uprawnienia od istniejącego zestawu za pomocą + lub - zamiast =. To różni się od powyższych poleceń, które zasadniczo re-write uprawnienia (tj zmienić pozwolenie r--na rw-, trzeba jeszcze to r, jak wpo =w chmodkomendzie. Jeżeli przegapiłeś r, to zabrać rpozwolenie jako są one przepisywane przy pomocy =. Używając + i - unikaj tego przez dodanie lub odebranie bieżącego zestawu uprawnień).

Metoda numeryczna

chmod może również ustawiać uprawnienia za pomocą liczb.

Używanie liczb to kolejna metoda, która pozwala edytować uprawnienia wszystkich trzech właścicieli, grup i innych jednocześnie. Ta podstawowa struktura kodu jest następująca:

chmod xxx file/directory

Gdzie xxx jest trzycyfrową liczbą, przy czym każda cyfra może być dowolna od 1 do 7. Pierwsza cyfra dotyczy uprawnień właściciela, druga cyfra dotyczy uprawnień grupy, a trzecia cyfra dotyczy uprawnień wszystkich pozostałych.

W tej notacji liczbowej wartości r, w i x mają swoją własną wartość liczbową:

r=4
w=2
x=1

Aby wymyślić trzycyfrową liczbę, należy rozważyć, jakie uprawnienia ma mieć właściciel, grupa i użytkownik, a następnie zsumować ich wartości. Powiedzmy na przykład, że chciałem udzielić właścicielowi katalogu uprawnień do odczytu i zapisu oraz wykonywania, a także chciałem zgrupować i wszystkich innych, aby mieli tylko uprawnienia do odczytu i wykonywania. Wymyśliłbym takie wartości liczbowe, jak:

Owner: rwx = 4+2+1=7
Group: r-x = 4+0+1=5 (or just 4+1=5)
Other: r-x = 4+0+1=5 (or just 4+1=5)

Final number = 755

$ chmod 755 filename

Jest to równoważne z użyciem następujących:

chmod u=rwx filename
chmod go=rx filename

Większość folderów / katalogów jest ustawiona na 755, aby umożliwić odczyt i zapis oraz wykonanie właścicielowi, ale odmawia zapisu wszystkim innym, a pliki mają zwykle 644 pliki, aby umożliwić odczyt i zapis właścicielowi, ale tylko odczyt dla wszystkich innych, patrz ostatnia uwaga na brak uprawnień x dla plików niewykonywalnych - tutaj ta sama sprawa.


Samo kopiowanie tekstu z innego artykułu jest - przynajmniej - niegrzeczne. Może także naruszenie praw autorskich. Jeśli nie jest on tylko kopiowany lub naprawdę używałeś małych części (chroniony prawem autorskim dzięki dozwolonemu użytkowaniu), dodaj przynajmniej link do artykułu, do którego się odwołujesz / cytujesz.
rugk

0

Na pytania d

Mówi ci to o typie Uniksa. Domyślnie Unix ma tylko 3 typy plików. Oni są:

  • - - Zwykły plik
  • d - Plik katalogu
  • Plik specjalny (z 5 podtypami):
    • b - Zablokuj plik
    • c - Plik urządzenia znaków
    • p - Nazwany plik potoku lub po prostu plik potoku
    • l - Plik dowiązania symbolicznego
    • s - Plik gniazda

Przeczytaj więcej tutaj: Rodzaje plików w systemie Linux / Unix wyjaśnione szczegółowo

0777 vs 777

Lepki bit określony lub nie. Po ustawieniu bitu lepkiego katalogu system plików traktuje pliki w takich katalogach w specjalny sposób, aby tylko właściciel pliku, właściciel katalogu lub użytkownik root mógł zmienić nazwę pliku lub usunąć go. Bez zestawu lepkich bitów każdy użytkownik z uprawnieniami do zapisu i wykonywania katalogu może zmienić nazwę lub usunąć zawarte pliki, niezależnie od właściciela pliku.

0777 ustawia uprawnienia do plików 777, a lepki bit na 0 - bez trybów specjalnych.

777 ustawia uprawnienia do pliku 777, bez zmiany lepkiego bitu.

Czytaj więcej: lepki bit i chmod


2
Lepiej: ale wciąż nie oferuje niczego, czego inne odpowiedzi jeszcze nie obejmowały ...
jasonwryan

1
(1) Istnieją trzy podstawowe typy plików: zwykłe pliki, katalogi i wszystko inne. Co? Skąd to masz? W wielkim schemacie rzeczy zwykłe pliki i katalogi są bardzo podobne. Nazwane potoki i dowiązania symboliczne bardziej przypominają zwykłe pliki i katalogi niż pliki urządzeń lub gniazda. (2) Myślisz, że chmod 777nie usuwa setuid, setgid i lepkich bitów? Spróbuj.
G-Man

Unix ma 7 typów plików, a nie 3.
wjandrea
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.