Если у меня есть корневая папка с некоторыми ограничительными разрешениями, скажем, 600, и если у дочерних папок / файлов есть разрешение 777, сможет ли каждый читать / писать / выполнять дочерний файл, даже если у корневой папки есть 600?
Если у меня есть корневая папка с некоторыми ограничительными разрешениями, скажем, 600, и если у дочерних папок / файлов есть разрешение 777, сможет ли каждый читать / писать / выполнять дочерний файл, даже если у корневой папки есть 600?
Ответы:
Точное правило таково: вы можете просматривать каталог тогда и только тогда, когда у вас есть разрешение на его выполнение.
Так, например, для доступа dir/subdir/file
вам нужно разрешение на выполнение dir
и dir/subdir
, плюс, разрешения на file
тип доступа, который вы хотите. Что касается угловых случаев, я не уверен, универсально ли, что вам нужно разрешение на выполнение в текущем каталоге для доступа к файлу по относительному пути (вы делаете это в Linux).
Способ доступа к файлу имеет значение. Например, если у вас есть разрешения на выполнение, /foo/bar
но не на /foo
, но у вас есть текущий каталог /foo/bar
, вы можете обращаться к файлам /foo/bar
по относительному пути, но не по абсолютному пути. Вы не можете изменить /foo/bar
в этом сценарии; более привилегированный процесс предположительно был сделан cd /foo/bar
до того, как он стал непривилегированным. Если файл имеет несколько жестких ссылок, путь, который вы используете для доступа к нему, определяет ваши ограничения доступа.
Символические ссылки ничего не меняют. Ядро использует права доступа вызывающего процесса для их обхода. Например, если sym
это символическая ссылка на каталог dir
, вам нужно разрешение на выполнение dir
для доступа sym/foo
. Права доступа к самой символической ссылке могут иметь или не иметь значения в зависимости от ОС и файловой системы (некоторые уважают их, некоторые игнорируют их).
Удаление разрешения на выполнение из корневого каталога фактически ограничивает пользователя частью дерева каталогов (которое должен изменить более привилегированный процесс). Это требует списков контроля доступа для любого использования. Например, если /
и /home
являются запрещенными для joe
( setfacl -m user:joe:0 / /home
) и /home/joe
являются joe
домашним каталогом, то joe
вы не сможете получить доступ к остальной части системы (включая запуск сценариев оболочки с помощью /bin/sh
или динамически связанных двоичных файлов, к которым требуется доступ /lib
, поэтому вы ' необходимо углубиться для практического использования, например setfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib
).
Разрешение на чтение в каталоге дает право перечислять записи. Предоставление разрешения на выполнение без предоставления разрешения на чтение иногда полезно: имена записей служат паролями для доступа к ним. Я не могу думать о каком-либо использовании в предоставлении разрешения на чтение или запись в каталог без разрешения на выполнение.
Вы можете сделать дочерний каталог доступным для записи, даже если родительский каталог - нет. Я делаю это для групп.
Например: родительский каталог принадлежит кодеру группы
drwxr-sr-x
дочерний каталог
drwxrwsr-x
Вы (любой член группы кодеров) все еще можете писать в дочерний каталог, но не в родительский каталог.
Вы можете создать жесткую ссылку для доступа к файлу, даже если у вас нет привилегии на выполнение в родительском каталоге. Но подвох в том, что вам нужно создать жесткие ссылки, прежде чем вы потеряете право на выполнение в родительском каталоге.
$ ln foo/bar/test_privs privs_test_checking