Dlaczego musisz wykonać uprawnienie do katalogu nadrzędnego, aby zmienić nazwę pliku

6

W systemach plików Linux / Unix rozumiem powód, dla którego potrzebujesz uprawnienia do wykonywania folderu nadrzędnego, aby odczytać lub zapisać plik: uprawnienie do wykonywania daje dostęp do i-węzła w pliku, a bez tego nigdy nie możesz dotrzeć zawartość pliku.

Jednak do zmiany nazwy pliku (a nawet usunięcia) wystarczy zmienić nazwę pliku na liście, która nie powinna wymagać dostępu do i-węzła. Więc dlaczego bit wykonywania jest wymagany do zmiany nazwy pliku, uprawnienia zapisu powinny wystarczyć?

Nie wydaje się to symetryczne z dostępem do odczytu: z r-- uprawnienia, możesz to zrobić ls w katalogu i dostęp do listy nazw plików w tym katalogu. Nie musisz wykonywać, ponieważ nie masz dostępu do i-węzłów. Podobnie z -w-, powinieneś być w stanie zmienić listę nazw plików (nie musisz też uzyskiwać dostępu do inodes), ale nie możesz, dlaczego?

Flavien
źródło

Odpowiedzi:

3

Znaczenie uprawnienia do wykonywania katalogu to możliwość wyszukiwania nazw plików w tym katalogu. Oczywiście, udane wyszukiwanie nazwy pliku powoduje odniesienie do numeru i-węzła, ale uprawnienie do wykonywania nie ma nic wspólnego z i-węzłami jako takimi.

Bez uprawnienia do wykonywania katalogu nie można statować, otwierać, zmieniać nazwy, usuwać ani schodzić do podkatalogów w tym katalogu. Jedyne, co możesz zrobić, to zobaczyć listę nazw plików, a następnie tylko wtedy, gdy masz uprawnienia do odczytu (a odczyt, ale nie wykonanie, jest dziwnym zbiorem uprawnień do katalogu).

Zastanów się, czy masz rw- w katalogu. Znasz tę nazwę pliku foo istnieje w tym katalogu. Aby go usunąć, musisz go sprawdzić, a nawet potrzebujesz dostępu do i-węzła (aby zmniejszyć jego liczbę). W tym celu potrzebujesz dostępu do i-węzła, aby stwierdzić, czy jest to katalog, czy nie (ponieważ jeśli jest to katalog, unlink powinien zawieść i rmdir powinien się udać, a odwrotnie, jeśli nie jest katalogiem). Ale nie możesz tego sprawdzić.

Celada
źródło
Wiem, co mogę zrobić i czego nie mogę. To nie jest moje pytanie, moje pytanie brzmi: dlaczego. Nie muszę szukać żadnej nazwy pliku, aby zmienić nazwę pliku. Po prostu zmieniam nazwę na inną, nie muszę wiedzieć, do czego to imię się odnosi.
Flavien
W mojej odpowiedzi starałem się podkreślić naturę zdolności „wyszukiwania” jako wyjaśnienia dlaczego. Inny sposób, aby to powiedzieć: rename wywołanie systemowe przyjmuje dwie nazwy ścieżek jako argumenty. Sprawdza oba. x jest to wymagane. Ale ostatecznie najlepszą odpowiedzią na „dlaczego” jest „ponieważ POSIX definiuje to w ten sposób”.
Celada
Ma to sens, że dla usunięcia trzeba zmniejszyć liczbę linków, dlatego trzeba x aby uzyskać dostęp do i-węzła. W przypadku zmiany nazwy nie rozumiem, dlaczego potrzebny jest dostęp do i-węzłów.
Flavien
Więc technicznie mógłby usuń plik lub katalog za pomocą just rw-? Sposób, w jaki odpowiedź jest teraz napisana, brzmi tak, jakbyś miał (prawdopodobnie szkodliwe) narzędzie, które po prostu odłączyło pliki / katalogi bez aktualizacji ich liczby linków lub próbując sprawdzić, jaki to jest wpis w katalogu, możesz usunąć wpisy katalogu bez potrzeby x kawałek.
Ajedi32
1
@ Ajedi32, nie, naprawdę potrzebujesz x pozwolenie. Złośliwe narzędzie nie może pominąć tych kroków, które wymagają wyszukania i zmniejszenia liczby linków, ponieważ jądro POSIX nie oferuje wywołania systemowego pomijającego te kroki. POSIX oferuje tylko unlink() (dla plików) i rmdir() (dla katalogów), a te wywołania systemowe wykonują wszystkie właściwe czynności, sprawdzając i zliczając łącza.
Celada
1

T bit execute pozwala dotkniętemu użytkownikowi na wejście do niego i dostęp do niego oraz zmianę atrybutów i katalogów plików i katalogów. uprawnienie do wykonywania innych poleceń systemu plików Linux może wymagać „wykonania” w podkatalogach, a pliki są określane przez „bit wykonywania”. Nie należy mylić z wykonywaniem pliku wykonywalnego, oznacza to, że dałeś „wykonawcze decyzje” przywileje do edycji linków do numerów plików i-węzłów lub metadanych związanych z nazwami plików i dowiązaniami symbolicznymi.

Warianty funkcji obejmują Execute with write disabled. co oznacza, że ​​możesz zmienić nazwę pliku, ale nie możesz edytować zawartości. Lub włącz pisanie, ale uruchom wyłączone visa versa.

„Każdy napęd dysków zawiera pewną liczbę systemów plików. System plików składa się z wielu grup cylindrów. Każda grupa cylindrów ma i-węzły i      dane.

 A file system is described by its super-block, which in turn describes
 the cylinder groups.  The super-block is critical data and is replicated
 in each cylinder group to protect against catastrophic loss.  This is
 done at file system creation time and the critical super-block data does
 not change, so the copies need not be referenced further unless disaster
 strikes.

 Addresses stored in inodes are capable of addressing fragments of
 `blocks'. File system blocks of at most size MAXBSIZE can be optionally
 broken into 2, 4, or 8 pieces, each of which is addressable; these pieces
 may be DEV_BSIZE, or some multiple of a DEV_BSIZE unit."

Inne interesujące szczegóły; http://linux.about.com/library/cmd/blcmdl2_stat.htm

„Jeśli wykonujesz (ale nie zapisujesz) uprawnienia do katalogu I masz uprawnienia do zapisu w pliku znajdującym się wewnątrz, nie możesz usunąć pliku (ponieważ wymaga to usunięcia go z listy). jest to plik tekstowy, którego możesz użyć vi, aby go otworzyć i usunąć wszystko. Plik nadal będzie tam, ale będzie pusty. " ... Baldrick

stat -f "% Sp - & gt; właściciel =% SHp grupa =% SMp inny =% SLp", aby wyświetlić statystyki ACL

Sunnyskyguy EE75
źródło
Wiem to, ale to nie odpowiada na moje pytanie. Zmienić zdanie: mogę to zrobić ls Jeżeli mam r--. Dlaczego nie mogę tego zrobić? mv Jeżeli mam -w-? Powinien działać tak samo, ponieważ żaden z nich nie wymaga dostępu do i-węzłów.
Flavien
pomyśl o zapisaniu lub wymazaniu treści jako delegowanej autoryzacji z bitem atrybutu „w”, ale usunięciem nazwy pliku jako decyzji wykonawczej z bitem „exec”.
Sunnyskyguy EE75