USING newgrp TO EFFECT TEMPORARY SOLUTION IN NEW SHELL:
The newgrp
command can be used. It enabled the user to temporarily (in a new shell) change their primary group to a specified value.
Add the user1
group to user2
sudo usermod -a -G user1 user2
As user2
call newgrp user1
user2% newgrp user1
user2% id
uid=1001(user2) gid=1000(user1)
groups=1000(user1),...,1001(user2)
then user2
's primary group will immediately be user1
, and a file write will result as user1
being the group owner. However, the primary group specified in /etc/passwd
is not changed.
As user2
call newgrp user1
again
user2% newgrp user2
user2% id
uid=1001(user2) gid=1001(user2)
groups=1001(user2),...,1000(user1)
and user2
's primary group will immediately be set back to user2
, while user2
will still belong to group user1
. This is the effect that was initially expected from sudo usermod -a -G user1 user2
, but did not happen immediately. In this state a file write will result as user2
being the group owner.
- Note: Each invocation of
newgrp
results in a new shell. In bash
this results in incrementing the value of the environment variable SHLVL
by 1. After exiting the shell created by newgrp
the effects are reversed, with no side effects. For that reason there still might conceivably be use cases where logout/reboot or some other solution is required, so I leave my previous answer below, which worked when logout didn't work, and avoided having to reboot. However, in practice, I find that newgrp
is sufficient to cover every use case I face.
"PERMANENT" SOLUTION without REBOOT WHEN LOGOUT DIDN'T WORK
I found that the selected answer's suggestion
user2 needs to log out and back in. ... The kernel starts the init process (the first process after boot) running as root, and every process is ultimately descended from that process [and so it needs to be killed by logging out]
didn't work in Ubuntu 20.04 from the "Logout" GUI option, and that after logging out and back in this 'init' process with an older start time was remaining
root 1 0.0 0.1 168096 11744 ? Ss 12:45 0:02 /sbin/init
Killing that might solve it, but I didn't do that, instead I killed this user process which also had an older timestamp
craig 1790 0.0 0.0 169360 3784 ? S 12:46 0:00 (sd-pam)
simply because of my weak understanding that "pam" is a module for authenticating users. It worked, and thereafter id
showed self with the correct group permissions.
Failure of logout to solve problem might (or might not) be related to systemd
. I think maybe so after reading this.