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

Я использую команду ls , stat , readlink .

В качестве примера возьмем файл / etc / localtime

[flying@lempstacker ~]$ ls /etc/localtime 
/etc/localtime
[flying@lempstacker ~]$ ls -l /etc/localtime
lrwxrwxrwx. 1 root root 35 Aug  2 22:41 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai

Операция

Использование stat

[flying@lempstacker ~]$ stat /etc/localtime
  File: ‘/etc/localtime’ -> ‘../usr/share/zoneinfo/Asia/Shanghai’
  Size: 35          Blocks: 0          IO Block: 4096   symbolic link
Device: fd01h/64769d    Inode: 272202388   Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-11-23 09:00:59.999887800 +0800
Modify: 2016-08-02 22:41:26.090389904 +0800
Change: 2016-08-02 22:41:26.090389904 +0800
 Birth: -
[flying@lempstacker ~]$ stat -c "%N" /etc/localtime
‘/etc/localtime’ -> ‘../usr/share/zoneinfo/Asia/Shanghai’

Использование readlink

[flying@lempstacker ~]$ readlink /etc/localtime
../usr/share/zoneinfo/Asia/Shanghai
[flying@lempstacker ~]$ readlink -f /etc/localtime
/usr/share/zoneinfo/Asia/Shanghai

Похоже, эта команда ​​readlink -f лучше.

Объяснение

-f, --canonicalize: канонизировать, рекурсивно переходя по каждой символической ссылке в каждом компоненте данного имени; все компоненты, кроме последнего, должны существовать —— Из man readlink

14
13.04.2017, 01:24
3 ответа

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

21
27.01.2020, 19:50

Команда chmod напрямую вызывает систему одноименный призыв; man-страница для системного вызова chmod(2) (в Linux 4.10) говорит:

Эффективный UID вызывающего процесса должен совпадать с владельцем файла, или процесс должен быть привилегированным (Linux : он должен иметь возможность CAP_FOWNER).

Если вызывающий процесс не является привилегированным (Linux: не имеет возможности CAP_FSETID), и группа файла не соответствует действующему идентификатору группы процесса или одному из его дополнительных идентификаторов группы. , Бит S_ISGID будет отключен, но это не приведет к возврату ошибки.

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


Также представляет интерес chown; man-страница для chown(2) говорит:

Только привилегированный процесс (Linux: процесс с возможностью CAP_CHOWN) может изменить владельца файла. Владелец файла может изменить группу файла на любую группу, членом которой является этот владелец.привилегированный процесс (Linux: с CAP_CHOWN) может произвольно изменить группу.

2
27.01.2020, 19:50

Для нормальной работы только 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
8
27.01.2020, 19:50

Теги

Похожие вопросы