Po latach pracy z Linuksem i spędzaniu wolnego czasu postanowiłem wrócić do podstaw. Ponownie przeczytałem więc informacje na temat uprawnień (bez sprawdzania kodu źródłowego) i jego specjalnych przypadków dla folderów, i wymyśliłem nowy (przynajmniej dla mnie ...) sposób myślenia o uprawnieniach do folderów (dla konkretnego użytkownika / grupa / inne): Wyobrażam sobie folder jako tabelę z dwiema kolumnami, tak jak poniżej:
filename | inode
foo | 111
bar | 222
Uprawnienie do odczytu oznacza, że możesz czytać (i wyświetlać) lewą kolumnę tabeli, uprawnienie do zapisu odpowiada dodawaniu i usuwaniu wpisów w tabeli, a uprawnienie do wykonywania odpowiada możliwości tłumaczenia z nazwy pliku na i-węzeł; tzn. możesz uzyskać dostęp do zawartości folderu.
Przeprowadziłem kilka eksperymentów i wszystkie wyniki są zgodne z tym moim „światopoglądem”, ale jeden wniosek wydaje się nieunikniony: że folder z uprawnieniami d-w-------
jest całkowicie bezużyteczny. Opracowanie: nie można wyświetlić listy jego zawartości, nie można odczytać żadnych plików, o których wiadomo, że istnieją w środku (ponieważ nie można tłumaczyć nazw na i-węzły), nie można usunąć, zmienić nazwy ani dodać plików, ponieważ znowu oznaczałoby to tłumaczenie , i nie można nawet dodać linków stałych (ponieważ, jak sądzę, oznaczałoby to dodanie nazwy oraz numeru i-węzła, co oznacza, że znacie oba, co z kolei, ponownie przypuszczając, narusza cel cofnięcia zezwolenia na wykonanie) . I oczywiście, jeśli w jednym z takich folderów znajdują się pliki, nie można również usunąć tego folderu, ponieważ nie można usunąć jego zawartości.
Więc ... chciałbym zadać dwa pytania:
- Czy ta moja analogia jest poprawna, czy może to duży błąd?
- Niezależnie od poprzedniej odpowiedzi, czy jest jakaś sytuacja, w której posiadanie folderu z uprawnieniami opisanymi jest właściwe?
mkdir foo ; chmod 200 foo ; touch foo/bar
to rozumiem touch: cannot touch ‘foo/bar’: Permission denied
. Dzieje się tak, nawet jeśli foo / bar już istnieje. Testuję w bash (Arch Linux).