Qual é a diferença entre um sistema com o consolekit e o outro sem ele?

7

Primeiro de tudo, estou usando o sistema de testes do Debian com o Openbox independente. Eu não tenho systemd, apenas sysvinit, e certamente não usarei o systemd.

Ontem, minha caixa Debian começou a retornar mensagens como as abaixo:

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.

Além disso, cada comando su gera o seguinte log:

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

Consegui corrigir esses problemas.

No caso do PulseAudio, acabei de comentar essas linhas do arquivo /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

No caso de todo o resto, tive que executar pam-auth-update e desmarcado 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

E uma pequena alteração foi necessária no arquivo ~/.xinitrc :

#exec ck-launch-session dbus-launch --sh-syntax --exit-with-session openbox-session
exec openbox-session

porque quando eu estava tentando verificar uma lista de sessão, recebi o seguinte erro:

$ ck-list-sessions

** (ck-list-sessions:15584): WARNING **: Failed to get list of seats: Failed to execute program org.freedesktop.ConsoleKit: Success

Não há erros agora, mas não tenho ideia de quais alterações essas etapas podem causar. Eu sei que o console está morto de uma forma ou de outra, então isso aconteceria de qualquer maneira. Enquanto isso, estou lendo esta pergunta a fim de entender o que acontecerá depois dessa mudança, mas eu não entendo muitas coisas.

It allows switching users without logging out [many user can be logged in on the same hardware at the same time with one user active].

Eu posso fazer su user e isso muda sem problemas:

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)

Eu também posso registrar muitos usuários no via ssh. Então, onde está a vantagem de usar o consolekit? Você poderia me dizer se a exclusão pode causar algum problema de segurança e como posso ver a alteração? Porque parece que nada mudou.

    
por Mikhail Morfikov 15.06.2014 / 10:55

1 resposta

6

It allows switching users without logging out [many user can be logged in on the same hardware at the same time with one user active].

Acredito que o consolekit forneceu um mecanismo para os aplicativos determinarem qual usuário está ativo , ou seja, sentado em frente ao computador. Isso difere da opção su user desta maneira:

  • Seu computador tem um lugar atribuído a um mouse, teclado, monitor, microfone, câmera e áudio.
  • Você senta no computador e faz login por meio de um console virtual (VC) / gerenciador de login gráfico (GLM).
  • Você bloqueia sua sessão e depois vai embora.
  • Alguém mais se senta e faz o login por meio de um segundo VC / GLM.
  • Agora, dois usuários estão conectados (duas sessões), mas apenas o segundo está ativo .

Cujos processos têm acesso ao hardware agora? Você certamente não quer que o segundo usuário inicie um programa de gravação que retenha o acesso ao microfone / câmera / teclado quando você voltar à sua sessão.

Embora não esteja claro se o consolekit retira o acesso ao hardware dos processos, no mínimo, ele permite que um processo seja um "bom cidadão" e libere hardware quando a sessão é alterada.

Logins remotos e su

ssh e su - user não são afetados pelo consolekit. Consolekit destina-se a gerenciar sessões para assentos. Um assento é uma coleção de dispositivos físicos (mouse, teclado, monitor, etc.) atribuídos ao referido assento. Uma sessão é criada quando um usuário efetua login no referido assento. Um lugar pode ter muitas sessões e o consolekit rastreia essas sessões e notifica processos (que escutam) via DBUS quando a sessão muda.

Restrições de desligamento para vários usuários

O Consolekit também pode ser usado em conjunto com o policykit para impedir que os usuários encerrem o sistema quando várias sessões estiverem abertas (mais de um usuário efetuou login).

Por que usar o consolkit?

Para um sistema de usuário único, o consolekit não tem nenhum uso. Se você tem uma família compartilhando um único computador, isso permite que todos façam login e alternem usuários sem efetuar logout e sem interferir no acesso ao hardware. IIRC, cada usuário tem sua própria instância xserver também.

Alternativas

Não conheço alternativas para o consolekit ou o systemd. Se você precisar dessa funcionalidade, considere a hipótese de forjar o consolekit.

    
por 16.06.2014 / 14:28