
Ниже показан файл, /tmp/testfile
принадлежащийпользователь1с группой изменено наколесочто также включает в себяпользователь2. Файл имеет rw
разрешение для группы. Так разве не должен любой член группы иметь возможность удалить его? Пример вывода ниже показывает, чтопользователь2не может удалить файл. Почему?
[user2@files ~]$ ls -l /tmp/testfile
-rw-rw-r-- 1 user1 wheel 0 Jul 18 18:54 /tmp/testfile
[user2@files ~]$ groups
user2 wheel
[user2@files ~]$ rm /tmp/testfile
rm: cannot remove `/tmp/testfile': Operation not permitted
решение1
Во-первых, вы смотрите на неправильные разрешения. Когда вы перемещаете/переименовываете/удаляете файл, вы только изменяетеродительский каталог– собственные разрешения файла не проверяются. Вы только удаляете запись из списка файлов каталога. Поэтому следует проверить разрешения родительского каталога (в данном случае /tmp
).
$ ls -ld /tmp
drwxrwxrwt 15 root root 460 Jul 19 15:18 /tmp/
Во-вторых, /tmp
это нечто особенное. Практически на всех системах он доступен для записи любому ( ugo=rwx
), поэтому на первый взгляд кажется, что любой может переименовать или удалить любой файл в нем. Это, конечно, упростило бы (ну, даже упростило бы) создание проблем для других пользователей, поэтому /tmp
всегда имеет режим «sticky», он же «ограниченное удаление» ( o+t
). При установленном этом режиме только владелец файла может перемещать или удалять файлы в этом каталоге, независимо от каких-либо разрешений.
(На странице руководства GNU coreutils chmod(1)
есть раздел о«флаг ограниченного удаления или липкий бит».)