Кто может изменить права доступа к файлу/каталогу?

Кто может изменить права доступа к файлу/каталогу?

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

решение1

Только владелец и root(суперпользователь) могут изменять разрешение файла или каталога. Это означает, что владелец и суперпользователь могут устанавливать разрешения на чтение ( r), запись ( w) и выполнение ( x). Но изменение владельца пользователя для файлов и каталогов с помощью команды chownразрешено только root. Изменение владельца группы с помощью chgrpразрешено rootи владельцу файла, если пользователь является членом новой группы.

решение2

Для нормальной работы только root и владелец могут chmod. Кроме того, root может 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

решение3

Команда chmodпрактически напрямую вызывает системный вызов с тем же именем; страница руководства для системного 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изменить группу произвольно.

Связанный контент