Подтвердить что ты не робот

Символическая ссылка не наследует разрешения

Например, у меня есть foo.sh с разрешениями 770. Когда я это сделаю:

ln -s foo.sh bar.sh

Ссылка bar.sh имеет 2777 разрешений. Почему это? Я думал, что они должны быть унаследованы?

4b9b3361

Ответ 1

Разрешения на символическую ссылку в значительной степени несущественны. Обычно они 777 изменяются с помощью настройки umask.

Стандарт POSIX для symlink() говорит:

Значения бит режима файла для созданной символической ссылки не определены. Все интерфейсы, указанные в POSIX.1-2008, должны вести себя так, как будто содержимое символических ссылок всегда можно прочитать, за исключением того, что значение бит режима файла, возвращаемое в поле st_mode структуры stat, не указано.

POSIX предоставляет системный вызов lchown(); он не предоставляет функцию lchmod().

(На моем MacOS X 10.7.1 с помощью umask 022 вновь созданная символическая ссылка заканчивается 755 правами, а с umask 002 разрешения становятся 775. Таким образом, наблюдение, что ссылки создаются с 770, 700 и т.д. разрешения могут быть точными, а настройки разрешений по-прежнему несущественны и не влияют на удобство использования символической ссылки.)


Дальнейшие исследования о символических ссылках на RHEL 5 и MacOS X

  • В Linux (RHEL 5 для x86_64; kernel 2.6.18-128.el5) я могу увидеть только 777 разрешений на символическую ссылку при ее создании:

    $ (ls -l xx.pl; umask 777; ln -s xx.pl pqr; ls -l xx.pl pqr)
    -rw-r--r-- 1 jleffler rd 319 2011-09-05 22:10 xx.pl
    lrwxrwxrwx 1 jleffler rd   5 2011-09-21 10:16 pqr -> xx.pl
    -rw-r--r-- 1 jleffler rd 319 2011-09-05 22:10 xx.pl
    $
    

    Я запустил это в суб-оболочке, поэтому установка umask не была постоянной.

  • В MacOS X (10.7.1) я могу увидеть переменные разрешения для символической ссылки:

    $ (ls -l xxx.sql; umask 777; ln -s xxx.sql pqr; ls -l xxx.sql pqr)
    -rw-r--r--  1 jleffler  staff  1916 Jun  9 17:15 xxx.sql
    
    ls: pqr: Permission denied
    l---------  1 jleffler  staff     7 Sep 21 10:18 pqr
    -rw-r--r--  1 jleffler  staff  1916 Jun  9 17:15 xxx.sql
    $
    

    Обратите внимание, что это одна и та же последовательность команд (указать или взять имя файла), связанное с.

  • В MacOS X команда chmod имеет параметр -h для изменения прав доступа к самой символической ссылке:

    -h Если файл является символической ссылкой, измените режим самой ссылки, а не файл, на который указывает ссылка.

  • В MacOS X разрешения на тему символической ссылки; вы не можете прочитать символическую ссылку, если у вас нет разрешения на чтение символической ссылки (или вы root). Следовательно, ошибка в выводе ls выше. И readlink не удалось. Etc.

  • В MacOS X, chmod -h 100 pqr (выполнить), я могу использовать ссылку (cat pqr works), но не читать ссылку. Напротив, chmod -h 400 pqr позволяет мне прочитать ссылку и использовать ссылку. И для полноты, chmod -h 200 pqr позволяет мне использовать ссылку, но не читать ее. Я предполагаю, что без формального тестирования аналогичные правила применяются к группе и другим.

  • В MacOS X, похоже, что разрешение на чтение или запись на символической ссылке позволяет вам использовать ее в обычном режиме, но только разрешение на выполнение означает, что вы не можете найти, где точки ссылки (readlink(2) не удается), даже если вы может получить доступ к файлу (или, предположительно, к каталогу) на другом конце ссылки.

Заключение (может быть изменено):

  • В некоторых версиях Linux вы можете получить только 777-разрешение на символическую ссылку.
  • В MacOS X вы можете настроить разрешения на символическую ссылку, и это повлияет на тех, кто может использовать символическую ссылку.

Поведение MacOS X - это расширение поведения, заданного POSIX, или отклонение от поведения, установленного POSIX. Это немного усложняет жизнь. Это означает, что вы должны убедиться, что любой, кто должен использовать ссылку, имеет разрешение на это. Это обычно тривиально (umask 022 означает, что это будет так).

Подходящий системный вызов для chown -h на MacOS X - setattrlist(2).

Ответ 2

http://en.wikipedia.org/wiki/Symbolic_link

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

Разрешения для ссылки - это просто. Он указывает, что он все еще имеет собственные разрешения.