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.