35

I have a file with the following permissions:

root:data, and chmod set to 775.

My normal user, let's call him boby, is in the data group.

Why can't I delete the file with the user boby?

 rwxrwxr-x 18 root data 4096 2011-12-30 22:02 storage
 my user is in the group data but can't write into storage

6 Answers 6

38

Because by deleting a file, you are not just modifying the file but also modifying its directory.

So if your file is:

rwxrwxr-x

You would be able to do:

cp /dev/null <filename>

But if your directory permissions are:

rwxr-xr-x  root  data  <directory name>

Then system will prevent you removing the file.

8
  • I have drwxrwxr-x on the directory, I think it has something to do with the d in front
    – johnlemon
    Dec 30, 2011 at 19:55
  • 3
    @user56301 d just indicates that this file is a directory. What's the ownership of the directory?
    – Karlson
    Dec 30, 2011 at 19:58
  • drwxrwxr-x 18 root data
    – johnlemon
    Dec 30, 2011 at 19:59
  • Try running as user boby the following: cd <directory> ; touch test_file ; rm test_file
    – Karlson
    Dec 30, 2011 at 20:02
  • @user56301 can you create a file in that directory? if you can not, then you definitely can't delete a file there. Dec 30, 2011 at 20:03
16

File deletion is based on directory perms, not file perms (*).

Do you have write permissions on the directory that contains the file?

(*) Caveat, you can have a directory where you enforce that only the owner of the file can delete it. This is useful for temp dirs.

3
  • Also have a look here: superuser.com/questions/784952/… where the same is discussed.
    – Meetai.com
    May 27, 2015 at 2:49
  • About "Do you have write permissions on the directory that contains the file?" - Does it only apply to the immediate parent directory, right? Oct 5, 2021 at 2:00
  • 1
    @ManuelJordan write permissions, yes. Think of a directory as a scratchpad that lists “these are all the files just under me”. To delete a file you kinda rewrite that scratchpad. But don’t need to rewrite anything above you. Other perms are important, i have some kid errands to finish but there’s some combination of missing R and X flags on parent dire that would make this difficult Oct 5, 2021 at 2:25
1

If the containing directory does not permit the user boby or the data group to write to it, then that would explain this behavior.

8
  • 2
    So the entire path needs group permission? It works like that.
    – johnlemon
    Dec 30, 2011 at 20:06
  • 1
    @user: Not the entire path - just the file's immediate parent directory. You are only modifying the directory's contents. The higher parents do not matter at all. Dec 30, 2011 at 20:08
  • I update the answers
    – johnlemon
    Dec 30, 2011 at 20:09
  • 1
    This is not exactly true. You only need write perms on the containing directory. The perms can be any of user, group, or other, it doesn't have to be group perms that allow you. Dec 30, 2011 at 20:12
  • @Rich: AFAIK, only one set is checked. If you are the owner, the system will only check 'owner' perms, not 'group' nor 'others'. If you are in the group, the system won't check 'others' perms. (touch foo; chmod 6 foo; ls -l foo; cat foo) Dec 30, 2011 at 20:24
1

I tried the same thing, and ran into the same problem.

Starting a new terminal session the problem. This can be achieved by:

  1. Logging out and logging back in
  2. Going to one of the 6 ttys (Ctrl+Alt+F1-6) (Note: Ctrl+Alt+F7 is your GUI session)
  3. using su boby to start a new session for user boby.

Cheers!

2
  • He mentions he is already logged in as boby Sep 5, 2013 at 14:38
  • He needs to login again as boby - the old session seems to be stale and not reflect the group association changes. Sep 5, 2013 at 15:39
1

I bet the file you're trying to delete is in /tmp.

See Linux - group member cannot delete file with rw permission

/tmp usually has the "sticky" aka "restricted deletion" mode set (o+t). With this mode set, only the file's owner can move or delete files in that directory regardless of any permissions.

-1

the file you want to have delete permissions too, after a chmod 775 or 777, place it under a directory which has been chmod 775 or 777 too.

e.g sudo touch /root/comments.db sudo chmod 777 /root/comments.db and then as a non sudoer : rm /root/comments.db # doesnt work

However, mkdir -p /root/comments/comments.db sudo touch /root/comments/comments.db sudo chmod 777 /root/comments/comments.db sudo chmod 7775 /root/comments and then as a non sudoer : rm /root/comments/comments.db # works

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .