Nigdy tak naprawdę nie rozumiałem, jak chmod
działało do dziś. samouczek, który wyjaśnił mi ważną sprawę.
Na przykład, czytał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 właścicielem pliku jest użytkownik, 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 jest w grupie, używane są inne uprawnienia.
Dowiedziałem się również, że masz następujące uprawnienia:
- read (
r
) - write (
w
) - execute ()
Utworzyłem katalog, aby sprawdzić moją nowo nabytą wiedzę:
mkdir test
Następnie Zrobiłem kilka testów:
chmod u+rwx test/ # drwx------ chmod g+rx test/ # drwxr-x--- chmod u-x test/ # drw-r-x---
Po pewnym czasie wygłupów myślę, że w końcu zrozumiałem chmod
i sposób, w jaki ustawiasz uprawnienia za pomocą tego polecenia.
Ale …
Nadal mam kilka pytań:
- Co robi oznaczenie
d
na początku? - Jaka jest nazwa i przeznaczenie zawierającego boksu i jakie inne wartości może on przechowywać?
- Jak mogę to ustawić i usunąć?
- Jaka jest wartość tego
d
? (Ponieważ masz tylko 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1) - Dlaczego ludzie czasami używają
0777
zamiast777
ustawić ich uprawnienia?
Ale ponieważ nie powinienem zadawać wielu pytań, spróbuję zadać to w jedno pytanie.
W systemie opartym na systemie UNIX, takim jak wszystkie dystrybucje Linuksa, jeśli chodzi o uprawnienia, co oznacza pierwsza część (d
) i czym jest używać dla tej części uprawnień?
Komentarze
Odpowiedź
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 w ls -l
wyjście reprezentuje typ pliku; d
oznacza, że jest to katalog. Nie można go ustawić ani usunąć, zależy to od sposobu utworzenia pliku. Pełną listę typów plików można znaleźć w dokumentacji ls ; te, które prawdopodobnie spotkasz, to
-
-
: „zwykły” plik, utworzony za pomocą dowolnego programu, który może zapisać plik -
b
: blokuj specjalny plik, zazwyczaj dyski lub urządzenia partycji, można utworzyć za pomocąmknod
-
c
: znakowy plik specjalny, można go również utworzyć za pomocąmknod
(przykłady można znaleźć w/dev
) -
d
: katalog, można utworzyć za pomocąmkdir
-
l
: dowiązanie symboliczne, 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 , utworzone przez niektóre procesy serwera w systemie Solaris / openindiana.
Uprawnienia
chmod 0777
służy do ustawiania wszystkich uprawnień w jednym wykonaniu chmod
zamiast łączenia zmian z u+
itp.Każda z czterech cyfr to ósemkowa wartość reprezentująca zestaw uprawnień:
-
suid
,sgid
i „przyklejone” (patrz poniżej) - uprawnienia użytkownika
- uprawnienia grupy
- „inne” uprawnienia
ósemkowe wartość obliczana jest jako suma uprawnień:
- „odczyt” to 4
- „zapis” to 2
- „wykonanie” to 1
Pierwsza cyfra:
-
suid
to 4; Pliki binarne z tym ustawionym bitem działają jako ich właściciel (zwykleroot
) -
sgid
ma wartość 2; Pliki binarne z tym zestawem bitów są uruchamiane jako ich grupa właścicieli (było to używane do gier, dzięki czemu 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 grupa właścicieli katalogu domyślnie (jest to przydatne przy tworzeniu folderów współdzielonych) - „sticky” (lub „ograniczone usuwanie”) to 1; pliki w katalogach z tym ustawionym bitem mogą być usunięte tylko przez ich właściciela, właściciela katalogu lub
root
(zobacz/tmp
, aby zapoznać się z typowym przykładem tego).
Zobacz chmod
stronę podręcznika , aby uzyskać szczegółowe informacje. 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 inaczej w zależności od typu pliku (zwykłe plik lub katalog) i system bazowy. (Jest to wspomniane na stronie podręcznika chmod
). W systemie, którego używałem do testowania tego (z coreutils
8.23 na ext4
z jądrem Linux 3.16.7-ckt2), zachowanie jest następujące. W przypadku pliku specjalne bity są zawsze czyszczone, chyba że zostaną wyraźnie ustawione, więc chmod 0777
jest równoważne z chmod 777
, a oba polecenia usuwają specjalne bity i nadaj wszystkim pełne uprawnienia do pliku. W przypadku katalogu specjalne bity nigdy nie są w pełni kasowane przy użyciu czterocyfrowej postaci numerycznej, więc w efekcie chmod 0777
jest również równoważne z chmod 777
ale jest to mylące, ponieważ niektóre specjalne bity pozostaną takie, jakie są. (Poprzednia wersja tej odpowiedzi zawierała błąd.) Aby wyczyścić specjalne bity w katalogach, musisz użyć u-s
, g-s
i / lub o-t
jawnie lub podaj ujemną wartość liczbową, więc chmod -7000
wyczyści wszystkie specjalne bity w katalogu.
W ls -l
danych wyjściowych, suid
, sgid
i „sticky” pojawiają się zamiast x
entry: suid
to s
lub S
zamiast użytkownika x
, sgid
to s
lub S
zamiast x
grupy, a„ sticky ”to t
lub T
zamiast x
innych osób. Mała litera oznacza, że ustawiony jest zarówno bit specjalny, jak i bit wykonywalny; duża litera wskazuje, że ustawiony jest tylko specjalny bit.
Różne formy chmod
Ze względu na zachowanie opisane powyżej, użycie pełnych czterech cyfr w 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 zostaną wyczyszczone, jeśli manipulujesz plikiem, zachowane, jeśli manipulujesz katalogiem. Tak więc chmod 2750
gwarantuje, że otrzymasz co najmniej sgid
i dokładnie u=rwx,g=rx,o=
; ale chmod 0750
niekoniecznie czyści specjalne bity.
Używanie trybów numerycznych zamiast poleceń tekstowych ([ugo][=+-][rwxXst]
) jest prawdopodobnie bardziej przypadkiem przyzwyczajenia i celu dowodzenia. Gdy 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 pomyśleć o uprawnieniach za pomocą trybów numerycznych, ponieważ wiele innych poleceń może ich używać (install
, mknod
… ).
Niektóre warianty tekstu mogą się przydać: jeśli po prostu chcesz mieć pewność, że każdy może wykonać plik, chmod a+x
zrobi to, niezależnie od tego, co pozostałe uprawnienia to. Podobnie +X
dodaje uprawnienie do wykonywania tylko wtedy, gdy jedno z uprawnień do wykonywania jest już ustawione lub plik jest katalogiem; może to być przydatne do globalnego przywracania uprawnień bez konieczności korzystania ze specjalnych plików w katalogach. Dlatego chmod -R ug=rX,u+w,o=
jest równoważne zastosowaniu chmod -R 750
do wszystkich katalogów i plików wykonywalnych oraz chmod -R 640
do wszystkie inne pliki.
Komentarze
- Chociaż inne odpowiedzi były całkiem dobre, naprawdę spędziłeś trochę czasu odpowiadając na to pytanie. Dzięki.
- Włączone * katalogi BSD zachowują się tak, jakby ich bit
sgid
był zawsze ustawiony, niezależnie od jego rzeczywistej wartości. We FreeBSD bitsuid
można skonfigurować tak, aby działał analogicznie dosgid
(tzn. Pliki i podkatalogi utworzone wewnątrz będą miały tego samego właściciela co katalog ), pod warunkiem, że bazowy system plików to obsługuje i jest zamontowany z opcjąsuiddir
. - ”
+X
dodaje uprawnienia do wykonywania tylko wtedy, gdy jedno z uprawnień do wykonywania jest już ustawione lub plik jest katalogiem ” dziękuję Ty @ stephen-kitt brakuje ” jest już ustawiona ” dokumentacja naprawdę rzucała mi się w pętlę!
Odpowiedź
Dlatego uprawnienia w Linuksie są bardzo ważne. Postaram się przedstawić krótkie wyjaśnienie.
Tryb fragmentów pliku
Każdy plik uniksowy ma zestaw uprawnień, które określają, czy możesz czytać, zapisywać lub uruchamiać plik. 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:
Typ może być inny. Na przykład:
- d (katalog)
- c (urządzenie znakowe)
- l (łącze symboliczne)
- p (nazwane pipe)
- s (gniazdo)
- b (urządzenie blokowe)
- D (drzwi, nie jest powszechne w systemach Linux, ale zostało przeniesione)
Jeśli chcesz ustawić uprawnienia dla całego katalogu, możesz użyć atrybutu R, na przykład:
chmod -R 777 /some/directory/
Dla chmod 777 vs 0777
Polecenie chmod
zwykle oczekuje na dane wejściowe aby być liczbą ósemkową, wiodące zero odnosi się do wartości trioli bitów lepkich / sgid / suid. Jednak w C miałoby to znaczenie, ponieważ 777
zostałoby przetłumaczone na 01411
(ósemkowo), ustawiając w ten sposób bit lepki (zobacz chmod(2)
stronę podręcznika), uprawnienia do odczytu dla właściciela i pliku wykonywalnego dla grupy i innych (co jest dość dziwną kombinacją).
EDYTUJ 1
Znalazłem inne zdjęcie na temat uprawnień w Linuksie i załączę, aby łatwiej zrozumieć:
Komentarze
- Mylisz się co do 777 i 0777. Oba są ósemkowe (w w tym przypadku), ale w formie czteroznakowej pierwsza cyfra określa specjalne bity (lepki & setuid).
- @orion Czasami jest to prawda, na przykład w kodzie podobnym do C
chmod(777)
byłoby w rzeczywistości odpowiednikiem uruchomieniachmod 1411
(tj.chmod
z argumentem1411
). - … który w przypadku wywołania systemowego (lub jego opakowania) i pliku binarnego o tej samej nazwie może być trochę zagmatwane.
- Python Master Race rozwiązał ten problem wstecz, blokując wszystkie ” numery ” zaczynające się od 0 , zmuszając użytkownika do wyraźnego wyrażenia się, jeśli chce czegoś innego niż dziesiętne, np szesnastkowy:
0x1FF
, binarny:0b111111111
lub ósemkowy:0o777
. PYTHON POWER - Źródło obrazu?
Odpowiedź
d
oznacza, że jest to katalog, jeśli masz plik, jest to -
, a jeśli jest to łącze, znajdziesz l
. Nie można go ustawiać / usuwać.
Jeśli używasz 0777 jako uprawnień, dajesz pełną kontrolę (odczyt + zapis + wykonanie) każdemu użytkownikowi / grupie systemu. Jest to leniwy sposób na rozwiązanie problemy, gdy masz użytkowników / grupy, które nie mają dostępu do katalogów / plików.
Na przykład, jeśli wypiszesz 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 uprawnienia do odczytu i zapisu, grupa ma tylko uprawnienia do odczytu, a każdy inny użytkownik ma uprawnienia do odczytu. Można to przetłumaczyć jako 644.
Jeśli zmienię to na 777, będzie wyglądać tak:
-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so
Odpowiedź
Po uzyskaniu odpowiedzi na moje pytanie w tym miejscu i przeanalizowaniu wyników znalazłem artykuł, który wszystko bardzo dobrze wyjaśnia. Chciałbym podzielić się tutaj niektórymi częściami tego artykułu do przyszłych odniesień.
Uprawnienia do przeglądania
Aby użyć chmod
do zmiany uprawnień do pliku lub katalogu, musisz najpierw wiedzieć, jakie bieżące tryb dostępu jest. Możesz wyświetlić zawartość katalogu w terminalu, cd
do tego katalogu, a następnie użyj:
$ ls -l
Przełącznik -l
jest ważny, ponieważ użycie ls
bez niego spowoduje wyświetlenie tylko nazw plików lub folderów w katalogu.
Poniżej znajduje się przykład użycia ls -l
w 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, tj. folder zawierający inne pliki lub foldery. -
p
oznacza nazwany potok (aka FIFO ). -
l
oznacza dowiązanie symboliczne.
Litery po nim to uprawnienia, w tej pierwszej kolumnie będziemy najbardziej zainteresowani. Drugi to ile linków jest w pliku, jakie możemy bezpiecznie to zignoruj. Trzecia kolumna zawiera dwie wartości / nazwy: Pierwsza (w moim przykładzie „peter”) to nazwa użytkownika będącego właścicielem pliku. Druga wartość (w przykładzie „użytkownicy”) to grupa, do której należy właściciel (Przeczytaj więcej o grupach).
Następna kolumna to rozmiar pliku lub katalogu w bajtach oraz informacje o kolejnych 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
to uprawnienia, które posiada właściciel. Kolejne trzy litery to uprawnienia, które mają zastosowanie do grupy. Ostatnie trzy litery to uprawnienia, które mają zastosowanie do wszystkich innych.
Każdy zestaw trzech liter składa się z r
w
i x
. r
jest zawsze na pierwszej pozycji, w
jest zawsze na drugiej pozycji, a x
jest zawsze na trzeciej pozycji. r
to uprawnienie do odczytu, w
to uprawnienie do zapisu, a x
to wykonanie pozwolenie. Jeśli w miejscu jednej z tych liter znajduje się myślnik (-
), oznacza to, że zezwolenie nie zostało udzielone, a jeśli litera jest obecna, zostaje udzielona.
Foldery
W przypadku folderów bity trybu można interpretować w następujący sposób:
-
r
(odczyt) oznacza za możliwość odczytania 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) wtedy i tylko wtedy, gdy ustawiony jest bit wykonania. W przeciwnym razie to uprawnienie jest bez znaczenia. -
x
(wykonaj) oznacza możliwość wejścia do podanego katalogu za pomocą polecenia cd i dostępu do plików i folderów w tym katalogu.
Zmiana uprawnień za pomocą polecenia chmod
chmod
to polecenie w Linuksie i innych systemach operacyjnych typu Unix. Umożliwia zmianę uprawnień (lub trybu dostępu) do pliku lub katalogu.
Możesz zmienić uprawnienia na dwa różne sposoby: – W oparciu o tekst chmod
– Oparte na liczbach chmod
Metoda tekstowa
Aby zmienić uprawnienia lub tryb dostępu do pliku, używamy polecenia chmod w terminal. Poniżej znajduje się ogólna struktura polecenia:
chmod who=permissions filename
Gdzie Kto jest z szeregu liter, a każdy z nich oznacza, komu zamierzasz udzielić pozwolenia . Są one następujące:
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ówiono (r
, w
i x
).
Polecenie chmod pozwala nam dodawać i odejmować uprawnienia od istniejącego zestawu za pomocą + lub – zamiast tego of =. Różni się to od powyższych poleceń, które zasadniczo przepisują ponownie uprawnienia (tj. zmieniają uprawnienia z r--
na rw-
, nadal musisz uwzględnić r
, a także w
po =
w chmod
polecenie. Jeśli przegapisz r
, odebrałoby to uprawnienie r
, ponieważ są przepisywane z =. Usin g + i – unikaj tego, dodając lub usuwając bieżący zestaw uprawnień).
Metoda liczbowa
chmod
może również ustawiać uprawnienia przy użyciu liczb.
Korzystanie z liczb to kolejna metoda, która umożliwia jednoczesną edycję uprawnień dla wszystkich trzech właścicieli, grupy i innych osób. Ta podstawowa struktura kodu jest następująca:
chmod xxx file/directory
Gdzie xxx to 3-cyfrowy numer, gdzie każda cyfra może mieć dowolną liczbę od 1 do 7. Pierwsza cyfra ma zastosowanie w przypadku uprawnień właściciela druga cyfra odnosi się do uprawnień dla grupy, a trzecia do uprawnień dla wszystkich pozostałych.
W tym zapisie liczbowym wartości r, w i x mają własną liczbę wartość:
r=4 w=2 x=1
Aby uzyskać trzycyfrową liczbę, musisz rozważyć, jakie uprawnienia chcesz mieć właściciel, grupa i użytkownik, a następnie ich wartości wzrosną. Załóżmy na przykład, że chcę udzielić właścicielowi katalogu uprawnień do odczytu, zapisu i wykonywania, a chciałem, aby grupa i wszyscy inni mieli tylko uprawnienia do odczytu i wykonywania. Wymyśliłbym takie wartości liczbowe:
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 odpowiednik użycia następującego:
chmod u=rwx filename chmod go=rx filename
Większość folderów / katalogów jest ustawionych na 755, aby umożliwić właścicielowi odczyt, zapis i wykonanie, ale zabronić zapisywania wszystkim innym, a pliki są zwykle 644, aby umożliwić właścicielowi odczyt i zapis, ale tylko czytanie dla wszystkich innych, zapoznaj się z ostatnią uwagą dotyczącą braku uprawnień x do plików niewykonywalnych – to ta sama sprawa tutaj.
Komentarze
- Samo skopiowanie tekstu z innego artykułu jest – przynajmniej – niegrzeczne. Może także naruszenie praw autorskich. Jeśli nie jest tylko skopiowany lub naprawdę użyłeś małych części (dzięki dozwolonemu użyciu chroniącemu prawa autorskie), dodaj przynajmniej link do artykułu, do którego się odnosisz / cytujesz.
Odpowiedź
W przypadku pytań d
To określa typ pliku Uniksa. Domyślnie Unix ma tylko 3 typy plików. Są to:
-
-
– Zwykły plik -
d
– Plik katalogu - Plik specjalny (z 5 podtypami):
-
b
– plik blokowy -
c
– Plik znakowy urządzenia -
p
– Nazwany plik potoku lub po prostu plik potoku -
l
– Plik linków symbolicznych -
s
– Plik gniazda
-
Przeczytaj więcej tutaj: Typy plików w systemie Linux / Unix wyjaśniono szczegółowo
0777
vs 777
Podany bit lepki lub nie. Gdy ustawiony jest „sticky bit” katalogu, system plików traktuje pliki w takich katalogach w specjalny sposób, więc tylko właściciel pliku, właściciel katalogu lub użytkownik root może zmienić nazwę pliku lub go usunąć. Bez „sticky bit” set, każdy użytkownik z uprawnieniami do zapisu i wykonywania w katalogu może zmienić nazwę lub usunąć zawarte w nim pliki, niezależnie od właściciela pliku.
0777
ustawia 777 prawa dostępu do plików , a lepki bit na 0 – bez specjalnych trybów.
777
ustawia 777 prawa dostępu do plików, bez zmiany bitu „sticky”.
Czytaj więcej: bit lepki i chmod
Komentarze
- Lepiej: ale nadal nie oferuje niczego, czego inne odpowiedzi nie ' nie zostały już omówione …
- ( 1) Istnieją trzy podstawowe typy plików: zwykłe pliki, katalogi i wszystko inne. Co? Skąd to bierzesz? Ogólnie rzecz biorąc, 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 777
nie usuwa bitów setuid, setgid i sticky? Spróbuj. - Unix ma 7 typów plików, a nie 3.
Odpowiedź
Dwie powiązane rzeczy, które zawsze uważałem za mylące i nie poruszane powyżej, to:
I) what a „ 1 ” robi:
In chmod
: każda „1” pl daje pozwolenie, np. chmod 777 pl obsługuje wszystkie, ale zwróć uwagę, ponieważ
w umask
: każdy „1” dis daje pozwolenie, np. umask 777 dis obsługuje wszystkie.
II ) plik „właściciele” vs.plik „użytkownicy” :
Innymi słowy, istnieją użytkownicy, którzy „są właścicielami” i użytkownicy, którzy „używają” .
Każdy plik jest własnością w tym samym czasie, przez dwie jednostki:
- pojedynczy, konkretny użytkownik i
- pojedynczy, konkretny group (jednego lub więcej użytkowników).
Dlatego każdy plik może być używane przez określonego użytkownika na trzy sposoby:
1) Bezpośrednio, jako użytkownik będący właścicielem file,
2) w bezpośrednio jako członek grupy będącej właścicielem pliku oraz
3 ) prawdopodobnie jako ktoś inny.
W przeciwnym razie , odpowiedzi powyżej, zrób świetną robotę! Dziękuję wszystkim.
S_IFDIR
. Nie ' nie używasz go podczas ustawiania trybu pliku, ale funkcjastat()
w rzeczywistości zwraca wartość 040750 dladrwxr-x---
.