带有 consolekit 的系统和没有它的系统有什么区别?

Mik*_*kov 7 login openbox debian 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.
Run Code Online (Sandbox Code Playgroud)

此外,每个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
Run Code Online (Sandbox Code Playgroud)

我设法解决了这些问题。

对于 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
Run Code Online (Sandbox Code Playgroud)

在其他所有情况下,我必须运行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
Run Code Online (Sandbox Code Playgroud)

~/.xinitrc文件需要做一个小改动:

#exec ck-launch-session dbus-launch --sh-syntax --exit-with-session openbox-session
exec openbox-session
Run Code Online (Sandbox Code Playgroud)

因为当我尝试检查会话列表时,出现以下错误:

$ ck-list-sessions

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

现在没有错误,但我不知道这些步骤会导致什么变化。我知道控制台套件已经死了,所以无论如何这最终都会发生。同时,我正在阅读这个问题以了解此更改后会发生什么,但我没有得到很多东西。

它允许在不注销的情况下切换用户[多个用户可以同时登录同一硬件,一个用户处于活动状态]。

我可以做到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)
Run Code Online (Sandbox Code Playgroud)

我还可以通过 ssh 登录许多用户。那么使用consolekit的优势在哪里呢?你能告诉我删除它是否会导致任何安全问题,我如何才能看到变化?因为好像什么都没变。

Jus*_*n C 6

它允许在不注销的情况下切换用户[多个用户可以同时登录同一硬件,一个用户处于活动状态]。

我相信 consolekit 为应用程序提供了一种机制来确定哪个用户处于活动状态,即坐在电脑前。这与su user开关的不同之处在于:

  • 您的计算机有一个分配给鼠标、键盘、显示器、麦克风、摄像头和音频的座位。
  • 您坐在计算机前,通过一个虚拟控制台 (VC)/图形登录管理器 (GLM) 登录。
  • 您锁定会话,然后走开。
  • 其他人坐下来通过第二个 VC/GLM 登录。
  • 现在有两个用户登录(两个会话),但只有第二个是active

现在谁的进程可以访问硬件?当您切换回会话时,您当然不希望第二个用户启动录音程序,该程序保留对麦克风/摄像头/键盘的访问权限。

虽然我不清楚 consolekit 是否从进程中剥离了硬件访问,但至少它允许进程成为“好公民”并在会话更改时释放硬件。

远程登录和 su

ssh并且su - user不受控制台套件的影响。Consolekit 旨在管理席位的会话。座位是分配给该座位的物理设备(鼠标、键盘、显示器等)的集合。当用户在所述座位上登录时创建会话。一个席位可能有许多会话,并且控制台套件会跟踪这些会话,并在会话更改时通过 DBUS 通知进程(侦听)。

多用户关机限制

Consolekit 还可以与 policykit 一起使用,以防止用户在打开多个会话(多个用户登录)时关闭系统。

为什么要使用 consolkit?

对于单用户系统,consolekit 没有任何用处。如果您有一个家庭共享一台计算机,那么它使每个人都可以登录和切换用户,而无需注销,也不会干扰硬件访问。IIRC,每个用户也有自己的 xserver 实例。

备择方案

我知道除了 consolekit 或 systemd 没有替代品。如果您需要此功能,您可以考虑分叉 consolekit。

  • 在没有 `systemd` 的系统上,你也可以使用 `elogind` 代替 `consolekit` https://github.com/elogind/elogind(`systemd` 项目的 `logind` 被提取到一个独立的包中) (2认同)