it-swarm-ru.tech

Имеют ли значение разрешения родительского каталога при доступе к подкаталогу?

Если у меня есть корневая папка с некоторыми ограничительными правами доступа, скажем, 600, и если дочерние папки/файлы имеют разрешение 777, сможет ли каждый читать/писать/выполнять дочерний файл, даже если корневая папка имеет 600?

168
Ken Li

Точное правило таково: вы можете просматривать каталог тогда и только тогда, когда у вас есть разрешение на его выполнение.

Так, например, для доступа к 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 не сможет получить доступ к остальной части системы (включая запуск сценариев Shell с /bin/sh или динамически связанные двоичные файлы, к которым требуется доступ /lib, поэтому вам понадобится углубиться для практического использования, например, setfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib).

Разрешение на чтение в каталоге дает право перечислять записи. Предоставление разрешения на выполнение без предоставления разрешения на чтение иногда полезно: имена записей служат паролями для доступа к ним. Я не могу думать о каком-либо использовании в предоставлении разрешения на чтение или запись в каталог без разрешения на выполнение.

195

Нет. Разрешение корневой папки ограничивает разрешение дочерних файлов. Можешь попробовать.

$ mkdir rootdir
$ touch ./rootdir/childfile
$ chmod 777 ./rootdir/childfile
$ chmod 600 rootdir
$ cat ./rootdir/childfile

Я получаю это:

$ cat: ./rootfolder/childfile: permission denied
34
goovim

Вы можете сделать дочерний каталог доступным для записи, даже если родительский каталог - нет. Я делаю это для групп.

Например: родительский каталог принадлежит кодеру группы

drwxr-sr-x

дочерний каталог

drwxrwsr-x

Вы (любой член группы кодеров) все еще можете писать в дочерний каталог, но не в родительский каталог.

4
Kemin Zhou

Вы можете создать жесткую ссылку для доступа к файлу, даже если у вас нет привилегии на выполнение в родительском каталоге. Но подвох в том, что вам нужно создать жесткие ссылки, прежде чем вы потеряете право на выполнение в родительском каталоге.

$ ln foo/bar/test_privs privs_test_checking
1
Kamal