我刚刚将自己添加到工作站上的“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
事实证明,注销不会关闭代表用户运行的所有进程。以 root 身份登录 Linux 控制台 (Ctrel-Alt-F1) 并发出
killall -HUP -u mcon
解决了该问题。注意:上述命令不会终止所有具有有效 uid "mcon" 的进程(特别是 systemd、dbus-daemon 和其他几个抵抗),但它似乎足以解决 "group reloading" 问题。
不过,我仍然想知道为什么注销后自己并没有真正清除。