Я считаю (не уверен), что владелец файла/каталога и пользователь 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
изменить группу произвольно.