SELinux: Ausführen einer benutzerdefinierten Shell-Binärdatei aus /etc/passwd

SELinux: Ausführen einer benutzerdefinierten Shell-Binärdatei aus /etc/passwd

----- Problem --------

Auf meinem System läuft CentOS 7.6. Ich möchte in der Datei /etc/passwd eine benutzerdefinierte Shell anstelle der Standard-Shell aufrufen.

Ich habe SELinux aktiviert, aber aus irgendeinem Grund wird die Domäne „sshd_t“ nicht in eine neue benutzerdefinierte Domäne umgewandelt, die von meiner benutzerdefinierten Shell gespeichert wird.

Etwas wie das:

In /etc/passwd:

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

SELinux-Domänenübergang:

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)

Der Standardbenutzer istunbeschränkt_u:unbeschränkt_r:unbeschränkt_t.

Ich habe auch einen Rollenübergang von unconfined_r zu system_r.

---- Ausgabe ------

Aus irgendeinem Grund wird sshd_t nicht in die Domäne myshell_t überführt. Der Benutzer ist root.

Hier ist die Protokollnachricht zu den Rollenänderungen:

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

Die Binärdatei wird zwar ausgeführt, aber der Übergang findet nicht statt. Wahrscheinlich, weil die Rolle anders ist, aber ich habe einen Rollenübergang – bin mir aber nicht sicher, warum es nicht funktioniert.

Antwort1

Hier gibt es zwei Aspekte. Ich werde auf den ersten Aspekt eingehen:

  1. Bezeichnung /bin/myshell Typ shell_exec_t: echo '(filecon "/usr/bin/myshell" Datei (system_u Objekt_r shell_exec_t ((s0)(s0))))' > myshell.cil && semodule -i myshell.cil
  2. Erstellen und verknüpfen Sie den Benutzer joe mit der vorhandenen, auf user_t beschränkten Shell-Domäne: useradd -Z user_u joe

ssh joe@localhost 'id -Z'

Das Erstellen neuer eingeschränkter Benutzer ist etwas komplizierter, aber im Wesentlichen verwenden Anmeldeprogramme wie sshd, login usw. pam_selinux, um den Kontext zum Ausführen einer Anmeldeshell zu bestimmen, und wechseln manuell und nicht automatisch. Die Dateien in /etc/selinux/TYPE/contexts/users/ werden hierfür neben anderen Dateien in /etc/selinux/TYPE/contexts verwendet.

verwandte Informationen