запутанное поведение команды rm в углу

Вопрос или проблема

Я пытаюсь понять поведение команды 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-подобных системах контролируется на основе прав доступа для трех категорий пользователей:

  1. Владелец (User) — человек, создавший файл.
  2. Группа (Group) — группа пользователей, обладающих общими правами на файлы.
  3. Другие (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-подобных системах.

Теперь вы имеете более четкое представление о том, почему права на чтение и выполнение отпечатываются непосредственно на возможность удаления файла, и как это поведение работает на практике. Если у вас возникнут дополнительные вопросы или потребуется более глубокое понимание, не стесняйтесь обращаться за разъяснениями.

Оцените материал
Добавить комментарий

Капча загружается...