Я вважаю (не впевнений), що власник файлу / каталогу та користувач root є єдиними користувачами, яким дозволено змінювати дозволи файлу / каталогу. Я правильно чи є інші користувачі, яким також дозволено змінювати дозволи?
Я вважаю (не впевнений), що власник файлу / каталогу та користувач root є єдиними користувачами, яким дозволено змінювати дозволи файлу / каталогу. Я правильно чи є інші користувачі, яким також дозволено змінювати дозволи?
Відповіді:
Лише власник та root(суперкористувач) можуть змінювати дозвіл файлу чи каталогу. Це означає, що власник і суперкористувач можуть встановлювати дозволи read ( r), write ( w) та виконувати ( x). Але змінювати право власності (користувача / групу) на файли та каталоги з командами chown/ chgrpдозволено лише root.
З метою нормальної роботи, тільки 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
getfacl / setfacl), які дають більшу гнучкість, ніж дозволи «файлів класичного» стилю. Видалення файлів у * nix працює, видаляючи посилання на файл із каталогу, тому видалення файлів завжди контролюється дозволами каталогу; самі права доступу до файлів там не грають ніякої ролі.
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) може змінити групу довільно.