Folder z TYLKO zezwoleniem na zapis jest bezużyteczny… prawda?

10

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:

  1. Czy ta moja analogia jest poprawna, czy może to duży błąd?
  2. Niezależnie od poprzedniej odpowiedzi, czy jest jakaś sytuacja, w której posiadanie folderu z uprawnieniami opisanymi jest właściwe?
wmnorth
źródło
3
Być może nie każda kombinacja jest przydatna. Na przykład w języku angielskim mamy słowa, te słowa składają się z liter, nie wszystkie kombinacje składają się z poprawnych słów. np. aoeuidhtns
ctrl-alt-delor
W ten sposób nie możesz np. Utworzyć pliku? Państwo zwrócić się do przestrzeni systemu plików i węzła, a potem napisać imię i-węzeł w tabeli katalogów. Trzeba mieć tylko problem mieć 2 pliki o tej samej nazwie, ale innego węzła w tym samym katalogu ...
Hastur
@Hastur: Też tak myślałem, ale kiedy mkdir foo ; chmod 200 foo ; touch foo/barto rozumiem touch: cannot touch ‘foo/bar’: Permission denied. Dzieje się tak, nawet jeśli foo / bar już istnieje. Testuję w bash (Arch Linux).
wmnorth
Moja wina Myślałem, że przepisujesz z kodu źródłowego system ... nie możemy mieć dwóch plików o tej samej nazwie w tym samym katalogu, więc logiczne jest, aby nie dawać możliwości jego utworzenia.
Hastur
Tak, to jest bezużyteczne. Rozdzielczość i-węzła wymaga również „x” i „r”, dlatego w katalogach nawet pojedynczy „rw” jest bezużyteczny.
peterh - Przywróć Monikę

Odpowiedzi:

3

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.

Barmar
źródło
1
  1. Czy ta moja analogia jest poprawna, czy może to duży błąd?

Myślę, że to prawda, potrzebujesz uprawnień wx, aby móc pisać do folderu.

  1. Niezależnie od poprzedniej odpowiedzi, czy jest jakaś sytuacja, w której posiadanie folderu z uprawnieniami opisanymi jest właściwe?

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

root@leon:/media# mount -o umask=527,uid=enforcer,gid=ftp /dev/sdb1 /media/pen/
root@leon:/media# ls /media/pen/ -la
total 44
d-w-r-x--- 10 enforcer ftp  4096 Dec 31  1969 .
drwxr-xr-x  8 root     root 4096 Oct 17 16:14 ..

następnie z enforcer użytkownika spróbuj napisać nowy plik

enforcer@leon:~$ touch /media/pen/hola
touch: cannot touch ‘/media/pen/hola’: Permission denied

odmontować i ponownie zamontować za pomocą wx

root@leon:/media# umount /dev/sdb1
root@leon:/media# mount -o umask=427,uid=enforcer,gid=ftp /dev/sdb1 /media/pen/
root@leon:/home/jjorge# ls /media/pen/ -la
total 44
d-wxr-x--- 10 enforcer wim  4096 Dec 31  1969 .
drwxr-xr-x  8 root     root 4096 Oct 17 16:14 ..

Spróbuj ponownie

enforcer@leon:~$ touch /media/pen/hola
enforcer@leon:~$ ls /media/pen/
ls: cannot open directory /media/pen/: Permission denied
enforcer@leon:~$ cat /media/pen/hola
cat: /media/pen/hola: Permission denied

ftp@leon:/home/jjorge$ ls /media/pen/ -la
total 44
d-wxr-x--- 10 enforcer ftp  4096 Oct 20 10:20 .
drwxr-xr-x  8 root     root 4096 Oct 17 16:14 ..
--wxr-x---  1 enforcer wim     0 Oct 20 10:20 hola

Dzięki tej konfiguracji możesz teraz pisać

Javier Jorge
źródło