Попрацювавши з Linux протягом багатьох років і опинившись з деяким вільним часом, я вирішив переглянути деякі основи. Тож я перечитав інформацію про дозволи (не перевіряючи вихідний код) та її особливі випадки для папок, і придумав новий (мені щонайменше ...) спосіб думати про дозволи на папки (для конкретного користувача / група / інші): Я уявляю папку як таблицю з двома стовпцями.
filename | inode
foo | 111
bar | 222
У прочитаних кошти дозволу ви можете прочитати (і список) лівий стовпчик таблиці, запис дозволу відповідає додаванню і видалення записів в таблицю, і виконання дозволу відповідає можливості переводити з ім'ям файлу в індексний дескриптор; тобто ви можете отримати доступ до вмісту папки.
Я робив кілька експериментів, і всі результати відповідають цьому моєму "світогляду", але один висновок видається неминучим: папка з дозволами d-w-------абсолютно марна. Розвиваючи: ви не можете перелічити його вміст, ви не можете прочитати файли, які ви знаєте, що існують всередині (тому що ви не можете перекласти імена в inode), ви не можете видалити або перейменувати або додати файли, тому що знову це означатиме переклад , і ви навіть не можете додати жорсткі посилання (тому що, я вважаю, це означатиме додавання імені, а також номера inode, а це означає, що ви знаєте обидва, що, в свою чергу, знову ж таки вважаючи, порушує мету встановлення дозволу на виконання) . І звичайно, якщо в одній такій папці є файли, ви також не можете видалити цю папку, оскільки ви не можете видалити її вміст.
Отже ... я хотів би задати два питання:
- Це моя аналогія правильна, чи це велика помилка?
- Незалежно від попереднього відповіді, чи є якісь - або ситуації , коли наявність папки з дозволами , як описано у відповідних випадках?
mkdir foo ; chmod 200 foo ; touch foo/barя дістався touch: cannot touch ‘foo/bar’: Permission denied. Це трапляється, навіть якщо foo / bar вже існує. Я тестую в bash (Arch Linux).