Виконати проти читання біт. Як працюють дозволи довідника в Linux?


380

У своїй CMS я помітив, що каталоги потребують виконуваного біта ( +x), встановленого для користувача, щоб відкрити їх. Чому для читання каталогу потрібен дозвіл на виконання, і як працюють дозволи довідника в Linux?


17
... е-е, тому що для цього є прапор "+ x"
badp


16
Подумайте так: запис у каталозі містить назви файлів , тому "читання" каталогу - це перелік файлів, "використання" каталогу - доступ до файлів.
tylerl

7
Якщо встановлено біт виконання каталогу , ви можете пройти його ієрахію . Зважаючи на те, що ви належите до "інших" людей та маєте лише встановлений біт ( chmod 771 dirOne), ви не можете перелічити вміст dirOne. АЛЕ якщо він містить підкаталог "dirTwo" з правами, на зразок ( chmod 774 dirTwo), ви фактично можете перелічити його вміст!
Stphane

1
Майбутні відвідувачі також повинні побачити відповідне запитання на AskUbuntu: askubuntu.com/q/1106822/295286
Сергій Колодяжний

Відповіді:


351

При застосуванні дозволів до каталогів в Linux біти дозволу мають інше значення, ніж для звичайних файлів.

  • Біт читання ( r) дозволяє вражений користувачеві список файлів в директорії
  • Біти записи ( w) дозволяє ураженого користувачеві створювати, перейменовувати або видаляти файли в каталозі, і змінювати атрибути довідника
  • Біт виконання ( x) дозволяє вражений користувачеві увійти в каталог, а також доступ до файлів і каталогів всередині
  • Липкий біт ( Tабо , tякщо виконати біт встановлений для інших) стверджує , що файли і директорії в цьому каталозі можуть бути видалені тільки або перейменувати їх власником (або корінь)

25
Чудова відповідь, але я думаю, що останнє речення вводить в оману. Жоден із цих дозволів фактично не може бути замінений на файл. Тут "доступ" дещо неоднозначний: +xу каталозі надається доступ до файлів inodes через цей конкретний каталог (нічого менше, нічого більше, ну ... можливо, теж chdirпотрібно +x). Для читання або запису вмісту одного файлу користувачеві також потрібен +r/ +wу цьому файлі, але це чіткі дозволи (вони нічого не перекривають).
Стефан Гіменез

2
Непорушний прапор є специфічним для файлової системи, і він точно не перекриє ці дозволи, тому я вважаю, що останнє речення вводить в оману :-)
Stéphane Gimenez

1
Я думаю, що може бути корисним згадати ACL у цій та інших відповідях, оскільки їх застосування для деяких каталогів може ввести в оману, якщо врахувати лише інформацію, надану Chris Down
користувач907860

4
Здається, що ця відповідь не згадує комбінованого ефекту біта запису та біту виконання, як відповідь Балдріка згадується нижче? тобто якщо у вас є лише дозвіл на запис, але не дозвіл на виконання, це зовсім марно.
xji

1
@ StéphaneGimenez " +xв каталозі надає доступ до файлів inodes" - Це здається гарним нематоніком, але, можливо, не розповідає всієї історії? Без біта виконання, встановленого в каталозі, ви не можете змінити ім'я файлу в цьому каталозі. Мені цікаво, чому це так, тому що ім'я файлу зберігається у записі каталогу, а не в inode.
Кевін Вілер

259

Спочатку подумайте: що таке каталог? Це лише список елементів (файлів та інших каталогів), які містяться в ньому. Отже: каталог = список імен.

Біт читання = Якщо встановлено, ви можете прочитати цей список. Так, наприклад, якщо у вас є каталог з іменем poems:

  • Ви можете, ls poemsі ви отримаєте список предметів, які проживають всередині ( -lдеталей не буде розкрито!).
  • Можна використовувати завершення командного рядка, тобто touch poems/so <TAB> poems/somefile.
  • Ви не можете зробити poemsсвій робочий каталог (тобто cdв нього).

Біт запису = Якщо встановлено, ви можете змінити цей список, тобто ви можете {додати, перейменувати, видалити} імена в ньому. Але! Насправді ви можете це зробити, лише якщо встановлено також біт виконання.

Execute bit = Зробіть цей каталог своїм робочим каталогом, тобто cdв нього. Вам потрібен цей дозвіл, якщо ви хочете:

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

Цікавий випадок 1 : Якщо у вас є дозволи на запис + виконання у каталозі, ви можете {видалити, перейменувати} елементи, що знаходяться в них, навіть якщо у вас немає дозволу на запис цих елементів. (використовуйте клейкий біт, щоб запобігти цьому)

Цікавий випадок 2 : Якщо у вас є дозвіл на виконання (але не запис) на каталог І у вас є дозвіл на запис для файлу, що знаходиться в ньому, ви не можете видалити файл (оскільки це передбачає видалення його зі списку). Однак ви можете видалити його вміст, наприклад, якщо це текстовий файл, ви можете використовувати vi, щоб відкрити його та видалити все. Файл все ще буде, але він буде порожнім.

Підсумок:

Біт читання = Ви можете прочитати імена зі списку.
Написати біт = Ви можете {додати, перейменувати, видалити} імена у списку, АКОБЕ також встановлений біт виконання.
Execute bit = Ви можете зробити цей каталог вашим робочим каталогом.

PS: Стаття, згадана Кусалаланда, добре прочитана.


17
Мислення про каталог як список робить речі більш зрозумілими та логічними.
Трисмегістос

20
Чудова відповідь, але занадто зосереджена на терміні "робочий каталог". Мені потрібен xбіт для будь-якого доступу до цього файлу: бо cat a/b/c/dмені потрібен xбіт на всіх a, bі cнавіть якщо я не використовую їх як cwd.
glglgl

1
Тут я дізнався, що ви не можете писати, якщо це теж не виконується! Справа 2 також цікава, чудова відповідь!
Мирко

1
Ще одна примітка полягає в тому, що навіть якщо у вас є xдозвіл на каталог, якщо ви не маєте xдозволу на файл всередині, ви не можете реально "виконати" файл. Ви можете лише catце, наприклад, але ви не можете запустити сам файл.
xji

2
Якщо ви хочете ls -lпрацювати в папці, потрібні rі xдозвіл.
Ерік Ван

44

Я підготував цю таблицю з усіма можливими дозволами та їх практичними наслідками.

Права доступу до каталогу Linux

(*) Тільки імена файлів : інші атрибути, такі як розмір або дата, не доступні. Наприклад, ви можете використовувати клавішу вкладки для автозаповнення, але не команду ls.

Деякі думки :

  • Якщо X не встановлено , R і W здебільшого марні.
  • X одна відключивши RW дає помилкове відчуття безпеки , так як ви могли б сліпо читати і писати вміст файлів і підкаталогів доступу. Ви повинні бути впевнені, що всі прямі діти каталогу мають явні дозволи.
  • Рідко ви будете використовувати інші значення, ніж:
    • 0 : Немає доступу.
    • 1 : Мінімальний доступ, що дозволяє переходити.
    • 5 : Дозволити читання / запис, але не змінюючи структуру самого дерева каталогів.
    • 7 : Повний доступ.

1
Я вважаю 5 корисним значенням, коли ви хочете дозволити читання / запис, але не змінювати структуру самого дерева каталогів.
hgiesel

Ти правий. Оновлено!
Девід

4
Велика підсумкова діаграма. Змушує мене замислитися над тим, що хтось думав -W-бути функціонально рівнозначним ---каталогів. Не дуже інтуїтивно зрозумілий. Звичайно, таких типів бітів низького рівня часто немає.
CivFan

2
Я тестував це на своєму mac, але за допомогою -W-, я міг перейменувати каталог (у каталозі з клейким бітом), але не з ---. Мабуть, це є різниця
cozyconemotel

3
@David, тобі липкий шматочок не вистачає.
Pacerier

42

Ось хороша стаття з цього приводу.

Підсумок:

Каталог зі своїм xнабором бітів дозволяє користувачеві cd(змінювати каталог) у цей каталог та отримувати доступ до файлів у ньому.

Деталі:

  • Читати ( r)

    Можливість читати імена файлів, що зберігаються в цьому каталозі.

  • Написати ( w)

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

  • Виконати ( x)

    Можливість cdпотрапляння в цей каталог та доступ до файлів у цьому каталозі.

Ось кілька прикладів, які мають полегшити розуміння:

# "Full Access".  Reegen can list, create, delete, rename, delete,
# and stat any files in dir.
# Access to file contents is subject to the permissions
# of the file itself.
# New files can be created, any file can be deleted, regardless of
# file permissions.
drwx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except create,
# delete, or rename files in this directory.
dr-x------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except list the
# filenames in this directory.  If she suspects there is a file
# named "program" she can list it, but cannot do an 'ls'
# of the directory itself.  She can access any file (file
# permissions permitting) if she knows its name.  She can
# create new files, or rename/delete existing ones.
d-wx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen cannot create or delete any files in this directory.
# She can access any file (permissions permitting) if she
# knows its name already.
d--x------  1 reegen    reegen          4096 Jan 01 2003  dir

В статті Hacking Linux Exposed є ще більше інформації .



2

Для будь-якої операції, що має доступ до файлу чи каталогу, він повинен спочатку вирішити шлях до файлу чи каталогу. Роздільна здатність вимагає, щоб користувач виконав дозвіл на всі каталоги на шляху, за винятком кінцевого компонента шляху. Отже, для каталогів ви можете думати, що виконуваний біт означає "вирішуваний".

Візьміть шлях /a/b/c.txtяк приклад, скажімо, у користувача 1) виконати дозвіл на /та /a; 2) прочитав дозвіл на читання /a/b; 3) дозвіл на читання та запис на /a/b/c.txt.

  • Користувач не прочитає (список) /a, оскільки не має дозволу на читання. Але дозвіл шляху не провалюється.

  • Користувач матиме можливість читати (список) /a/b, тому що користувач має дозвіл на виконання /, /aі права на читання /a/b. Зауважте, що під час читання /a/bім'я файлу c.txtвидно, але метадані (наприклад, розмір файлів) та вмісту немає, тому що ім'я файлу зберігається в каталозі, а не з файлом, але метадані зберігаються у вкладці файлу.

  • Користувач не зможе прочитати /a/b/c.txt, тому що при вирішенні шляху від /до /aдо /a/bнього виходить /a/bз ладу, оскільки користувач не має дозволу на виконання.

Дивіться також, як ім'я контуру розв'язано до файлу .


0

Корисна аналогія - це розглядати кожен файл як книгу, а кожен каталог - як приміщення, де зберігаються книги.

Є правила, щоб можна було перелічити всі імена в кімнаті: біт для читання каталогів. Правила видалення книги з кімнати: біт запису для каталогів. І правила входити до кімнати та досліджувати: отриманий каталог виконує біт.

Ці правила є окремими та різними, ніж правила для кожної книги. Існують правила, що дозволяють комусь відкривати книгу та читати її вміст: біт для читання для кожного файлу. Існують правила зміни вмісту книги: біт (и) запису для кожного файлу. І виконати файл: біт виконання (файлів) для кожного файлу.

Я пишу біт (и), оскільки для кожної дії є три біти. Є один біт читання для власника, один біт читання для груп (ив) і біт читання для всіх інших (інших). Якщо будь-який із цих трьох біт встановлений для конкретного користувача, у цього користувача біт читання активний. Це не має значення , як було встановлено , що біт бути активними або ˙U Ser або г Роап або про Ther, він має ті ж ефективні результати.

Таким чином, користувачеві може бути дозволено зайти до кімнати та видалити книги з бібліотеки, але не дозволяти читати вміст тієї самої книги.

Ось чому потрібен біт для читання каталогів: контролювати, кому дозволено перелічити вміст кімнати (назви книг).

І біт Execute використовується для контролю того, хто може зайти до кімнати книг.


-1

Сенс Execute для каталогів досить зрозумілий. Оскільки немає дозволу на Traverse, на відміну від Windows, ви повинні щось перевантажувати. Дизайнери вибрали Execute, що викликає нескінченну плутанину. Оскільки хлопець із комп’ютерної безпеки, який призначає Виконати права на те, чого ви насправді не збираєтесь Виконати, виглядає невиразним.


1
Винахід біта дозволу на виконання зумовлює створення концепції різного дозволу на проходження приблизно на два десятиліття. Логіка цієї відповіді залежить від історичної часової шкали, яка не є подібною до реального світу, а також не помічає існування GENERIC_EXECUTEта того, що воно є.
JdeBP
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.