SSH AuthorizedKeysCommand e SELinux

4

Estou tentando usar o SSH AuthorizedKeysCommand em uma máquina do CentOS 6.5, mas estou encontrando um erro do SELinux. Quando eu troco o SELinux para o modo permissivo - usando setenforce 0 - ele funciona, mas quando eu ligo o SELinux de volta para forçar, o comando não funciona mais.

Eu recebo a seguinte leitura no meu log de auditoria (toda a linha):

type=AVC msg=audit(1404210795.382:917): avc: denied { execute } for pid=2924 comm="sshd"
name="get-keys" dev=dm-0 ino=167467 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023
tcontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tclass=file

A política do SELinux para o comando get-keys era diferente antes. Eu o defino com as mesmas configurações que o comando sshd . Eu também tentei definir todos os Booleanos SELinux relevantes para SSH como verdadeiros - todos os que eu encontrei com grep :

$ getsebool -a | grep ssh
allow_ssh_keysign --> on
fenced_can_ssh --> on
ssh_chroot_full_access --> on
ssh_chroot_manage_apache_content --> on
ssh_chroot_rw_homedirs --> on
ssh_sysadm_login --> on

/usr/bin/get-ssh-keys/ contém o comando get-keys . Aqui estão as permissões para esse diretório:

$ ls -laZ /usr/bin/get-ssh-keys/
drwxr--r--. root root unconfined_u:object_r:etc_t:s0   .
dr-xr-xr-x. root root system_u:object_r:bin_t:s0       ..
-rwx--x--x. root root system_u:system_r:sshd_t:s0-s0:c0.c1023 get-keys

[...]

$ ls -laZ /usr/
drwxr-xr-x. root root system_u:object_r:usr_t:s0       .
dr-xr-xr-x. root root system_u:object_r:root_t:s0      ..

[...]

E aqui estão as configurações relevantes de /etc/ssh/sshd_config :

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
AuthorizedKeysCommand /usr/bin/get-ssh-keys/get-keys
AuthorizedKeysCommandRunAs root

O comando get-keys está se conectando em um soquete a outro servidor, além de gravar em arquivos de log em /var/log/get-ssh-keys/error_log . Talvez seja por isso que o SELinux está impedindo o acesso, mas eu não penso assim.

Existe algo óbvio que estou perdendo?

Há alguma confusão sobre o AuthorizedKeysCommand . Na verdade, ele não lê chaves do diretório ~/.ssh/ . Em vez disso, a configuração AuthorizedKeysCommand especifica um programa que imprimirá todas as chaves para um determinado usuário para stdout como linhas individuais.

O comando que eu especifiquei, get-keys , funciona com o SELinux definido como permissivo, mas falha quando configurado para impor.

Eu sou solicitado a fornecer uma senha com a aplicação do SELinux, mas tenho permissão para efetuar login usando as chaves que o comando recupera com o SELinux permissivo.

    
por Nagra 02.07.2014 / 20:21

1 resposta

-1

Mate tenho certeza que você já descobriu, mas apenas no caso:

  1. você precisa de uma ferramenta para solucionar problemas do selinux yum install setroubleshoot
  2. veja se o alerta foi registrado e depois de revisar crie uma política sealert -a /var/log/audit/audit.log

a ferramenta lhe dirá o que fazer

[root@zabbix audit]# sealert -a /var/log/audit/audit.log
 49% done'list' object has no attribute 'split'
 100% done
found 1 alerts in /var/log/audit/audit.log
--------------------------------------------------------------------------------

SELinux is preventing /usr/bin/python2.7 from name_connect access on the       tcp_socket port 3306.

*****  Plugin catchall (100. confidence) suggests   **************************

If you believe that python2.7 should be allowed name_connect access on the      port 3306 tcp_socket by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# grep python /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp
    
por 10.09.2016 / 16:22