Создание жесткой ссылки - Разрешения?

17

Какие разрешения влияют на создание жестких ссылок? Имеет ли значение владение файлом?


Предположим, пользователь 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и никакие разрешения не изменены, жесткая ссылка завершается успешно. Что мне здесь не хватает?

gcscaglia
источник
Это для назначения? Это может повлиять на вид ответов, которые некоторые предпочтут дать, если это так (не то, что было бы недопустимо задавать вопрос о задании, конечно). Во всяком случае, вы пытались просто создать этот сценарий и посмотреть, что происходит?
Эрик Ренуф
Нет, это не для назначения. Я сталкиваюсь с этим точным сценарием, и у меня есть некоторые догадки, но я подумал, что было бы лучше спросить с теоретической точки зрения. В моем случае я не в состоянии создать жесткую ссылку независимо от target.txtи target-dirразрешений, если я sudoкак корень.
gcscaglia
Жесткие ссылки имеют те же права собственности и права доступа, что и доступ к исходному файлу.
teppic
@teppic Моя трудность - не получить доступ к созданной жесткой ссылке, это создать жесткую ссылку, так как. aliceЯ могу получить доступ как к исходному файлу, так и к жесткой ссылке на него (созданный с помощью sudo), но я не могу создать ссылку как пользователь, aliceнесмотря на то, что мы все согласны, этих разрешений должно быть достаточно для него.
gcscaglia

Ответы:

19

Для создания жесткой ссылки 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 [выделено мной]:

: жесткие ссылки

В системах, в которых каталоги, доступные для записи пользователем, находятся в том же разделе, что и системные файлы, давним классом проблем безопасности является основанная на жесткой ссылке гонка на время проверки и использования, чаще всего встречающаяся в каталогах, доступных для записи во всем мире. как / тмп. Распространенным методом использования этого недостатка является пересечение границ привилегий при переходе по заданной жесткой ссылке (т. Е. Корневой процесс следует по жесткой ссылке, созданной другим пользователем). Кроме того, существует проблема, когда пользователи могут «закрепить» потенциально уязвимый файл setuid / setgid, чтобы администратор фактически не обновил систему полностью.

Решение состоит в том, чтобы разрешить создание жестких ссылок только в том случае, если пользователь уже является владельцем существующего файла или если у него уже есть доступ для чтения / записи к существующему файлу .

gcscaglia
источник
Благодарность! Вот за что я боролся целый день на Debian 9!
Арда
Почему я получаю сообщение «Операция не разрешена», даже если в файле есть rwx perms и rw perms?
Майкл
1

aliceтребуется как минимум разрешение на чтение target.txtи запись + разрешение на выполнение target-dir.

Теперь структура разрешений работает как тройной разделенный набор:

  1. Полномочия пользователя: применяются к пользователю, которому принадлежит узел.
  2. Групповые разрешения: применяются к любому пользователю, принадлежащему к группе, которой принадлежит узел.
  3. Права других пользователей : применяются к любому другому пользователю / группе, не владеющему узлом.

Следовательно, вопрос о праве собственности влияет только на то, для какого набора разрешений требуются необходимые разрешения alice:

  • Если aliceвладелец - пользователь, требуемые разрешения должны быть в разделе «пользователь».
  • Если он aliceявляется частью группы, которой он принадлежит, требуемые разрешения должны быть в «групповой» части.
  • Если aliceон не принадлежит ему и не является частью группы, которой он принадлежит, требуемые разрешения должны быть в «другой» части.
dave_alcarin
источник
Я тоже так думал. Но в моей ситуации target.txtесть 444 разрешения и target-dir777 разрешений, но я не могу создать жесткую ссылку, если я не имею права root или не владею файлом, на который я ссылаюсь. Как ни странно, мягкая ссылка будет работать, как вы описываете.
gcscaglia
Эту информацию было бы полезно иметь в самом вопросе, я рекомендую вам обновить. Как ни странно, я не думал об этом раньше ... но поддерживает ли файловая система, в которой вы работаете, Unix-подобные владения / разрешения, для начала?
dave_alcarin
Да, это так, это стандартная версия ext4 в системе Fedora 21; Ссылка работает, когда я владелец файла.
gcscaglia