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的优势在哪里呢?你能告诉我删除它是否会导致任何安全问题,我如何才能看到变化?因为好像什么都没变。
它允许在不注销的情况下切换用户[多个用户可以同时登录同一硬件,一个用户处于活动状态]。
我相信 consolekit 为应用程序提供了一种机制来确定哪个用户处于活动状态,即坐在电脑前。这与su user开关的不同之处在于:
现在谁的进程可以访问硬件?当您切换回会话时,您当然不希望第二个用户启动录音程序,该程序保留对麦克风/摄像头/键盘的访问权限。
虽然我不清楚 consolekit 是否从进程中剥离了硬件访问,但至少它允许进程成为“好公民”并在会话更改时释放硬件。
远程登录和 su
ssh并且su - user不受控制台套件的影响。Consolekit 旨在管理席位的会话。座位是分配给该座位的物理设备(鼠标、键盘、显示器等)的集合。当用户在所述座位上登录时创建会话。一个席位可能有许多会话,并且控制台套件会跟踪这些会话,并在会话更改时通过 DBUS 通知进程(侦听)。
多用户关机限制
Consolekit 还可以与 policykit 一起使用,以防止用户在打开多个会话(多个用户登录)时关闭系统。
为什么要使用 consolkit?
对于单用户系统,consolekit 没有任何用处。如果您有一个家庭共享一台计算机,那么它使每个人都可以登录和切换用户,而无需注销,也不会干扰硬件访问。IIRC,每个用户也有自己的 xserver 实例。
备择方案
我知道除了 consolekit 或 systemd 没有替代品。如果您需要此功能,您可以考虑分叉 consolekit。