Якщо у мене є коренева папка з деяким обмежувальним дозволом, скажімо, 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