Gnome

註銷/登錄不足以更新組成員身份

  • March 23, 2019

我剛剛將自己添加到工作站上的“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” 問題。

不過,我仍然想知道為什麼註銷後自己並沒有真正清除。

引用自:https://unix.stackexchange.com/questions/508151