Co robi chmod -u?

19

Przez przypadek pobiegłem chmod -u filenamei to usunęło wszystkie uprawnienia, które miałem filename.

Strona podręcznika nie odwołuje się do -uopcji. Eksperymentując, doszedłem do wniosku, że nie usuwa wszystkich uprawnień, ale po prostu odczytuje i wykonuje dostęp, pozostawiając nienaruszony dostęp do zapisu.

Co to dokładnie robi?


Mój wniosek powyżej jest błędny, teraz myślę, że to, co robi, to usuwa uprawnienia, które właściciel ma ze wszystkich kategorii.


Myślę, że zachowanie jest analogiczne a=u, tylko że jest -zamiast =i amoże zostać porzucone tak jak na przykład z a+x.

y_wc
źródło
6
For1 za zadanie podstawowego pytania, którego nie ma na stronie man.
1
„Format w trybie symbolicznym jest [ugoa...][[-+=][perms...]...], gdzie perms jest zero lub więcej liter z zestawu rwxXst, lub jednej litery z zestawuugo ” (strona man chmod GNU); POSIX jest dość niejasny, ale definiuje produkcję „permcopy” dla tego samego efektu.
Michael Homer
1
@MichaelHomer Nie mówi, co robi.
y_wc
1
@y_wc "Zamiast jednej lub więcej z tych liter możesz podać dokładnie jedną z liter ugo : uprawnienia przyznane użytkownikowi, który jest właścicielem pliku ( u), uprawnienia przyznane innym użytkownikom, którzy są członkami grupy plików ( g) , oraz uprawnienia przyznane użytkownikom, którzy nie należą do żadnej z dwóch poprzednich kategorii ( o). ”
Michael Homer
1
Tak, przeczytałem to. Nie widzę, żeby wspomniał o tym, co robi. Mówi, że mogę podać jedną z tych liter. Określając na przykład u, będę określać uprawnienia przyznane użytkownikowi, który jest właścicielem pliku. Ale nie mówi, co robi. Co oznacza nawet określenie?
y_wc

Odpowiedzi:

19

To nie jest opcja, ale standardowy (ale niezbyt często) sposób określania uprawnień. Oznacza to usunąć ( -) uprawnienia związane z właścicielem pliku ( u) dla wszystkich użytkowników (bez poprzednich u, glub o). Jest to udokumentowane na stronie man.

Strona podręcznika GNU chmod dokumentuje to jako:

Format w trybie symbolicznym jest [ugoa...][[-+=][perms...]...], gdzie permsjest zero lub więcej liter z zestawu rwxXst, albo pojedyncza litera ze zbioru Ugo

i później

Zamiast jednej lub więcej z tych liter możesz podać dokładnie jedną z liter ugo: uprawnienia przyznane użytkownikowi, który jest właścicielem pliku ( u), uprawnienia przyznane innym użytkownikom, którzy są członkami grupy pliku ( g), oraz uprawnienia przyznane użytkownikom, którzy nie należą do żadnej z dwóch poprzednich kategorii ( o)

Tak więc -uśrodki do usuwania ( -) niezależnie od uprawnienia są obecnie włączone do właściciela ( u) dla każdego (równoważnie aby a-uoprócz uhonorowania bieżący umask). Chociaż często nie będzie to bardzo przydatne, analogiczne chmod +uczasami będzie kopiowanie uprawnień od właściciela do innych, na przykład podczas działania rekurencyjnego.


Jest to również udokumentowane w POSIX , ale bardziej niejasno zdefiniowane: specyfikacja uprawnień jest ogólnie who[+-=]perms(lub liczbą), a ich wpływ jest bardziej szczegółowo określony:

W Permcopy symbole u, gi oreprezentuje aktualne prawa związane z użytkownikiem, grupę, a w innych częściach bitów trybu pliku, odpowiednio. Pozostała część tego rozdziału permodnosi się do terminali permi permcopygramatyki.

i wtedy

-

... Jeśli kto nie jest określony, bity mode plików reprezentowana przez perm dla właściciela, grupy i innych uprawnień, z wyjątkiem tych z odpowiednich bitów w masce trybu tworzenia plików procesu wywołującego, zostaną wyczyszczone.

Michael Homer
źródło
Dzięki, Michael. Dokumentacja POSIX jest przekonująca. GNU jednak ... Proszę zobaczyć ten komentarz kopalni. Nie rozumiem, jak to, co następuje po „Więc”, wynika z tego, co było wcześniej. permsmoże być u, że mam. Tak, uokreśla uprawnienia lub właściciela. Ale jak to wynika, że -uusuwa uprawnienia właściciela (moduł umask) od wszystkich użytkowników?
y_wc
Ponieważ tak -zawsze się dzieje: usuwa określone uprawnienia z określonej klasy użytkowników. -ujest dokładnie analogiczny -wlub (bliższy) do ugo-u.
Michael Homer
Już miałam powiedzieć, że nie przyjechałam tutaj, aby przedyskutować dokumentację i że cieszę się, że mogę zrozumieć, co się dzieje, ale dokumenty właśnie kliknęły. Dzięki.
y_wc
Czy mogę sprawić ci kłopot z innym chmodpytaniem dotyczącym dokumentacji? Daj mi znać, jeśli uważasz, że to zasługuje na osobne pytanie. „i = powoduje ich dodanie i usunięcie niewymienionych bitów, z wyjątkiem tego, że nie ma to wpływu na niewymienione bity identyfikatora użytkownika i grupy w katalogu.” To, według mnie, mówi, że biorąc pod uwagę katalog, którego właściciel ma tylko prawo do zapisu, chmod u=rx directorypozostawi uprawnienia właściciela jako rwx. Ale tak się nie dzieje, zamiast tego stają się oczekiwaniami r-x. Czy coś źle interpretuję?
y_wc
Mówi, że sbity setuid / setgid ( ) są pozostawione same sobie, jeśli o nich nie wspominasz, a wszystko, czego nie określiłeś, jest usuwane.
Michael Homer
2

Odpowiedź jest trochę podobna do /unix//a/429424/255251 .

chmod -u file_name

nie usuwa wszystkich uprawnień, ale uwzględnia umaskwartość.

umask
0022
ls -l file
-rwxrwxrwx 1 user user 4 Feb 25 15:17 file
chmod -u file
chmod: file: new permissions are ----w--w-, not ---------
ls -l file
-----w--w- 1 user user 4 Feb 25 15:17 file

Teraz zmień wartość umask

umask 777
chmod 777 file
chmod -u file
chmod: file: new permissions are rwxrwxrwx, not ---------
ls -l file
-rwxrwxrwx 1 user user 4 Feb 25 15:17 file
Prvt_Yadav
źródło
2
Pouczające, dobrze znane i bardzo przydatne, ale myślę, że tak naprawdę nie jest to problem, chociaż jest bardzo związany. Dzięki.
y_wc