SELinux: executando um binário de shell personalizado em /etc/passwd

SELinux: executando um binário de shell personalizado em /etc/passwd

----- Problema --------

Tenho o CentOS 7.6 em execução no meu sistema. Quero invocar um shell personalizado em vez do shell padrão no arquivo /etc/passwd.

Eu tenho o SELinux habilitado e, por algum motivo, o domínio sshd_t não faz a transição para um novo domínio personalizado que meu shell personalizado contém.

Algo assim:

Em /etc/passwd:

root:x:0:0:root:/root:/bin/myshell

Transição de domínio SELinux:

myshell.fc

/bin/myshell                             gen_context(system_u:object_r:myshell_exec_t,s0)

myshell.te

role unconfined_r types myshell_t;
role_transition unconfined_r myshell_t system_r;
domtrans_pattern(unconfined_t, myshell_exec_t, myshell_t)

O usuário padrão énão confinado_u:não confinado_r:não confinado_t.

Também tenho uma transição de função de unconfined_r para system_r.

---- Emitir ------

Por alguma razão, o sshd_t não faz a transição para o domínio myshell_t. O usuário é root.

Aqui está a mensagem do log de alteração de função:

type=USER_ROLE_CHANGE msg=audit(1559079004.637:339116): pid=24478 uid=0 auid=0 ses=823 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='pam: default-context=system_u:unconfined_r:unconfined_t:s0 selected-context=system_u:unconfined_r:unconfined_t:s0 exe="/usr/sbin/sshd" hostname=X.X.X.X addr=X.X.X.X terminal=ssh res=success'

type=AVC msg=audit(1559067681.085:327703): avc:  granted  { execute } for  pid=17593 comm="sshd" name="myshell"  scontext=system_u:unconfined_r:unconfined_t:s0 tcontext=system_u:object_r:myshell_exec_t:s0 tclass=file

Ele executa o binário, mas a transição não está acontecendo. Provavelmente porque a função é diferente, mas eu tenho uma transição de função - mas não sei por que não está funcionando.

Responder1

Há dois aspectos aqui, abordarei o primeiro aspecto:

  1. rótulo /bin/myshell tipo shell_exec_t: echo '(filecon "/usr/bin/myshell" arquivo (system_u object_r shell_exec_t ((s0)(s0))))' > myshell.cil && semodule -i myshell.cil
  2. crie e associe o usuário joe ao domínio shell confinado user_t existente: useradd -Z user_u joe

ssh joe@localhost 'id -Z'

Criar novos usuários confinados é um pouco mais complicado, mas a essência é que programas de login como sshd, login etc. usam pam_selinux para determinar o contexto para executar um shell de login e eles fazem a transição manualmente, não automaticamente. Os arquivos em /etc/selinux/TYPE/contexts/users/ são usados ​​para isso, entre outros arquivos em /etc/selinux/TYPE/contexts

informação relacionada