콘솔킷이 있는 시스템과 없는 시스템의 차이점은 무엇입니까?

콘솔킷이 있는 시스템과 없는 시스템의 차이점은 무엇입니까?

우선, 저는 독립형 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

sshsu - user콘솔킷의 영향을 받지 않습니다 . Consolekit은 좌석에 대한 세션을 관리하기 위한 것입니다. 좌석은 해당 좌석에 할당된 물리적 장치(마우스, 키보드, 디스플레이 등)의 모음입니다. 사용자가 해당 좌석에 로그인하면 세션이 생성됩니다. 좌석에는 많은 세션이 있을 수 있으며 콘솔킷은 해당 세션을 추적하고 세션이 변경되면 DBUS를 통해 (듣는) 프로세스에 알립니다.

다중 사용자 종료 제한

Consolekit은 여러 세션이 열려 있을 때(두 명 이상의 사용자가 로그인한 경우) 사용자가 시스템을 종료하는 것을 방지하기 위해 Policykit과 함께 사용할 수도 있습니다.

왜 콘솔킷을 사용하나요?

단일 사용자 시스템의 경우 consolekit은 아무 쓸모가 없습니다. 가족이 한 대의 컴퓨터를 공유하는 경우 로그아웃하거나 하드웨어 액세스를 방해하지 않고 모든 사람이 로그인하고 사용자를 전환할 수 있습니다. IIRC, 각 사용자는 자신의 xserver 인스턴스도 가지고 있습니다.

대안

나는 consolekit이나 systemd에 대한 대안이 없다는 것을 알고 있습니다. 이 기능이 필요한 경우 콘솔킷 포크를 고려할 수 있습니다.

관련 정보