Nigdy tak naprawdę nie rozumiałem, jak się to chmod
uł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 chmod
i jak ustawiłeś uprawnienia za pomocą tego polecenia.
Ale...
Nadal mam kilka pytań:
- Co oznacza
d
począ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ą
0777
zamiast777
ustawiać 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ń?
źródło
S_IFDIR
. Nie używasz go podczas ustawiania trybu pliku, alestat()
funkcja faktycznie zwraca wartość 040750 dladrwxr-x---
.Odpowiedzi:
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 -l
wyjściowy reprezentuje typ pliku;d
oznacza, ż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ć plikb
: można zablokować plik specjalny, zwykle dysk lub urządzenie partycjonującemknod
c
: znak specjalny plik, można również utworzyć za pomocąmknod
(patrz/dev
przykł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 0777
służy do ustawiania wszystkich uprawnień w jednymchmod
wykonaniu, zamiast łączenia zmian zu+
itp. Każda z czterech cyfr jest liczbą ósemkową reprezentującą zestaw uprawnień:suid
,sgid
I „lepka” (patrz poniżej)Wartość ósemkowa jest obliczana jako suma uprawnień:
Dla pierwszej cyfry:
suid
wynosi 4; pliki binarne z tym zestawem bitów są uruchamiane jako użytkownik ich właściciel (zwykleroot
)sgid
wynosi 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)root
(zobacz/tmp
typowy przykład tego).Szczegółowe informacje można znaleźć na stronie
chmod
podrę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
chmod
podręcznika.) W systemie, w którym testowałem to (zcoreutils
8.23 naext4
systemie 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ęcchmod 0777
jest to równoważnechmod 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ścichmod 0777
jest również równoważne zchmod 777
ale 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-s
i / lubo-t
jawnie lub podać ujemną wartość liczbową, więcchmod -7000
będzie usunąć wszystkie specjalne bity na katalogu.Na
ls -l
wyjściusuid
,sgid
i „lepki” pojawiają się w miejscux
wejścia:suid
jests
alboS
zamiast użytkownikax
,sgid
tos
czyS
zamiast grupa użytkownikax
, a „lepki” jestt
alboT
zamiast innychx
. 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
chmod
moż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ęcchmod 2750
zapewnia dostaniesz przynajmniejsgid
i dokładnieu=rwx,g=rx,o=
; alechmod 0750
niekoniecznie 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+x
zrobi to, niezależnie od innych uprawnień. Podobnie+X
dodaje 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 zatemchmod -R ug=rX,u+w,o=
równoważny z zastosowaniemchmod -R 750
do wszystkich katalogów i plików wykonywalnych orazchmod -R 640
do wszystkich innych plików.źródło
sgid
bit był zawsze ustawiony, niezależnie od jego rzeczywistej wartości. W FreeBSDsuid
bit można skonfigurować tak, aby działał analogicznie dosgid
(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 zsuiddir
opcją.+X
dodaje 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ę!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:
Załączam obraz fragmentów trybu pliku:
Typ może być inną rzeczą. Na przykład:
Jeśli chcesz ustawić uprawnienia dla wszystkich katalogów, możesz użyć atrybutu R, na przykład:
Dla chmod 777 vs 0777
chmod
Polecenie 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ż777
zostałoby przetłumaczone na01411
(ósemkowe), ustawiając w ten sposób lepki bit (patrzchmod(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ć:
źródło
chmod(777)
rzeczywistości byłby odpowiednikiem działaniachmod 1411
(tj.chmod
polecenie z argumentem1411
).0x1FF
binarnie:0b111111111
albo ósemkowy:0o777
. PYTHON POWERd
oznacza, że jest to katalog, jeśli masz plik, to jest,-
a jeśli jest to link, znajdzieszl
. 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
źródło
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ć
chmod
do zmiany uprawnień do pliku lub katalogu, najpierw musisz wiedzieć, jaki jest obecny tryb dostępu. Możesz wyświetlić zawartość katalogu w terminalu, przechodząccd
do tego katalogu, a następnie użyć:-l
Przełącznik jest ważne, ponieważ używającls
bez niego będą wyświetlane tylko nazwy plików lub folderów w katalogu.Poniżej znajduje się przykład użycia
ls -l
w moim katalogu domowym: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
-
lubd
, 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
w
ix
.r
jest zawsze na pierwszej pozycji,w
jest zawsze na drugiej pozycji ix
zawsze jest na trzeciej pozycji.r
jest uprawnieniem do odczytu,w
jest uprawnieniem do zapisu ix
jest 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
chmod
to 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:
Gdzie jest ktokolwiek z szeregu liter, a każdy oznacza, komu masz zamiar udzielić pozwolenia. Są to:
Uprawnienia są takie same jak już omówione (
r
,w
, ix
).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--
narw-
, trzeba jeszcze tor
, jakw
po=
wchmod
komendzie. Jeżeli przegapiłeśr
, to zabraćr
pozwolenie 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:
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ą:
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:
Jest to równoważne z użyciem następujących:
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.
źródło
Na pytania d
Mówi ci to o typie Uniksa. Domyślnie Unix ma tylko 3 typy plików. Oni są:
-
- Zwykły plikd
- Plik katalogub
- Zablokuj plikc
- Plik urządzenia znakówp
- Nazwany plik potoku lub po prostu plik potokul
- Plik dowiązania symbolicznegos
- Plik gniazdaPrzeczytaj więcej tutaj: Rodzaje plików w systemie Linux / Unix wyjaśnione szczegółowo
0777
vs777
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
źródło
chmod 777
nie usuwa setuid, setgid i lepkich bitów? Spróbuj.