SELinux: ejecutando un binario de shell personalizado desde /etc/passwd

SELinux: ejecutando un binario de shell personalizado desde /etc/passwd

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

Tengo CentOS 7.6 ejecutándose en mi sistema. Quiero invocar un shell personalizado en lugar de un shell estándar en el archivo /etc/passwd.

Tengo SELinux habilitado y, por alguna razón, el dominio sshd_t no pasa a un nuevo dominio personalizado que contiene mi shell personalizado.

Algo como esto:

En /etc/contraseña:

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

Transición de dominio 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)

El usuario predeterminado esunconfined_u:unconfined_r:unconfined_t.

También tengo una transición de rol de unconfined_r a system_r.

---- Asunto ------

Por alguna razón, sshd_t no realiza la transición al dominio myshell_t. El usuario es root.

Aquí está el mensaje de registro de cambio de rol:

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

Ejecuta el binario pero la transición no se produce. Probablemente porque el rol es diferente, pero tengo una transición de rol; aunque no estoy seguro de por qué no funciona.

Respuesta1

Hay dos aspectos aquí, abordaré el primer aspecto:

  1. etiqueta /bin/myshell tipo shell_exec_t: echo '(filecon "/usr/bin/myshell" archivo (system_u object_r shell_exec_t ((s0)(s0))))' > myshell.cil && semodule -i myshell.cil
  2. cree y asocie al usuario joe con el dominio de shell confinado user_t existente: useradd -Z user_u joe

ssh joe@localhost 'id -Z'

Crear nuevos usuarios confinados es un poco más complicado, pero lo esencial es que los programas de inicio de sesión como sshd, login, etc. usan pam_selinux para determinar el contexto para ejecutar un shell de inicio de sesión y realizan la transición manualmente, no automáticamente. Los archivos en /etc/selinux/TYPE/contexts/users/ se utilizan para eso, entre otros archivos en /etc/selinux/TYPE/contexts

información relacionada