먼저 독립 실행형 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를 통해 많은 사용자에게 로그인할 수도 있습니다. 그렇다면 콘솔킷을 사용하면 어떤 이점이 있을까요? 제거하면 보안 문제가 발생하는지 알려주실 수 있나요? 변경 사항을 어떻게 확인할 수 있나요? 왜냐하면 아무것도 변하지 않은 것처럼 보이기 때문입니다.
답변1
로그아웃하지 않고도 사용자를 전환할 수 있습니다. [한 명의 사용자가 활성화된 동안 동시에 많은 사용자가 동일한 하드웨어에 로그인할 수 있습니다.]
나는 콘솔킷이 애플리케이션이 어떤 사용자인지 결정하는 메커니즘을 제공한다고 믿습니다.긍정적인즉, 컴퓨터 앞에 앉아 있습니다. 이것과 su user
스위치의 차이점은 다음과 같습니다.
- 컴퓨터에는 마우스, 키보드, 모니터, 마이크, 카메라 및 오디오용으로 할당된 자리가 있습니다.
- 컴퓨터 앞에 앉아 가상 콘솔(VC)/그래픽 로그인 관리자(GLM)를 통해 로그인합니다.
- 세션을 잠그고 자리를 떠납니다.
- 다른 사람들은 앉아서 두 번째 VC/GLM을 통해 로그인합니다.
- 이제 두 명의 사용자가 로그인했지만(세션 2개) 두 번째 사용자만 로그인되었습니다.긍정적인.
이제 누구의 프로세스가 하드웨어에 액세스할 수 있습니까? 세션으로 다시 전환할 때 마이크/카메라/키보드에 대한 액세스 권한을 계속 유지하는 녹음 프로그램을 두 번째 사용자가 시작하는 것을 원하지 않을 것입니다.
consolekit이 프로세스에서 하드웨어 액세스를 제거하는지 여부는 모르겠지만 적어도 프로세스가 "좋은 시민"이 되고 세션 변경 시 하드웨어를 릴리스할 수 있습니다.
원격 로그인 및su
ssh
그리고 su - user
콘솔킷의 영향을 받지 않습니다. Consolekit은 좌석 세션을 관리하도록 설계되었습니다. 좌석은 해당 좌석에 할당된 물리적 장치(마우스, 키보드, 모니터 등)의 집합입니다. 사용자가 해당 좌석에 로그인하면 세션이 생성됩니다. 좌석에는 많은 세션이 있을 수 있으며, 콘솔킷은 이러한 세션을 추적하고 세션이 변경되면 DBUS를 통해 프로세스에 알립니다.
여러 사용자에 대한 제한 끄기
Consolekit은 여러 세션이 열려 있을 때(여러 사용자가 로그인한 경우) 사용자가 시스템을 종료하는 것을 방지하기 위해 Policykit과 함께 사용할 수도 있습니다.
왜 콘솔킷을 사용하나요?
단일 사용자 시스템의 경우 consolekit은 쓸모가 없습니다. 가족이 컴퓨터를 공유하는 경우 모든 사람이 로그아웃하거나 하드웨어 액세스를 방해하지 않고 로그인하고 사용자를 전환할 수 있습니다. IIRC, 각 사용자는 자신의 xserver 인스턴스도 가지고 있습니다.
대안
내가 아는 한, consolekit이나 systemd 외에는 대안이 없습니다. 이 기능이 필요한 경우 콘솔킷 포크를 고려할 수 있습니다.