Разрешения на символическую ссылку в значительной степени несущественны. Обычно это 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; ядро 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
работает), но не читать ссылку. В отличие от этого, 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)
.