Я не можу видалити файл, на який я маю дозволи на запис як член групи


12
$ touch testfile
$ chmod g+w testfile
$ sudo adduser user2 user1
$ stat -c'%a %A' testfile
664 -rw-rw-r--
$ su user2
Password: 
$ groups
user2 user1
$ rm testfile 
rm: cannot remove `testfile': Permission denied

Чого не вистачає?

Відповіді:


22

Видалення файлу означає, що ви вносите зміни до каталогу, в якому він перебуває, а не самого файлу. Вашій групі потрібен rw у каталозі, щоб мати змогу видалити файл. Дозволи на файл призначені лише для внесення змін у сам файл.

Це може спочатку виявитися заплутаним, поки ви не подумаєте про те, як працює файлова система. Файл - це просто індея, а каталог посилається на індею. Видаляючи його, ви просто видаляєте посилання на індекс цього файлу в каталозі. Отже, ви змінюєте каталог, а не файл. У вас може бути жорстке посилання на цей файл в іншому каталозі, і ви все одно зможете видалити його з першого каталогу, фактично не змінюючи сам файл, він все одно буде існувати в іншому каталозі.


Я отримую 775 drwxrwxr-xдля каталогу.
thepang

1
Яка групова власність на каталог? Пам'ятайте, що другий згаданий вами 7 - це дозвіл групи директорій, а не група вашого користувача.
jsbillings

1
ls -ld /path/to/directoryабо просто ls -ld .якщо ви вже cd'd до цього каталогу.
jsbillings

1
з будь-якої причини stat не може шукати ідентифікатор групи 1002. stat шукає ідентифікатор групи в / etc / group, NIS, LDAP тощо, і виникає помилка, тому ви бачите НЕВІДОМО. Я б спробував запустити, getent group 1002щоб побачити, чи це дає вам більш багатослівну помилку.
jsbillings

1
Насправді я взагалі не вважаю цю поведінку заплутаною. Це ідентично тому, як працює фактичний каталог «реального життя», саме тому його називають «каталог», а не, наприклад, «папку», який би поводився зовсім інакше. Якщо я хочу видалити когось із свого телефонного довідника, я не заходжу до її будинку і не вбиваю її, я просто беру ручку і пробиваю її номер. IOW: Мені потрібен запис для запису до каталогу, а не доступ до неї. У Windows є папки, у Unix є каталоги, і обидва вони поводяться як їхні колеги в реальному житті. Плутанина трапляється лише в тому випадку, якщо ви їх змішаєте.
Йорг W Міттаг

0

Лише система може видалити файл, і лише якщо на нього немає посилань. Простий користувач може лише від’єднати файл, тобто видалити його з каталогу. Вам потрібно написати доступ до каталогу, щоб від’єднати файл з нього. Від’єднання файлу не змінює файл, тому доступ до нього для запису не має значення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.