Какие разрешения влияют на создание жестких ссылок? Имеет ли значение владение файлом?
Предположим, пользователь alice
хочет создать жесткую ссылку на файл target.txt
в каталоге target-dir
.
- Какие разрешения
alice
нужны для обоихtarget.txt
иtarget-dir
? - Если
target.txt
он принадлежит пользователюbill
иtarget-dir
принадлежит емуchad
, это что-то меняет?
Я попытался смоделировать эту ситуацию, создав следующую структуру папок / файлов в ext4
файловой системе:
#> 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
Хотя она alice
может создать программную ссылку target.txt
, она не может создать жесткую ссылку:
#> ln source-dir/target.txt target-dir/
ln: failed to create hard link ‘target-dir/target.txt’ => ‘source-dir/target.txt’: Operation not permitted
Если alice
владелец target.txt
и никакие разрешения не изменены, жесткая ссылка завершается успешно. Что мне здесь не хватает?
linux
permissions
hard-link
gcscaglia
источник
источник
target.txt
иtarget-dir
разрешений, если яsudo
как корень.alice
Я могу получить доступ как к исходному файлу, так и к жесткой ссылке на него (созданный с помощьюsudo
), но я не могу создать ссылку как пользователь,alice
несмотря на то, что мы все согласны, этих разрешений должно быть достаточно для него.Ответы:
Для создания жесткой ссылки
alice
понадобятсяwrite+execute
разрешения наtarget-dir
включение во всех случаях. Необходимые разрешенияtarget.txt
зависят от:fs.protected_hardlinks = 1
тогдаalice
необходимо или право собственностиtarget.txt
или хотя быread+write
разрешения на это.fs.protected_hardlinks = 0
тогда подойдет любой набор разрешений; Даже 000 это хорошо.Этот ответ на подобный вопрос содержал недостающую часть информации, чтобы ответить на этот вопрос.
С http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1 [выделено мной]:
источник
alice
требуется как минимум разрешение на чтениеtarget.txt
и запись + разрешение на выполнениеtarget-dir
.Теперь структура разрешений работает как тройной разделенный набор:
Следовательно, вопрос о праве собственности влияет только на то, для какого набора разрешений требуются необходимые разрешения
alice
:alice
владелец - пользователь, требуемые разрешения должны быть в разделе «пользователь».alice
является частью группы, которой он принадлежит, требуемые разрешения должны быть в «групповой» части.alice
он не принадлежит ему и не является частью группы, которой он принадлежит, требуемые разрешения должны быть в «другой» части.источник
target.txt
есть 444 разрешения иtarget-dir
777 разрешений, но я не могу создать жесткую ссылку, если я не имею права root или не владею файлом, на который я ссылаюсь. Как ни странно, мягкая ссылка будет работать, как вы описываете.