Linux - не может удалить собственный файл с разрешениями 777

У меня есть пара файлов, которые я не могу удалить, используя rf -Rf команда. Я являюсь владельцем этого файла, и группа, назначенная этим файлам, также является группой, в которую входит мой пользователь. Что еще более странно, так это то, что я могу редактировать их содержимое и изменять разрешения для них, но я не могу переместить или удали их.

ls -al
total 12
dr-xr-xr-x 3 rayell pg1083760 4096 2010-10-10 10:00 .
drwxr-xr-x 3 rayell pg1083760 4096 2011-09-02 04:33 ..
-rwxrwxrwx 1 rayell pg1083760    0 2011-09-02 06:38 default.settings.php
drwxrwxrwx 2 rayell pg1083760 4096 2011-09-02 04:33 files
-rwxrwxrwx 1 rayell pg1083760    0 2011-09-02 06:38 settings.php


rm -Rf *
rm: cannot remove `default.settings.php': Permission denied
rm: cannot remove directory `files': Permission denied
rm: cannot remove `settings.php': Permission denied

Кто-нибудь может сказать мне, что происходит?

5 ответов

Решение

Чтобы удалить один файл, вам нужно разрешение на запись в каталог, содержащий этот файл.

Здесь разрешения dr-xr-xr-x 3 rayell pg1083760 4096 2010-10-10 10:00 . Так что никто (кроме root) может удалять файлы внутри этого каталога. Владелец должен использовать chmod первый.

-
1. Есть довольно веские причины для этого. "Удаляя" файл с rm , вы на самом деле пытаетесь отсоединить его от каталога (жесткие ссылки не будут удалены).

Другой возможный вопрос - это атрибут

lsattr file

Эта команда покажет вам атрибут файла, и файл с атрибутом "i" не может быть изменен (и может быть удален)

поэтому проверьте атрибут вашего файла и удалите атрибут "i", если атрибут установлен

chattr -i file

Причина в том, что родительский каталог имеет chmod 705 или что-то типа того. Вы можете chmod родительский каталог с помощью следующей команды:

chmod -R 777 directory_name

После этого вы можете удалить этот каталог и содержащиеся в нем файлы.

У меня была такая же проблема, и chmod один не справился. Сначала мне пришлось сменить владельца (пользователя и группу) файлов, которые я хотел удалить.

sudo chown -hR root:admin dir_to_delete

Объяснение:

  • sudo: убедитесь, что у вас есть соответствующие права
  • chown: Команда Linux для смены владельца файла
  • -hR: изменить владельца каталога и всех его подкаталогов. Я нашел это здесь.
  • root: имя нового пользователя
  • admin: название новой группы

Я уже изменил модификаторы на 777; Я не знаю, было ли это необходимо или нет.

Просто ради знаний: я решил это, используя sudo, редактируя файл sudoers:

      Cmnd_Alias MOVE = /bin/mv, /bin/rm
user ALL=(postgres) NOPASSWD:MOVE

В процедуре пользователь выполняет:sudo -u postgres rm /tmp/test.file

Другие вопросы по тегам