有 consolekit 的系統和沒有 consolekit 的系統有什麼不同?

有 consolekit 的系統和沒有 consolekit 的系統有什麼不同?

首先,我使用獨立 Openbox 的 Debian 測試系統。我沒有 systemd,只有 sysvinit,而且我當然不會使用 systemd 。

昨天我的 Debian 盒子開始回到以下訊息:

Jun 14 18:08:10 morfikownia login[4722]: pam_unix(login:session): session opened for user morfik by LOGIN(uid=0)
Jun 14 18:08:10 morfikownia dbus[4391]: [system] Activating service name='org.freedesktop.ConsoleKit' (using servicehelper)
Jun 14 18:08:10 morfikownia dbus[4391]: [system] Activated service 'org.freedesktop.ConsoleKit' failed: Failed to execute program org.freedesktop.ConsoleKit: Success
...
Jun 14 18:08:19 morfikownia pulseaudio[4855]: [pulseaudio] sink.c: Default and alternate sample rates are the same.
Jun 14 18:08:19 morfikownia pulseaudio[4855]: [pulseaudio] source.c: Default and alternate sample rates are the same.
Jun 14 18:08:20 morfikownia dbus[4391]: [system] Activating service name='org.freedesktop.ConsoleKit' (using servicehelper)
Jun 14 18:08:20 morfikownia dbus[4391]: [system] Activated service 'org.freedesktop.ConsoleKit' failed: Failed to execute program org.freedesktop.ConsoleKit: Success
Jun 14 18:08:20 morfikownia pulseaudio[4855]: [pulseaudio] module-console-kit.c: GetSessionsForUnixUser() call failed: org.freedesktop.DBus.Error.Spawn.ExecFailed: Failed to execute program org.freedesktop.ConsoleKit: Success
Jun 14 18:08:20 morfikownia pulseaudio[4855]: [pulseaudio] module.c: Failed to load module "module-console-kit" (argument: ""): initialization failed.
Jun 14 18:08:20 morfikownia pulseaudio[4855]: [pulseaudio] main.c: Module load failed.
Jun 14 18:08:20 morfikownia pulseaudio[4855]: [pulseaudio] main.c: Failed to initialize daemon.

此外,每個su命令都會產生以下日誌:

Jun 14 18:08:50 morfikownia su[6043]: Successful su for root by morfik
Jun 14 18:08:50 morfikownia su[6043]: + /dev/pts/2 morfik:root
Jun 14 18:08:50 morfikownia su[6043]: pam_unix(su:session): session opened for user root by (uid=1000)
Jun 14 18:08:50 morfikownia dbus[4391]: [system] Activating service name='org.freedesktop.ConsoleKit' (using servicehelper)
Jun 14 18:08:50 morfikownia dbus[4391]: [system] Activated service 'org.freedesktop.ConsoleKit' failed: Failed to execute program org.freedesktop.ConsoleKit: Success

我設法解決了這些問題。

對於 PulseAudio,我只是從檔案中註解了這些行/etc/pulse/default.pa

### If autoexit on idle is enabled we want to make sure we only quit
### when no local session needs us anymore.
#.ifexists module-console-kit.so
#load-module module-console-kit
#.endif
#.ifexists module-systemd-login.so
#load-module module-systemd-login
#.endif

在其他情況下,我必須運行pam-auth-update並未經檢查ConsoleKit Session Management

 PAM profiles to enable
    [ ] encfs encrypted home directories                  
    [*] Unix authentication                               
    [ ] Mount volumes for user                            
    [*] GNOME Keyring Daemon - Login keyring management   
    [ ] ConsoleKit Session Management                     
    [ ] Inheritable Capabilities Management

需要對~/.xinitrc文件進行一些小的更改:

#exec ck-launch-session dbus-launch --sh-syntax --exit-with-session openbox-session
exec openbox-session

因為當我嘗試檢查會話清單時,出現以下錯誤:

$ ck-list-sessions

** (ck-list-sessions:15584): WARNING **: Failed to get list of seats: Failed to execute program org.freedesktop.ConsoleKit: Success

現在沒有錯誤,但我不知道這些步驟會導致什麼變化。我知道控制台套件已經死了,所以無論如何這最終都會發生。同時,我正在閱讀這個問題為了了解此更改後會發生什麼,但我沒有得到很多東西。

它允許在不登出的情況下切換用戶[許多用戶可以在一個用戶處於活動狀態的情況下同時登入到相同硬體]。

我可以做到su user,而且它的改變沒有問題:

Jun 15 10:36:57 morfikownia su[103349]: Successful su for morfik2 by morfik
Jun 15 10:36:57 morfikownia su[103349]: + /dev/pts/5 morfik:morfik2
Jun 15 10:36:57 morfikownia su[103349]: pam_unix(su:session): session opened for user morfik2 by (uid=1000)

我還可以透過 ssh 登入許多用戶。那麼使用consolekit的優勢在哪裡呢?您能否告訴我刪除它是否會導致任何安全問題?因為看起來一切都沒有改變。

答案1

它允許在不登出的情況下切換用戶[許多用戶可以在一個用戶處於活動狀態的情況下同時登入到相同硬體]。

我相信 consolekit 為應用程式提供了一種機制來確定哪個用戶是積極的,即坐在電腦前。這與su userswitch 的不同之處在於:

  • 您的電腦有一個分配了滑鼠、鍵盤、顯示器、麥克風、攝影機和音訊的座位。
  • 您坐在電腦前,透過一個虛擬控制台 (VC)/圖形登入管理員 (GLM) 登入。
  • 您鎖定會話,然後走開。
  • 其他人坐下來透過第二個 VC/GLM 登入。
  • 現在有兩個使用者登入(兩個會話),但只有第二個使用者登入積極的

現在誰的進程可以存取硬體?您當然不希望第二個使用者啟動一個錄音程序,當您切換回會話時,該程式仍保留對麥克風/攝影機/鍵盤的存取權。

雖然我不清楚 consolekit 是否會從進程中剝離硬體存取權限,但至少它允許進程成為「好公民」並在會話更改時釋放硬體。

遠端登入和su

ssh並且su - user不受consolekit影響。 Consolekit 旨在管理席位會話。座位是分配給該座位的實體設備(滑鼠、鍵盤、顯示器等)的集合。當使用者在所述席位登入時建立會話。一個席位可能有許多會話,consolekit 會追蹤這些會話,並在會話發生變化時透過 DBUS 通知(監聽的)進程。

多用戶關閉限制

Consolekit 也可以與policykit 搭配使用,以防止使用者在開啟多個工作階段(多個使用者登入)時關閉系統。

為什麼要使用 consolkit?

對於單一使用者係統,consolekit沒有任何用處。如果您的家人共享一台計算機,那麼它使每個人都可以登入和切換用戶,而無需註銷,也不會幹擾硬體存取。 IIRC,每個使用者也有自己的 xserver 實例。

備擇方案

據我所知,除了 consolekit 或 systemd 之外,沒有其他選擇。如果您需要此功能,您可以考慮分叉 consolekit。

相關內容