Tworzenie twardego łącza - uprawnienia?

17

Które uprawnienia wpływają na tworzenie twardego łącza? Czy sama własność pliku ma znaczenie?


Załóżmy, że użytkownik alicechce utworzyć dowiązanie twarde do pliku target.txtw katalogu target-dir.

  • Uprawnienia, które nie alicepotrzebują zarówno target.txta target-dir?
  • Jeśli target.txtjest własnością użytkownika billi target-dirjest własnością użytkownika chad, czy coś to zmienia?

Próbowałem zasymulować tę sytuację, tworząc następującą strukturę folderów / plików w ext4systemie 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ż alicemoż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 alicewłasność target.txti żadne uprawnienia nie zostaną zmienione, łącze twarde powiedzie się. Czego tu brakuje?

gcscaglia
źródło
Czy to na zadanie? Może to wpłynąć na rodzaj odpowiedzi, jaką niektórzy zechcą udzielić, jeśli tak (nie to, że zadawanie pytań na temat zadania oczywiście byłoby poza zasięgiem). W każdym razie, czy próbowałeś właśnie stworzyć ten scenariusz i zobaczyć, co się stanie?
Eric Renouf
Nie, to nie jest zadanie. Staję przed tym dokładnie scenariuszem i mam pewne domysły, ale pomyślałem, że lepiej byłoby zapytać z teoretycznego punktu widzenia. W moim przypadku nie mogę utworzyć twardego linku niezależnie od uprawnień target.txti target-diruprawnień, chyba że sudojako root.
gcscaglia,
Twarde linki mają tę samą własność i uprawnienia, więc to samo, co dostęp do oryginalnego pliku.
teppic
@teppic Moja trudność to brak dostępu do utworzonego twardego łącza, to tworzenie twardego łącza, ponieważ. aliceMogę uzyskać dostęp zarówno do oryginalnego pliku, jak i twardego łącza (utworzonego za pomocą sudo), ale nie mogę utworzyć łącza jako użytkownik, alicemimo że wszyscy zgadzamy się na te uprawnienia, powinien wystarczyć.
gcscaglia,

Odpowiedzi:

19

Aby utworzyć twardy link alice, potrzebne będą write+executeuprawnienia target-dirwe wszystkich przypadkach. Wymagane uprawnienia target.txtbędą się różnić:

  • Jeśli fs.protected_hardlinks = 1to alicewymaga własności target.txtlub przynajmniej read+writeuprawnień do tego.
  • Jeśli fs.protected_hardlinks = 0to 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]:

Twarde linki:

W systemach, w których katalogi zapisywane przez użytkownika znajdują się na tej samej partycji co pliki systemowe, od dawna klasą problemów związanych z bezpieczeństwem jest wyścigowy czas sprawdzania czasu użycia oparty na dowiązaniu twardym, najczęściej spotykany w katalogach zapisywanych na całym świecie jak / tmp. Powszechną metodą wykorzystania tej wady jest przekroczenie granic uprzywilejowania podczas podążania za danym dowiązaniem twardym (tj. Proces rootowania następuje po dowiązaniu twardym utworzonym przez innego użytkownika). Ponadto istnieje problem polegający na tym, że użytkownicy mogą „przypiąć” potencjalnie podatny plik setuid / setgid, aby administrator nie zaktualizował w pełni systemu.

Rozwiązaniem jest zezwolenie na tworzenie linków twardych tylko wtedy, gdy użytkownik jest już właścicielem istniejącego pliku lub ma już dostęp do odczytu / zapisu do istniejącego pliku .

gcscaglia
źródło
Dzięki! O to walczyłem przez jeden dzień w Debian 9!
Arda
Dlaczego miałbym dostać „operacja niedozwolona”, nawet jeśli mam rwx perms na katalogu i rw perms na pliku?
Michael
1

alicewymaga przynajmniej uprawnień do odczytu target.txti zapisu + wykonania uprawnień do target-dir.

Teraz struktura uprawnień działa jako trzykrotnie oddzielony zestaw:

  1. Uprawnienia użytkownika: dotyczą użytkownika, który jest właścicielem węzła.
  2. Uprawnienia grupowe: dotyczą dowolnego użytkownika należącego do grupy, która jest właścicielem węzła.
  3. Uprawnienia innych: dotyczą dowolnego innego użytkownika / grupy nie jest właścicielem węzła.

Dlatego pytanie dotyczące własności dotyczy tylko tego, dla którego zestawu uprawnień wymagane są uprawnienia alice , a mianowicie:

  • Gdyby alice jest właścicielem, wymagane uprawnienia muszą znajdować się w części „użytkownik”.
  • Gdyby alice należy do grupy, która jest jej właścicielem, wymagane uprawnienia muszą znajdować się w części „grupa”.
  • Jeśli alicenie 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.
dave_alcarin
źródło
Też tak myślałem. Ale w mojej sytuacji target.txtma 444 uprawnienia i target-dir777 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.
gcscaglia,
Ta informacja byłaby przydatna w samym pytaniu, zalecam aktualizację. Co dziwne, nie myślałem o tym wcześniej ... ale czy system plików, w którym pracujesz, obsługuje na początku uniksowe własności / uprawnienia?
dave_alcarin
Tak, to prawda, jest to gotowe rozszerzenie ext4 w systemie fedora 21; Link działa, gdy jestem właścicielem pliku.
gcscaglia,