注销/登录不足以更新组成员身份

注销/登录不足以更新组成员身份

我刚刚将自己添加到我的工作站上的“docker”组。我尽职尽责地在桌面环境中注销并再次登录,但我仍然不在该组中:

mcon@cinderella:~$ id
uid=1000(mcon) gid=1000(mcon) groups=1000(mcon),20(dialout),27(sudo),46(plugdev),115(lpadmin),124(vboxusers)
mcon@cinderella:~$ grep mcon /etc/group
dialout:x:20:mcon,mauro
sudo:x:27:mcon
plugdev:x:46:mcon
mcon:x:1000:
lpadmin:x:115:mcon
vboxusers:x:124:mauro,mcon
docker:x:136:mcon

我使用的是最新的 Debian Sid。我的桌面是 Gnome/Cinnamon

知道这可以通过重新启动来解决,但我想了解发生了什么。

请注意,使用“su 技巧”实际上有效:

mcon@cinderella:~$ su - mcon
Password: 
mcon@cinderella:~$ id
uid=1000(mcon) gid=1000(mcon) groups=1000(mcon),20(dialout),27(sudo),46(plugdev),115(lpadmin),124(vboxusers),136(docker)

为什么注销然后再次登录却不行?

更新: 进一步调查表明注销后仍然有大量进程以我的用户 ID 运行,包括 systemd、sh、各种 gvfs-whatever、gpg-agent 等。杀死 shell 并没有改变任何东西,但我有点害怕杀死它们。注销不应代表我结束所有活动吗?这看起来像是一个安全漏洞(或者不是?)。我将尝试终止所有这些进程,看看是否有某些东西“保持会话处于活动状态”(最坏的情况下我将不得不重新启动)。

Update2(按照@StephenKitt的要求):

mcon@cinderella:~$ loginctl show-user $(whoami)
UID=1000
GID=1000
Name=mcon
Timestamp=Sat 2019-03-23 15:01:35 CET
TimestampMonotonic=24931331
RuntimePath=/run/user/1000
[email protected]
Slice=user-1000.slice
Display=2
State=active
Sessions=2
IdleHint=no
IdleSinceHint=1553356954121832
IdleSinceHintMonotonic=7284187020
Linger=no

Update3(受@StephenKitt启发):

显然 session2 存在,但似乎是唯一存在的...但不带参数的命令给出了不同的视图,并表示只有一个活动会话。我很困惑;上面的“Sessions=2”从何而来?

mcon@cinderella:/tmp/ca$ loginctl show-session
EnableWallMessages=no
NAutoVTs=6
KillUserProcesses=no
RebootToFirmwareSetup=no
IdleHint=no
IdleSinceHint=1553356954121832
IdleSinceHintMonotonic=7284187020
BlockInhibited=handle-power-key:handle-suspend-key:handle-hibernate-key:handle-lid-switch
DelayInhibited=shutdown:sleep
InhibitDelayMaxUSec=30s
UserStopDelayUSec=10s
HandlePowerKey=poweroff
HandleSuspendKey=suspend
HandleHibernateKey=hibernate
HandleLidSwitch=suspend
HandleLidSwitchDocked=ignore
HoldoffTimeoutUSec=30s
IdleAction=ignore
IdleActionUSec=30min
PreparingForShutdown=no
PreparingForSleep=no
Docked=yes
LidClosed=no
OnExternalPower=yes
RemoveIPC=yes
RuntimeDirectorySize=3314405376
InhibitorsMax=8192
NCurrentInhibitors=7
SessionsMax=8192
NCurrentSessions=1
mcon@cinderella:/tmp/ca$ loginctl show-session 2
Id=2
User=1000
Name=mcon
Timestamp=Sat 2019-03-23 15:01:35 CET
TimestampMonotonic=24933340
VTNr=7
Seat=seat0
Display=:0
Remote=no
Service=lightdm
Desktop=lightdm-xsession
Scope=session-2.scope
Leader=2009
Audit=2
Type=x11
Class=user
Active=yes
State=active
IdleHint=no
IdleSinceHint=1553356954121832
IdleSinceHintMonotonic=7284187020
LockedHint=no

答案1

事实证明注销会不是关闭代表用户运行的所有进程。以 root 身份登录 Linux 控制台 (Ctrel-Alt-F1) 并发出命令killall -HUP -u mcon可以解决该问题。

注意:上面的命令将会不是终止所有具有有效 uid“mcon”的进程(特别是 systemd、dbus-daemon 和其他几个进程),但这似乎足以解决“组重新加载”问题。

不过,我仍然想知道为什么注销后并没有真正清除。

相关内容