まず、スタンドアロンの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
現在エラーはありませんが、これらの手順によってどのような変更が発生する可能性があるのかわかりません。私はコンソールキットが何らかの形で死んでいることを知っているので、これは最終的にはとにかく起こります。その間、この変更後に何が起こるかを理解するために この質問 を読んでいますが、多くのものは得られません。
ログアウトせずにユーザーを切り替えることができます[1人のユーザーがアクティブな状態で、多くのユーザーが同じハードウェアに同時にログインできます]。
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経由で多くのユーザーをログインさせることもできます。では、コンソールキットを使用する利点はどこにあるのでしょうか。削除するとセキュリティ上の問題が発生する可能性があるかどうか教えてください。また、どのように変更を確認できますか?何も変わっていないように見えるからです。
ログアウトせずにユーザーを切り替えることができます[1人のユーザーがアクティブな状態で、多くのユーザーが同じハードウェアに同時にログインできます]。
Consolekitは、どのユーザーがアクティブであるか、つまりコンピューターの前に座っているかをアプリケーションが判別するためのメカニズムを提供したと思います。これは、次の点でsu user
スイッチとは異なります。
現在、誰のプロセスがハードウェアにアクセスできますか?セッションに戻ったときにマイク/カメラ/キーボードへのアクセスを保持する録音プログラムを2番目のユーザーが開始することは絶対に望ましくありません。
Consolekitがハードウェアアクセスをプロセスから切り離すかどうかは不明ですが、少なくとも、セッションが変更されたときにプロセスを「善良な市民」としてハードウェアを解放することができます。
リモートログインとsu
ssh
およびsu - user
は、コンソールキットの影響を受けません。 Consolekitは、座席のセッションを管理することを目的としています。座席は、その座席に割り当てられた物理デバイス(マウス、キーボード、ディスプレイなど)のコレクションです。セッションは、ユーザーがその席でログインしたときに作成されます。シートには多くのセッションがある場合があり、コンソールキットはそれらのセッションを追跡し、セッションが変更されるとDBUSを介して(リッスンする)プロセスに通知します。
マルチユーザーシャットダウンの制限
コンソールキットをポリシーキットと組み合わせて使用して、複数のセッションが開いている(複数のユーザーがログインしている)ときにユーザーがシステムをシャットダウンしないようにすることもできます。
なぜconsolkitを使用するのですか?
シングルユーザーシステムの場合、consolekitは使用できません。家族が1台のコンピューターを共有している場合は、誰もがログアウトしたり、ハードウェアアクセスに干渉したりすることなく、ログインしてユーザーを切り替えることができます。 IIRC、各ユーザーは独自のxserverインスタンスも持っています。
代替
Consolekitまたはsystemdに代わるものはありません。この機能が必要な場合は、コンソールキットをフォークすることを検討してください。