Как полномочия файла относятся к символьным ссылкам?

Скажем, у Вас есть эта структура:

+ directory
-- file1
-- file2
-- file3 -> /tmp/file3

file3 ссылка на другого file3 где-то в другом месте в системе.

Теперь скажем, я chmod 777 каталог и все содержание в нем. Делает мой file3 в /tmp получить те полномочия? Кроме того, скажем, у нас есть та же ситуация, но инвертированный.

/tmp/file3 -> /directory/file3

Если я применяю полномочия на файл, связываемый с, как это производит ссылку?

94
задан 23.07.2014, 17:27

0 ответов

Это зависит от того, как вы вызываете chmod и от платформы, на которой вы работаете.

Например, в системе Linux, man chmod говорит следующее:

chmod никогда не меняет разрешения символических линков; chmod системный вызов не может изменить свои разрешения. Это не проблема так как разрешения на символические ссылки никогда не используются. Однако, для каждой символической ссылки, перечисленной в командной строке, chmod изменяет значение параметра разрешения на указанный файл. Напротив, chmod игнорирует символические ссылки, встречающиеся при рекурсивном обратном пути в каталогах.

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

Для примера предположим, что вы находитесь на машине с Linux до конца этого ответа.

Если в первом случае вы запустите каталог chmod -R 777 для рекурсивного изменения разрешений, цель ссылки не будет затронута, но если вы сделаете каталог/*, то она будет затронута.

Если вы напрямую измените разрешения на целевой каталог ссылок, эти разрешения пройдут (поскольку, как говорят man-страница и baraboom, фактические разрешения на ссылку ни для чего не используются).


Тест-журнал для иллюстрации:

$ mkdir dir && touch dir/file{1,2} /tmp/file3 && ln -s {/tmp,dir}/file3
$ ls -l dir/* /tmp/file3
-rw-r--r-- 1 user group  0 2011-06-27 22:02 /tmp/file3
-rw-r--r-- 1 user group  0 2011-06-27 22:02 dir/file1
-rw-r--r-- 1 user group  0 2011-06-27 22:02 dir/file2
lrwxrwxrwx 1 user group 10 2011-06-27 22:02 dir/file3 -> /tmp/file3

$ chmod -R 777 dir && ls -l dir/* /tmp/file3
-rw-r--r-- 1 user group  0 2011-06-27 22:02 /tmp/file3
-rwxrwxrwx 1 user group  0 2011-06-27 22:02 dir/file1
-rwxrwxrwx 1 user group  0 2011-06-27 22:02 dir/file2
lrwxrwxrwx 1 user group 10 2011-06-27 22:02 dir/file3 -> /tmp/file3

$ chmod 700 dir/* && ls -l dir/* /tmp/file3
-rwx------ 1 user group  0 2011-06-27 22:02 /tmp/file3
-rwx------ 1 user group  0 2011-06-27 22:02 dir/file1
-rwx------ 1 user group  0 2011-06-27 22:02 dir/file2
lrwxrwxrwx 1 user group 10 2011-06-27 22:02 dir/file3 -> /tmp/file3
92
ответ дан 07.12.2019, 07:58

Теги

Похожие вопросы