Gnome
註銷/登錄不足以更新組成員身份
我剛剛將自己添加到工作站上的“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 Service=user@1000.service 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” 問題。
不過,我仍然想知道為什麼註銷後自己並沒有真正清除。