Вопрос или проблема
Я пытаюсь понять поведение команды rm
в крайних случаях. В папке, принадлежащей и сгруппированной под root, у меня есть файл, принадлежащий пользователю alice
. Однако у пользователя alice
нет никаких прав на файл, а содержащая папка принадлежит и сгруппирована под root
. (здесь я использую термин группированная, означая что она принадлежит этой группе)
Существует три сценария при попытке удалить файл на основе прав других пользователей на папку.
Сценарий 1: у остальных есть права на чтение и запись. В этом случае команда rm
удаляет файл с запросом:
alice@cherry:.../folder_root$ sudo ls -alFh
total 0
drwx----wx 1 root root 4.0K Dec 10 15:14 ./
drwxr-xr-x 1 alice alice 4.0K Dec 10 14:39 ../
---------- 1 alice alice 0 Dec 10 15:14 foo
alice@cherry:.../folder_root$ rm foo
rm: удалить защищённый от записи обычный пустой файл 'foo'? да
alice@cherry:.../folder_root$ sudo ls -alFh
total 0
drwx----wx 1 root root 4.0K Dec 10 15:21 ./
drwxr-xr-x 1 alice alice 4.0K Dec 10 14:39 ../
alice@cherry:.../folder_root$
В случае, если права других пользователей — только на выполнение, то у нас следующее поведение:
alice@cherry:.../folder_root$ rm foo
rm: удалить защищённый от записи обычный пустой файл 'foo'? да
rm: не удается удалить 'foo': Отказано в доступе
alice@cherry:.../folder_root$ sudo ls -alFh
total 0
drwx-----x 1 root root 4.0K Dec 10 15:14 ./
drwxr-xr-x 1 alice alice 4.0K Dec 10 14:39 ../
---------- 1 alice alice 0 Dec 10 15:14 foo
Теперь в случае, если права других пользователей на папку — только на чтение, то здесь поведение следующее:
alice@cherry:.../folder_root$ rm foo
rm: не удается удалить 'foo': Отказано в доступе
alice@cherry:.../folder_root$ sudo ls -la
total 0
drwx----w- 1 root root 4096 Dec 10 15:14 .
drwxr-xr-x 1 alice alice 4096 Dec 10 14:39 ..
---------- 1 alice alice 0 Dec 10 15:14 foo
Я не понимаю, почему для удаления файла необходимы права на чтение и выполнение. Почему такое поведение?
Ответ или решение
Команда rm
в Unix-подобных операционных системах используется для удаления файлов и каталогов. Поведение этой команды может быть неинтуитивным, особенно в ситуациях, когда права доступа пользователей к файлам и каталогам не совпадают. В данной статье мы рассмотрим угловые случаи, о которых упомянули в вашем вопросе, и разъясним основные принципы, касающиеся прав доступа и их влияния на выполнение команды rm
.
Основы прав доступа
Прежде всего, важно осознавать, что доступ к файлам и каталогам в Unix-подобных системах контролируется на основе прав доступа для трех категорий пользователей:
- Владелец (User) — человек, создавший файл.
- Группа (Group) — группа пользователей, обладающих общими правами на файлы.
- Другие (Others) — все остальные пользователи.
Каждое из этих прав состоит из трех разрешений: чтение (r
), запись (w
) и выполнение (x
).
Условия для удаления файла
Чтобы удалить файл с помощью команды rm
, необходимо учитывать права доступа к родительскому каталогу файла. В отличие от других операций, таких как чтение или запись файла, удаление файла требует наличия определенных прав на родительский каталог.
Сценарий 1: Разрешения на чтение и запись
Когда другие пользователи имеют права на чтение и запись (rw
), как это показано в вашем первом сценарии:
drwx----wx 1 root root 4.0K Dec 10 15:14 ./
drwxr-xr-x 1 alice alice 4.0K Dec 10 14:39 ../
---------- 1 alice alice 0 Dec 10 15:14 foo
В этом случае пользователь alice
может успешно удалить файл foo
, поскольку права доступа к родительскому каталогу позволяют удаление, несмотря на отсутствие прав на сам файл. Команда rm
спрашивает подтверждение на удаление файла, но конечный результат — файл удалён.
Сценарий 2: Только выполнение
Если другие пользователи имеют права только на выполнение (--x
), как показано во вашем втором сценарии:
drwx-----x 1 root root 4.0K Dec 10 15:14 ./
В этой ситуации пользователь alice
не сможет удалить файл foo
. Право на выполнение позволяет пользователям переходить внутрь каталога, но не позволяет им перечислять файлы или удалять их. Таким образом, отсутствие прав на чтение ведет к отказу в удалении.
Сценарий 3: Только чтение
Наконец, в случае, если другие пользователи имеют только право на чтение (r--
):
drwx----w- 1 root root 4096 Dec 10 15:14 .
Пользователь alice
также не сможет удалить файл, поскольку у него нет прав на выполнение, что запрещает ему входить в каталог и выполнять операцию удаления с использованием rm
.
Заключение
Для успешного удаления файла с помощью команды rm
необходимо, чтобы пользователь имел права на выполнение (x
) в родительском каталоге, а также дополнительные права, позволяющие выполнять удаление. Таким образом, ситуации, когда файл может быть удалён или не удалён в зависимости от установленных прав, могут показаться запутанными. Однако они следуют логике управления правами доступа в Unix-подобных системах.
Теперь вы имеете более четкое представление о том, почему права на чтение и выполнение отпечатываются непосредственно на возможность удаления файла, и как это поведение работает на практике. Если у вас возникнут дополнительные вопросы или потребуется более глубокое понимание, не стесняйтесь обращаться за разъяснениями.