假设我使用用户登录takpar:
takpar@skyspace:/$
Run Code Online (Sandbox Code Playgroud)
作为 root,我使用以下命令添加takpar为组成员webdev:
# usermod -a -G webdev takpar
Run Code Online (Sandbox Code Playgroud)
但似乎还没有应用,因为例如我无法进入webdev具有组读取权限的's 目录:
400169 drwxr-x--- 3 webdev webdev 4.0K 2011-08-15 22:34 public_html
takpar@skyspace:/home/webdev/$ cd public_html/
bash: cd: public_html/: Permission denied
Run Code Online (Sandbox Code Playgroud)
但是重新启动后,我可以按预期访问。由于这种组更改在我的日常工作中,是否有任何方法无需重新启动即可应用更改?
回答
似乎没有办法让当前会话知道新组,例如文件管理器不会处理新更改。但是重新登录就可以了。该su命令也适用于当前会话中的临时命令。
我使用 Ubuntu 12.04。我正在尝试将用户添加gefalko到www-data组中。我用
root@xxx~# usermod -a -G www-data gefalko
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,我现在应该www-data在groups由 gefalko 运行时的输出中看到:
gefalko@xxx:~$ groups
Run Code Online (Sandbox Code Playgroud)
但是,输出中没有 www-data:
gefalko adm cdrom sudo dip plugdev lpadmin sambashare
Run Code Online (Sandbox Code Playgroud)
我想编辑index.phpwww-data 拥有的,但我不能(权限被拒绝):
gefalko@xxx:/var/www/html/projectx$ ls -l
total 1320
...
-rwxrwxr-x 1 www-data www-data 1613 Bal 18 10:18 index.php
...
Run Code Online (Sandbox Code Playgroud) 我正在尝试将自己添加到fuse用户组,但即使/etc/group在调用addgroup或usermod后看起来正确,但看起来更改并未生效。
我两个都试过了...
sudo addgroup fjohnson fuse
Run Code Online (Sandbox Code Playgroud)
和
sudo usermod -a -G fuse fjohnson
Run Code Online (Sandbox Code Playgroud)
/etc/group显示更改
fuse:x:104:fjohnson
Run Code Online (Sandbox Code Playgroud)
但我看不懂
-rw-r----- 1 root fuse 215 Oct 16 10:39 /etc/fuse.conf
Run Code Online (Sandbox Code Playgroud)
作为
cat: /etc/fuse.conf: Permission denied
Run Code Online (Sandbox Code Playgroud)
和组(1)返回
fjohnson adm dialout cdrom plugdev lpadmin admin sambashare
Run Code Online (Sandbox Code Playgroud) 可能的重复:
如何为组添加写权限?
当我运行 Wireshark 时,它显示以下消息:
Couldn't run /usr/sbin/dumpcap in child process: Permission denied
Are you a member of the 'wireshark' group? Try running
'usermod -a -G wireshark _your_username_' as root.
Run Code Online (Sandbox Code Playgroud)
我运行了这个命令:usermod -a -G wireshark myusername并使用检查了我的组groups myusername,我被添加到了wireshark组。但我仍然收到该错误消息。
[nima@nma ~]$ groups nima
nima : nima wheel dialout wireshark
[nima@nma ~]$ ls -l /usr/sbin/dumpcap
-rwxr-x--- 1 root wireshark 67884 Aug 16 12:04 /usr/sbin/dumpcap
[nima@nma ~]$ /usr/sbin/dumpcap
-bash: /usr/sbin/dumpcap: Permission denied
Run Code Online (Sandbox Code Playgroud)
有什么问题?
有一种情况我不太明白。我有这个目录,其中“webadmin”组拥有rwx权限:
$ ls -la
total 8
drwxrwxr-x 2 root webadmin 4096 Aug 27 12:17 .
? ?
Run Code Online (Sandbox Code Playgroud)
我在组 webadmin :
$ groups eino
eino : eino sudo webadmin
Run Code Online (Sandbox Code Playgroud)
但是,我无法在目录中创建任何文件:
$ touch test.txt
touch: cannot touch 'test.txt': Permission denied
Run Code Online (Sandbox Code Playgroud)
怎么来的?rwx权限不应该给我这样做的权利吗?
注销并重新登录并不能解决此问题。重新启动并不能解决这个问题。
注意:请不要将此问题标记为重复,我知道这个问题:我将一个用户添加到一个组,但文件的组权限仍然无效,并且已经多次尝试这些事情。
我已使用 将我的用户帐户添加到某些组usermod -aG,但是我无法访问与该组关联的任何资源。我可以使用 解决此问题sudo su - $USER,但这仅适用于我当前的终端会话。
示例终端会话:
$ id
uid=1008(erik) gid=1009(erik) groups=1009(erik)
$ echo $USER
erik
$ sudo su - $USER
[sudo] password for erik:
$ id
uid=1008(erik) gid=1009(erik) groups=1009(erik),27(sudo),100(users),999(docker),1001(rvm)
Run Code Online (Sandbox Code Playgroud)
每次打开终端时我都必须这样做。重新启动并不能解决这个问题。
有什么方法可以让我在登录时获得分配给我的所有组?
发行版:Ubuntu 16.04 x64 用户 Catscrash 报告了与 Ubuntu 18.04 相同的问题
这似乎只发生在我在桌面上打开终端时。如果我通过 ssh 连接到机器或切换到 TTY(例如 ctrl+alt+F2),那么我会得到正确的组。
$ id
uid=1008(erik) gid=1009(erik) groups=1009(erik)
$ ssh localhost
erik@localhost's password:
Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-131-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: …Run Code Online (Sandbox Code Playgroud) 我做了一个usermod将当前用户添加到user组中的操作,但是当我运行id -Gn它时只显示主用户的组:
[user@computer ~]$ id -Gn
user
Run Code Online (Sandbox Code Playgroud)
但是当我指定用户时,它正常工作:
[user@computer ~]$ id -Gn user
user newgroup
Run Code Online (Sandbox Code Playgroud)
你知道为什么它会这样吗?我是否遗漏了有关 UNIX 中组管理的内容?
如果我将自己添加到一个组中,则它仅适用于新启动的进程。实际上它比这更受限制;它似乎只适用于新登录。我不确定确切的机制是什么,但这不是我的问题(尽管我对此也很好奇)。
我的问题是:是否可以在当前 shell 进程中更新我的组成员身份?
我怀疑答案是否定的。
一个例子(这不是直接复制和粘贴):
$ groups ; groups kst
kst oldgroup1 oldgroup2
kst : kst oldgroup1 oldgroup2
$ sudo adduser kst newgroup
[sudo] password for kst:
Adding user `kst' to group `newgroup' ...
Adding user kst to group newgroup
Done.
$ groups ; groups kst
kst oldgroup1 oldgroup2
kst : kst oldgroup1 oldgroup2 newgroup
$
Run Code Online (Sandbox Code Playgroud)
在 之后adduser,我的帐户是 的成员newgroup,但该成员身份并未反映在当前的 shell 进程中。
显而易见的解决方案是注销并重新登录,但这很不方便。
这是一个错误吗?
https://github.com/systemd/systemd/blob/v234/src/core/execute.c#L1126
/* Drop privileges - we don't need any to pam_close_session
* and this will make PR_SET_PDEATHSIG work in most cases.
* If this fails, ignore the error - but expect sd-pam threads
* to fail to exit normally */
Run Code Online (Sandbox Code Playgroud)
比较http://jdebp.eu./FGA/dont-abuse-su-for-dropping-privileges.html
新的实现调用 fork() 并且只在子进程中删除特权,保留一个特权帐户父进程,一旦子进程退出,它可以调用 PAM“用户会话”清理函数。(请参阅当代帐户,例如 Ben Collins 的这个帐户。)在父进程中打开 PAM“用户会话”并在子进程中关闭的初始实现被发现存在错误,例如 Debian Bug #195048, Debian错误 #580434 和 Debian 错误 #599731 又名 Gentoo 错误 #246813,因为非特权子进程没有访问权限来撤销所有会话设置,而在特权父进程中打开会话所做的一切。
在接下来的十年中,与 PAM 和 su 相关的点点滴滴不断涌现。例如,在 2004 年,SELinux 可插拔身份验证模块存在问题。
我有一个奇怪的问题,我的用户 (on Linux Mint 18.3 Sylvia) 是 group 的一部分docker,我通过启动终端来验证:
$ groups
me adm cdrom sudo dip plugdev lpadmin sambashare docker
Run Code Online (Sandbox Code Playgroud)
现在,当我启动 tmux 并运行相同的命令时,我的docker会员资格突然消失了:
$ tmux
$ groups
me adm cdrom sudo dip plugdev lpadmin sambashare
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当我尝试docker在 tmux 中强行将我的用户添加到组时,它说我已经在其中了!
$ sudo adduser me docker
The user `me' is already a member of `docker'.
Run Code Online (Sandbox Code Playgroud)
我很难过——为什么在 tmux 中会有所作为?作为参考,我使用fishshell,这是我的.tmux.conf:
$ cat ~/config/.tmux.conf
new-session
set -g default-terminal "screen-256color"
set -g history-limit 10000
setw -g …Run Code Online (Sandbox Code Playgroud) 我已经查看了 U&L 的问题和答案,但我仍然无法从用户那里更改我的默认组。
[red@ws-red-l ~]$ whoami
red
[red@ws-red-l ~]$ groups
yellow green
[red@ws-red-l ~]$ sudo usermod -g green red
usermod: no changes
[red@ws-red-l ~]$ sudo usermod -G green red
[red@ws-red-l ~]$ groups
yellow green
[red@ws-red-l ~]$ touch file
[red@ws-red-l ~]$ ls -l file
-rw-r--r-- 1 red yellow 0 Feb 18 13:51 file
Run Code Online (Sandbox Code Playgroud)
我更喜欢如果red不属于组,yellow所以当我做一个touch file文件的组将是green. 我在这里做错了什么?
我试图对用户、组和权限进行试验。结果如下:
vagrant@cats:/$ ls -l | grep home
drwxr-xr-x 5 root admin 4096 Sep 28 05:49 home
vagrant@cats:/$ cat /etc/group | grep "^admin"
admin:x:1002:vagrant
vagrant@cats:/$ cd home
vagrant@cats:/home$ pwd
/home
vagrant@cats:/home$ cd ..
vagrant@cats:/$ sudo chmod 770 home
vagrant@cats:/$ ls -l | grep home
drwxrwx--- 5 root admin 4096 Sep 28 05:49 home
vagrant@cats:/$ cd home
-bash: cd: home: Permission denied
vagrant@cats:/$ ?
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我进不去。用户vagrant在组中admin,组admin拥有目录home,只有所有者和/或组成员才能读取、写入或执行home. 但由于某种原因,我被锁定了。我在这里缺少什么?
我问了以下问题 添加了用户补充组,但“组(1)”今天早些时候没有显示更改。现在我想知道为什么这个答案有效。运行后
adduser user group
Run Code Online (Sandbox Code Playgroud)
为什么用户需要注销(我什至不确定这在没有窗口管理器的上下文中意味着什么),或者为什么需要调用newgrp(1) ?