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

160

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

Кен Ли
источник
12
Обратите внимание, что изменение директории на 600 делает ее недоступной даже владельцу, так как вам нужно разрешение на выполнение, чтобы в нее заходил chdir ...
Шадур

Ответы:

183

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

Так, например, для доступа 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).

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

жилль
источник
32

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

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

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

$ cat: ./rootfolder/childfile: permission denied
goovim
источник
4

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

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

drwxr-sr-x

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

drwxrwsr-x

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

Кемин Чжоу
источник
1

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

$ ln foo/bar/test_privs privs_test_checking
Камаль
источник