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?
źródło
mkdir foo ; chmod 200 foo ; touch foo/bar
to rozumiemtouch: cannot touch ‘foo/bar’: Permission denied
. Dzieje się tak, nawet jeśli foo / bar już istnieje. Testuję w bash (Arch Linux).Odpowiedzi:
Twoje zrozumienie jest właściwie poprawne. Lepszym sposobem na zastanowienie się nad uprawnieniem do wykonywania jest to, że pozwala on robić rzeczy z nazwą pliku lub katalogu w katalogu (innym niż tylko czytanie samej nazwy). Większość z tych rzeczy polega na przetłumaczeniu nazwy na i-węzeł, ale obejmuje także tworzenie nowych nazw i usuwanie istniejących nazw.
Zezwolenie na zapis do katalogu bez wykonania jest zatem dość bezużyteczne, ponieważ nie można nic napisać, jeśli nie można uzyskać dostępu do plików w nim zawartych.
źródło
Myślę, że to prawda, potrzebujesz uprawnień wx, aby móc pisać do folderu.
Możesz mieć proces, który zapisuje informacje w folderze, a inny zużywa je, ale musisz uniemożliwić pisarzowi odczytanie innych informacji przechowywanych w tym miejscu.
Sytuacja opisana wcześniej jest przydatna w jednostkach automatycznego egzekwowania prędkości. Jednostki te muszą przejść proces weryfikacji, w którym urzędnik państwowy musi zminimalizować możliwości zafałszowania. Niektóre jednostki automatycznego egzekwowania prędkości mają zewnętrzną kartę pamięci SD, na której system przechowuje rejestry naruszeń. Ale może również przechowywać „konfiguracyjny” plik magii, który nielegalnie zmienia zachowanie zweryfikowanej jednostki. Tak więc proces, który zapisuje rejestr naruszeń, nie może być w stanie odczytać niczego z karty pamięci SD.
Oto przykład, najpierw tylko z zapisem, a potem jak sprawić, by działał z wx:
Zamontuj urządzenie
następnie z enforcer użytkownika spróbuj napisać nowy plik
odmontować i ponownie zamontować za pomocą wx
Spróbuj ponownie
Dzięki tej konfiguracji możesz teraz pisać
źródło