우선, 저는 독립형 Openbox와 함께 Debian 테스트 시스템을 사용하고 있습니다. 나는 systemd가 없고 sysvinit만 있고 systemd를 사용하지 않을 것입니다.
어제 내 데비안 상자는 아래와 같은 메시지를 반환하기 시작했습니다.
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
지금은 오류가 없지만 이러한 단계로 인해 어떤 변화가 발생할 수 있는지 전혀 알 수 없습니다. 나는 콘솔킷이 어떤 식으로든 죽었다는 것을 알고 있으므로 결국 이런 일이 일어날 것입니다. 그 와중에 나는 책을 읽고 있다이 질문이 변경 후에 어떤 일이 일어날지 이해하기 위해 노력했지만 많은 것을 얻지 못했습니다.
로그아웃하지 않고도 사용자를 전환할 수 있습니다. [한 명의 사용자가 활성화된 상태에서 동시에 많은 사용자가 동일한 하드웨어에 로그인할 수 있습니다.]
I can do 하면 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
로그아웃하지 않고도 사용자를 전환할 수 있습니다. [한 명의 사용자가 활성화된 상태에서 동시에 많은 사용자가 동일한 하드웨어에 로그인할 수 있습니다.]
나는 콘솔킷이 애플리케이션이 어떤 사용자인지 결정하는 메커니즘을 제공했다고 믿습니다.활동적인, 즉 컴퓨터 앞에 앉아 있습니다. 이는 su user
다음과 같은 점에서 스위치와 다릅니다.
- 컴퓨터에는 마우스, 키보드, 디스플레이, 마이크, 카메라 및 오디오가 할당된 하나의 좌석이 있습니다.
- 컴퓨터 앞에 앉아 하나의 가상 콘솔(VC)/그래픽 로그인 관리자(GLM)를 통해 로그인합니다.
- 세션을 잠그고 자리를 뜹니다.
- 다른 사람이 앉아서 두 번째 VC/GLM을 통해 로그인합니다.
- 이제 두 명의 사용자가 로그인했지만(세션 두 개) 두 번째 사용자만활동적인.
현재 누구의 프로세스가 하드웨어에 액세스할 수 있나요? 세션으로 다시 전환할 때 두 번째 사용자가 마이크/카메라/키보드에 대한 액세스 권한을 유지하는 녹음 프로그램을 시작하는 것을 원하지 않을 것입니다.
콘솔킷이 프로세스에서 하드웨어 액세스를 제거하는지 여부는 확실하지 않지만 최소한 프로세스가 "좋은 시민"이 되어 세션이 변경되면 하드웨어를 릴리스할 수 있습니다.
원격 로그인 및su
ssh
su - user
콘솔킷의 영향을 받지 않습니다 . Consolekit은 좌석에 대한 세션을 관리하기 위한 것입니다. 좌석은 해당 좌석에 할당된 물리적 장치(마우스, 키보드, 디스플레이 등)의 모음입니다. 사용자가 해당 좌석에 로그인하면 세션이 생성됩니다. 좌석에는 많은 세션이 있을 수 있으며 콘솔킷은 해당 세션을 추적하고 세션이 변경되면 DBUS를 통해 (듣는) 프로세스에 알립니다.
다중 사용자 종료 제한
Consolekit은 여러 세션이 열려 있을 때(두 명 이상의 사용자가 로그인한 경우) 사용자가 시스템을 종료하는 것을 방지하기 위해 Policykit과 함께 사용할 수도 있습니다.
왜 콘솔킷을 사용하나요?
단일 사용자 시스템의 경우 consolekit은 아무 쓸모가 없습니다. 가족이 한 대의 컴퓨터를 공유하는 경우 로그아웃하거나 하드웨어 액세스를 방해하지 않고 모든 사람이 로그인하고 사용자를 전환할 수 있습니다. IIRC, 각 사용자는 자신의 xserver 인스턴스도 가지고 있습니다.
대안
나는 consolekit이나 systemd에 대한 대안이 없다는 것을 알고 있습니다. 이 기능이 필요한 경우 콘솔킷 포크를 고려할 수 있습니다.