Чи мають значення дозволу батьківського каталогу під час доступу до підкаталогу?


159

Якщо у мене є коренева папка з деяким обмежувальним дозволом, скажімо, 600, і якщо дочірні папки / файли мають 777 дозволу, чи всі зможуть читати / записувати / виконувати дочірній файл, навіть якщо коренева папка має 600?


12
Зауважте, що chmodding каталог до 600 робить його недоступним навіть власникові, оскільки вам потрібно виконати дозвіл, щоб chdir в нього ...
Shadur

Відповіді:


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

4

Ви можете зробити дочірній каталог для запису навіть батьківський каталог не. Я роблю це для груп.

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

drwxr-sr-x

дочірній каталог

drwxrwsr-x

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


1

Ви можете створити жорстке посилання для доступу до файлу, навіть якщо у батьківського каталогу у вас немає привілею на виконання. Але тут ви повинні створити жорстке посилання перед тим, як втратити привілей на виконання у батьківському каталозі

$ ln foo/bar/test_privs privs_test_checking
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.