Które uprawnienia wpływają na tworzenie twardego łącza? Czy sama własność pliku ma znaczenie?
Załóżmy, że użytkownik alice
chce utworzyć dowiązanie twarde do pliku target.txt
w katalogu target-dir
.
- Uprawnienia, które nie
alice
potrzebują zarównotarget.txt
atarget-dir
? - Jeśli
target.txt
jest własnością użytkownikabill
itarget-dir
jest własnością użytkownikachad
, czy coś to zmienia?
Próbowałem zasymulować tę sytuację, tworząc następującą strukturę folderów / plików w ext4
systemie plików:
#> ls -lh . *
.:
drwxr-xr-x 2 bill bill 60 Oct 1 11:29 source-dir
drwxrwxrwx 2 chad chad 60 Oct 1 11:40 target-dir
source-dir:
-r--r--r-- 1 bill bill 0 Oct 1 11:29 target.txt
target-dir:
-rw-rw-r-- 1 alice alice 0 Oct 1 11:40 dummy
Chociaż alice
może utworzyć łącze miękkie target.txt
, nie może utworzyć twardego łącza:
#> ln source-dir/target.txt target-dir/
ln: failed to create hard link ‘target-dir/target.txt’ => ‘source-dir/target.txt’: Operation not permitted
Jeśli alice
własność target.txt
i żadne uprawnienia nie zostaną zmienione, łącze twarde powiedzie się. Czego tu brakuje?
linux
permissions
hard-link
gcscaglia
źródło
źródło
target.txt
itarget-dir
uprawnień, chyba żesudo
jako root.alice
Mogę uzyskać dostęp zarówno do oryginalnego pliku, jak i twardego łącza (utworzonego za pomocąsudo
), ale nie mogę utworzyć łącza jako użytkownik,alice
mimo że wszyscy zgadzamy się na te uprawnienia, powinien wystarczyć.Odpowiedzi:
Aby utworzyć twardy link
alice
, potrzebne będąwrite+execute
uprawnieniatarget-dir
we wszystkich przypadkach. Wymagane uprawnieniatarget.txt
będą się różnić:fs.protected_hardlinks = 1
toalice
wymaga własnościtarget.txt
lub przynajmniejread+write
uprawnień do tego.fs.protected_hardlinks = 0
to zrobi dowolny zestaw uprawnień; Nawet 000 jest w porządku.Ta odpowiedź na podobne pytanie zawierała brakującą informację, aby odpowiedzieć na to pytanie.
From http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1 [moje podkreślenie]:
źródło
alice
wymaga przynajmniej uprawnień do odczytutarget.txt
i zapisu + wykonania uprawnień dotarget-dir
.Teraz struktura uprawnień działa jako trzykrotnie oddzielony zestaw:
Dlatego pytanie dotyczące własności dotyczy tylko tego, dla którego zestawu uprawnień wymagane są uprawnienia
alice
, a mianowicie:alice
jest właścicielem, wymagane uprawnienia muszą znajdować się w części „użytkownik”.alice
należy do grupy, która jest jej właścicielem, wymagane uprawnienia muszą znajdować się w części „grupa”.alice
nie jest właścicielem i nie należy do grupy, która jest właścicielem, wymagane uprawnienia muszą znajdować się w „innej” części.źródło
target.txt
ma 444 uprawnienia itarget-dir
777 uprawnień, ale nie mogę utworzyć twardego łącza, chyba że robię to jako root lub posiadam plik, do którego się odsyłam. Co dziwne, miękki link będzie działał zgodnie z opisem.