Перевага власника користувача та групи у дозволах на файли


20

Я просто зіткнувся з чимось несподіваним (для мене) щодо дозволів на файли в Linux (Arch Linux). В основному я:

  • userX в groupX
  • fileX userX:groupX ---rwx----

Що мене спантеличує: я не можу виконувати жодної дії ( rwx) fileX. Чи це правильно? Чи може хтось підтвердити це дійсно очікуваною поведінкою?

Єдині дії, які я можу виконати, - це mvі rmтому, що у мене є дозволи на запис у батьківському каталозі.

Справа в тому, що я завжди думав, що ці дозволи згортаються один на одного, починаючи з самого загального (інший -> група -> користувач). Іншими словами, якщо o=rwxкого не хвилює, які існують права для групи та користувача? Мабуть, це не так, але це не має для мене особливого сенсу; це здається контрінтуїтивним. Єдине, в чому цей підхід здається корисним - це легко виключити дуже конкретну людину / групу, що не схоже на розумний спосіб зробити це (імхо). Крім того, власник (і група?) Повинні мати можливість chmodвсе-таки правильно? Будь-які думки з цього приводу?


Ви точно в групіX?
exussum

дріжджі, безумовно; перевірив ефективний gid зid
alex

Відповіді:


24

Справа в тому, що я завжди думав, що ці дозволи згортаються один на одного, починаючи з самого загального (інший -> група -> користувач).

Якби це було так, тоді "інші" дозволи застосовуватимуться до всіх.

Іншими словами, якщо o = rwx кого цікавить, що таке дозволи для групи та користувача?

Це відрізняється від попереднього речення. Тут ви маєте на увазі, що дозволи мають або зв'язані разом, наприклад, що користувачX має дозвіл на читання, якщо користувачевіXX користується файлом, і файл читається користувачем, або якщо група, якій належить userX, належить файлу, а файл - група -читабельна, або якщо файл можна прочитати іншим способом. Але це не так працює. Насправді o=rwxозначає, що rwxдозволи стосуються інших, але це нічого не говорить про сутності, які не є іншими.

По-перше, не має значення безпосередньо, до яких груп належить користувач. Ядро не має уявлення про користувачів, що належать до груп. Що підтримує ядро, це для кожного процесу ідентифікатор користувача ( ефективний UID ) та список ідентифікаторів групи (ефективний GID та додаткові GID). Групи визначаються під час входу, шляхом процесу входу - це процес входу, який читає групову базу даних (наприклад /etc/group). Ідентифікатори користувачів та групи успадковуються дочірніми процесами¹.

Коли процес намагається відкрити файл із традиційними дозволами Unix:

  • Якщо користувачем файлу є ефективний UID процесу, то використовуються біти дозволу користувача.
  • В іншому випадку, якщо група, що володіє файлом, є ефективним GID процесу або одним із додаткових ідентифікаторів групи, тоді використовуються біти дозволів групи.
  • В іншому випадку використовуються інші біти дозволу.

Ніколи не використовується тільки один набір бітів rwx. Користувач має перевагу над групою, яка має перевагу над іншими. Коли є списки контролю доступу , алгоритм, описаний вище, узагальнюється:

  • Якщо у файлі є ACL для ефективного UID процесу, він використовується для визначення, чи надано доступ.
  • В іншому випадку, якщо у файлі є ACL для ефективного GID процесу або один із додаткових ідентифікаторів групи процесу, тоді використовуються біти дозволів групи.
  • В іншому випадку використовуються інші біти дозволу.

Дивіться також Переважність ACLS, коли користувач належить до декількох груп, щоб отримати докладнішу інформацію про використання записів ACL, включаючи ефект маски.

Таким чином, -rw----r-- alice internsвказується файл, який може читати та писати Аліса, і який можуть читати всі інші користувачі, крім стажистів. Файл із дозволами та правом власності ----rwx--- alice internsє доступним лише для стажистів, окрім Аліси (чи вона стажистка, чи ні). Оскільки Аліса може закликати chmodзмінити дозволи, це не забезпечує ніякої безпеки; це крайня справа. У системах з ACL, узагальнений механізм дозволяє видаляти дозволи з певних користувачів або певних груп, що іноді корисно.

Використання одного набору бітів, а не або-ing всіх бітів для кожної дії (читання, запис, виконання) має ряд переваг:

  • Це має корисний ефект, що дозволяє видаляти дозволи з набору користувачів або груп у системах з ACL. У системах без ACL дозволи можна видалити з однієї групи.
  • Простіше реалізувати: перевірити один набір бітів, а не комбінувати кілька наборів бітів разом.
  • Простіше проаналізувати дозволи файлу, оскільки бере участь менше операцій.

¹ Вони можуть змінитися , коли УИП або setgid процес виконується. Це не пов’язано з проблемою.


ну ... під "згортанням" я начебто мав на увазі те саме, що АБО операція :)
alex

Дякую за ваш час; +1 за дуже детальну та досить технічну відповідь
alex

Чудова відповідь. Але у мене є питання щодо ваших заключних пунктів: Чи реально простіше реалізувати та проаналізувати? Хіба не перевірка дозволів просто зводиться до АРОНування дозволів разом, як вважав ОП?
садок

Цей крайній край мені здається дурним: (userX у groupX) + (userZ у groupX). У вас є файлX userX: groupX --- rwx ----. Тепер оригінальний автор папки userX не може отримати доступ до файлуX .. але userZ може. І вони обидва входять до однієї групи. Дійсно неінтуїтивно.
alexfvolk

4

Більш конкретні дозволи мають перевагу над менш конкретними.

userX у groupX

fileX userX: groupX --- rwx ----

Оскільки ви є власником файлу, вам надаватимуться лише дозволи власника. Власник не має дозволів. Таким чином, ви нічого не можете зробити. Якби ви не були власником файлу та членом групи, тоді застосовувались би дозволи групи.

Прочитайте цей розділ сторінки вікі

https://en.wikipedia.org/wiki/File_system_permissions#Classes


2

-rwxrw---- означає, що власник читав, записував та виконував дозволи, група читала і пише, а інші не мають дозволів.

Надані вами дозволи дозволяють групі "groupX" дозволити читати, записувати та виконувати файл. Якщо ви є учасником групи "groupX", але не є власником файлу, ці дозволи будуть застосовуватися до вас.

У цьому випадку я припускаю, що ви справді є власником файлу. Тоді до вас застосовуватимуться лише дозволи, встановлені для власника. Звичайно, власник може змінити або змінити дозволи на файл. Група, однак, не може цього зробити. Наприклад, vim запропонує підтвердити, якщо ви пишете у файл, на який у вас немає дозволу на запис, але ви є власником.

Я зазвичай читаю дозволи зліва направо. Я власник? Якщо так, то застосовуються дозволи власника. Якщо ні; я член групи? Якщо так, то застосовуються групові дозволи. Якщо ні, то дозволи на "Інше" стосуються мене.

У деяких випадках корисно бути власником файлу, але не мати дозволу на запис. Він захищає вас від випадкового видалення або зміни файлу. Особисто я встановив дозвіл 400 на всі файли моїх шаблонів, просто щоб переконатися, що я їх не змінив випадково. Те саме стосується дозволів на виконання.


1
Я вважаю, що ви неправильно зрозуміли питання. Коли ОП заявила, що дозволи "згортаються" як "Інший-> Група-> Користувач", я думаю, що вони мали на увазі, що визначаючи, чи дозволена ваша дія, спочатку перевіряються дозволи "Інші", потім "Групуються" і нарешті (якщо все інше) виходить з ладу) "Користувач".
Джозеф Р.

@JosephR. так, я це мав на увазі :)
alex

О, мої вибачення Я вилучу цю частину. Чи є у відповіді щось корисне?
arnefm

Примітка: ви повинні трохи відредагувати свою відповідь і видалити (або перефразовувати) другий абзац, оскільки він є на зразок "незрозумілим" (недостатньо зрозумілим, таким, що суперечить поведінці, яку я описав)
alex

По другій думці я, можливо, був би швидким, щоб прийняти відповідь. Вибач за це. Отже, ви говорите, що іноді корисно не мати дозволів на запис, щоб ви не випадково змінили деякі важливі файли; але яка користь, коли інші мають повні дозволи? (так ... вас зупинять помилки, але не інші )
alex

0

Мені вдалося додати користувача до групи, надати дозволу для групи до каталогу (070), а потім ПІСЛЯ РЕСТАРТИНГУ вдалося отримати доступ до папки.

Створити групу: sudo groupadd назва групи

Додати користувача до групи: sudo gpasswd - ім'я групи ім'я користувача

Переконайтеся, що весь каталог знаходиться під правильним правом власності на групу (для виконання повинен бути поточний член назви групи): sudo chgrp -R ime імені каталогу_path /

Надайте лише груповий rwx для папки (можна просто rw, відрегулювати за потребою): sudo chmod -R 070 directory_path

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

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