Хто може змінити дозволи файлу / каталогу?


14

Я вважаю (не впевнений), що власник файлу / каталогу та користувач root є єдиними користувачами, яким дозволено змінювати дозволи файлу / каталогу. Я правильно чи є інші користувачі, яким також дозволено змінювати дозволи?

Відповіді:


19

Лише власник та root(суперкористувач) можуть змінювати дозвіл файлу чи каталогу. Це означає, що власник і суперкористувач можуть встановлювати дозволи read ( r), write ( w) та виконувати ( x). Але змінювати право власності (користувача / групу) на файли та каталоги з командами chown/ chgrpдозволено лише root.


19
Власник файлу може змінити групове право власності на цей файл, якщо користувач є членом нової групи.
Kusalananda

7

З метою нормальної роботи, тільки root і власник можуть chmod. Крім того, корінь може chownі chgrp, і тим більше власник можеchgrp тих пір, поки власник є членом цільової групи.

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

Так:

14:14 mybox:~ mkdir mydir
14:14 mybox:~ cd mydir/
14:14 mybox:mydir echo foo | sudo tee yourfile
foo
14:14 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  3 me    staff  102 Apr 11 14:14 .
-rw-r--r--  1 root  staff    4 Apr 11 14:14 yourfile

Ми створили каталог і записали файл як root. Оскільки root володіє файлом, ми не можемо до нього записати, а також не можемо chmod:

14:15 mybox:mydir echo bar > yourfile 
-bash: yourfile: Permission denied
14:15 mybox:mydir chmod a+x yourfile
chmod: Unable to change file mode on yourfile: Operation not permitted

Однак у нас є дозвіл на запис до каталогу, тому ми можемо замінити файл, щоб отримати право власності:

14:15 mybox:mydir mv yourfile yourfile2
14:15 mybox:mydir cp yourfile2 yourfile
14:15 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  4 me   staff  136 Apr 11 14:15 .
-rw-r--r--  1 me   staff    4 Apr 11 14:15 yourfile

А тепер, коли ми є власником, ми можемо, звичайно, робити те, що хочемо з цим файлом:

14:15 mybox:mydir echo bar > yourfile 
14:15 mybox:mydir chmod a+x yourfile
14:16 mybox:mydir cat yourfile
bar

Аналогічно, будь-який користувач, який має дозвіл на запис до будь-якого каталогу повного шляху, що веде до файлу, може замінити структуру каталогу з цього моменту, тим самим отримуючи право власності на файл із заданим іменем. Звичайно, право власності або дозволи на фактичний оригінальний файл (який ми перейменовано на "yourfile2") не змінюються.

14:17 mybox:mydir ls -l yourfile2
-rw-r--r--  1 root  staff  4 Apr 11 14:14 yourfile2

Чи знаєте ви, чи підтримує будь-який дистрибутив Linux додаткові функції безпеки, такі як Windows? Якщо я перебуваю в Windows, я можу встановити дозвіл на видалення файлу на відмову, щоб запобігти видаленню, навіть якщо каталог дозволений.
Кевін Лі

Багато (більшість?) Поточних ароматів Linux підтримують списки контролю доступу до файлового рівня, ( getfacl / setfacl), які дають більшу гнучкість, ніж дозволи «файлів класичного» стилю. Видалення файлів у * nix працює, видаляючи посилання на файл із каталогу, тому видалення файлів завжди контролюється дозволами каталогу; самі права доступу до файлів там не грають ніякої ролі.
Бас

Дуже вірно філософії Unix "все - це файл". Отже, ви говорите, що подібного не можна зробити в Linux?
Кевін Лі

3
@KevinLi Ця відповідь насправді не є повною. Ви можете встановити клейкий біт у каталозі, щоб обмежити можливість невласників видаляти або перейменовувати файли. Дивіться це питання та його відповіді: unix.stackexchange.com/questions/79395/… Немає необхідності використовувати ACL або інші схеми.
Ендрю Генле

@KevinLi * nix файлові системи сильно відрізняються від Windows. Файли існують окремо від ієрархії каталогів, і вони можуть мати декілька "жорстких посилань", що вказують на них у каталогах. Видалення файла насправді означає видалення жорсткого посилання, що робиться в каталозі. Файл відстежує, скільки жорстких посилань на нього вказують, і фактичний файл залишатиметься на диску, доки на ньому є хоча б одна тверда посилання. Таким чином, видалення контролюються дозволами каталогів, які роблять мають спеціальну опцію , щоб дозволити тільки видалення власника файлу і коренем, як каже Ендрю.
Бас

1

chmodКоманда досить безпосередньо викликає системний виклик з тим же ім'ям; Сторінка man для chmod(2)системного виклику (на Linux 4.10) говорить:

Ефективний UID процесу виклику повинен відповідати власнику файлу, або процес повинен бути привілейований (Linux: він повинен мати CAP_FOWNER можливість).

Якщо процес виклику не має пільги (Linux: не має CAP_FSETIDможливості), а група файлу не відповідає ефективному ідентифікатору групи процесу або одному з його додаткових ідентифікаторів групи, S_ISGIDбіт буде вимкнено, але це не призведе до повернення помилки.

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


Також цікавий інтерес chown; Сторінка людини для chown(2):

Лише привілейований процес (Linux: той, який має CAP_CHOWNможливість) може змінити власника файлу. Власник файлу може змінити групу файлів на будь-яку групу, членом якої є власник. Привілейований процес (Linux: с CAP_CHOWN) може змінити групу довільно.

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