Qual contexto do SELinux o script deve ser executado pelo pam_exec?

5

Acabei de instalar o Fedora 22 no meu VPS e tentei fazer uma coisa trivial - execute meu script de informante em cada login do ssh via pam_exec. Mas eu fui confrontado com dificuldades inesperadas: pam_exec falhou com o código de saída 13.

Adicionei a linha habitual ao final de /etc/pam.d/sshd:

session optional pam_exec.so seteuid /usr/local/bin/loginformer.py

Claro que loginformer.py tem sinalizadores de execução:

$ ls -l /usr/local/bin/loginformer.py
-rwxr-xr-x. 1 root root 4254 Jun  8 09:35 /usr/local/bin/loginformer.py

Mas aqui está o extrato doloroso de journalctl -lb SYSLOG_FACILITY=10 :

Jun 08 11:58:49 fedora22 sshd[671]: pam_exec(sshd:session): execve(/usr/local/bin/loginformer.py,...) failed: Permission denied
Jun 08 11:58:49 fedora22 sshd[663]: pam_exec(sshd:session): /usr/local/bin/loginformer.py failed: exit code 13

Não tenho certeza do que está acontecendo, porque sempre funciona no meu ArchLinux. Eu acho que pode ser alguma rescisão do SELinux, mas não tenho certeza.

O que estou fazendo de errado?

UPDATE

Bem, tentei aprofundar o SELinux e entendi que deveria alterar o contexto do SELinux do meu script.

Agora o contexto do SELinux parece assim:

$ ls -Z /usr/local/bin/loginformer.py
unconfined_u:object_r:user_home_t:s0 /usr/local/bin/loginformer.py

Mas que contexto devo definir para o script?

UPDATE 2

Além disso, acho que os logs do SELinux AVC podem ser muito úteis para a detecção de problemas. Me desculpe, eu não dei antes. cat /var/log/audit/audit.log | grep loginformer.py retorna muitas das mesmas sequências:

type=AVC msg=audit(1433784991.570:265): avc:  denied  { execute } for  pid=7866 comm="sshd" name="loginfomer.py" dev="vda1" ino=11924 scontext=system_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
    
por shau-kote 08.06.2015 / 14:10

1 resposta

1

A ordem em que pam_exec e pam_selinux são invocados é importante. Página de homens para pam_selinux notas:

Adding pam_selinux into the PAM stack might disrupt behavior of other PAM modules which execute applications. To avoid that, pam_selinux.so open should be placed after such modules in the PAM stack, and pam_selinux.so close should be placed before them. When such a placement is not feasible, pam_selinux.so restore could be used to temporary restore original security contexts.

Da mesma forma, Dan Walsh escreve sobre o assunto:

If you are going to add a pam_module that would exec commands that the user would not be allowed to execute, for example pam_mount, it should be added before the pam_selinux.so open command. If you are adding a pam_module that execs command a user could execute, then you probably want these after the pam_selinux.so open line.

Observe também que o seu script tem atualmente um contexto de segurança de user_home_t , que provavelmente não é compatível com a política padrão (os contextos de arquivos são preservados quando o arquivo é movido; se você criou o arquivo no diretório inicial, ele será preservado o contexto original). Você provavelmente deve usar o contexto bin_t padrão. Para restaurar o contexto padrão:

restorecon  /usr/local/bin/loginformer.py

Se o seu script não fizer nada muito especial, colocar pam_exec antes de pam_selinux e restring o contexto deve ser suficiente para corrigir o seu problema.

    
por 08.10.2018 / 20:54

Tags