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

14

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

user226341
источник

Ответы:

19

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

Ракиб
источник
19
Владелец файла может изменить групповое владение этим файлом, если пользователь является членом новой группы.
Кусалананда
7

В целях нормальной работы только 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
бас
источник
Знаете ли вы, если какой-либо дистрибутив Linux поддерживает дополнительные функции безопасности, такие как Windows? Если я в Windows, я могу установить разрешение на удаление файла как запрещенное, чтобы предотвратить удаление, даже если каталог является разрешающим.
Кевин Ли
Многие (большинство?) Современные getfacl / setfaclверсии Linux поддерживают списки контроля доступа на уровне файлов ( ), которые обеспечивают большую гибкость, чем разрешения для файлов в «классическом» стиле. Удаление файла в * 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: with CAP_CHOWN) может произвольно изменить группу.

Тоби Спейт
источник