Я использую команду 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
Только владелец и root
(суперпользователь) могут изменять права доступа к файлу или каталогу. Это означает, что владелец и суперпользователь могут установить разрешения на чтение ( r
), запись ( w
) и выполнение ( x
). Но изменение владельца (пользователя / группы) файлов и каталогов с помощью команд chown
/ chgrp
разрешено только для root
.
Команда 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
) может произвольно изменить группу.
Для нормальной работы только 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