22

I am running Ubuntu 10.04 server and am having some very counter-intuitive experiences with users/groups. For example:

sudo touch test_file                    # create empty file

sudo groupadd test                      # create 'test' group

sudo chown root:test test_file          # change group of file to 'test'

sudo chmod g+rwx test_file              # give write permissions to group

sudo usermod -a -G test {my-user}       # add my user to 'test' group

touch test_file                         # touch the file as my current user

The last line produces a permissions error.

I have ensured that my user is part of the 'test' group (groups {my-user} confirms this). The group of test_file is also definitely set to 'test' and the group permissions are set.

Why can't my user write to the file test file?

4 Answers 4

33

When adding a user to a new group, that won't be applied in any currently-running processes, only new ones. You need to log out and then log back in.

3
  • 5
    or hack su - username into your running console. you dont have to logout to login this way :) Jul 27, 2010 at 23:21
  • In the example touch test_file is a new process. It's not about currently-running vs new processes. Nov 14, 2020 at 11:17
  • Oh thank you! For almost a decade, I use Linux as my primary OS and for that whole time, I failed to notice that group changes don't affect running processes. Well, better late then never, thanks again, you saved me from some serious frustration! ^_^
    – edison23
    Jan 27 at 18:20
6

Both logging out and rebooting server methods didn't work for me.

This method however is working for me: (reference to this answer)

chmod g+rwxs <parent folder>
3
  • 1
    What does the +s part do? Thanks. Jan 6, 2017 at 11:36
  • 1
    It sets the setuid bit. This allows a file to be run as the owner of the file. Suppose you have a file you want to run as root, no matter who the person is running the file, you would set the setuid bit for that file.
    – Julius
    Mar 15, 2017 at 21:24
  • The key was x: looks like execution rights are needed for touch to work.
    – asac
    May 19, 2018 at 20:35
0

You can use the newgrp command to change the user's current group ID. From man newgrp:

The newgrp command is used to change the current group ID during a login session. If the optional - flag is given, the user's environment will be reinitialized as though the user had logged in, otherwise the current environment, including current working directory, remains unchanged.

2
  • 1
    This also has the effect of replacing your current group. It's not always a good idea.
    – Daenyth
    Jul 27, 2010 at 23:09
  • I would downvote this if i could. Overwriting groups could be very frustrating in the future... esp. with -R option!
    – Edward
    Jun 2, 2018 at 15:12
0

Reboot the computer to make sure no stuck processes are preventing your user and groups from being enforced correctly during logout and login.

These steps should be giving your user of group test the write permission on test_file

sudo touch test_file 
sudo groupadd test
sudo chown root:test test_file
sudo chmod g+rwx test_file
sudo usermod -a -G test {my-user}

Reboot the computer or do an Operating System logout of your user. A terminal restart is not enough.

touch test_file

The user can write to the file because it is a part of the 'test' group and the group has permission rwx.

1
  • 3
    There is no requirement that you must reboot the computer. Nov 27, 2013 at 16:50

You must log in to answer this question.

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