首先,我使用带有独立 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 user
switch 的不同之处在于:
- 您的计算机有一个分配了鼠标、键盘、显示器、麦克风、摄像头和音频的座位。
- 您坐在计算机前,通过一个虚拟控制台 (VC)/图形登录管理器 (GLM) 登录。
- 您锁定会话,然后走开。
- 其他人坐下来通过第二个 VC/GLM 登录。
- 现在有两个用户登录(两个会话),但只有第二个用户登录积极的。
现在谁的进程可以访问硬件?您当然不希望第二个用户启动一个录音程序,当您切换回会话时,该程序仍保留对麦克风/摄像头/键盘的访问权限。
虽然我不清楚 consolekit 是否会从进程中剥离硬件访问权限,但至少它允许进程成为“好公民”并在会话更改时释放硬件。
远程登录和su
ssh
并且su - user
不受consolekit影响。 Consolekit 旨在管理席位会话。座位是分配给该座位的物理设备(鼠标、键盘、显示器等)的集合。当用户在所述席位登录时创建会话。一个席位可能有许多会话,consolekit 会跟踪这些会话,并在会话发生变化时通过 DBUS 通知(监听的)进程。
多用户关闭限制
Consolekit 还可以与policykit 配合使用,以防止用户在打开多个会话(多个用户登录)时关闭系统。
为什么使用 consolkit?
对于单用户系统,consolekit没有任何用处。如果您的家人共享一台计算机,那么它使每个人都可以登录和切换用户,而无需注销,也不会干扰硬件访问。 IIRC,每个用户也有自己的 xserver 实例。
备择方案
据我所知,除了 consolekit 或 systemd 之外,没有其他选择。如果您需要此功能,您可以考虑分叉 consolekit。