SELinux: /etc/passwd からカスタム シェル バイナリを実行する

SELinux: /etc/passwd からカスタム シェル バイナリを実行する

- - - 問題 - - - -

私のシステムでは CentOS 7.6 を実行しています。/etc/passwd ファイルで標準シェルの代わりにカスタム シェルを呼び出したいです。

SELinux が有効になっていますが、何らかの理由で sshd_t ドメインがカスタム シェルが保持する新しいカスタム ドメインに移行されません。

このようなもの:

/etc/passwd 内:

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

SELinux ドメイン遷移:

マイシェル

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

マイシェル

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

デフォルトのユーザーは制限のないu:制限のないr:制限のないt。

unconfined_r から system_r へのロール遷移もあります。

- - 問題 - - -

何らかの理由で、sshd_t は myshell_t ドメインに移行しません。ユーザーは root です。

ロール変更ログ メッセージは次のとおりです。

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

バイナリは実行されますが、遷移は発生しません。おそらくロールが異なるためですが、ロールの遷移はあります。ただし、なぜ機能しないのかはわかりません。

答え1

ここには 2 つの側面があり、最初の側面について説明します。

  1. ラベル /bin/myshell タイプ shell_exec_t: echo '(filecon "/usr/bin/myshell" ファイル (system_u object_r shell_exec_t ((s0)(s0))))' > myshell.cil && semodule -i myshell.cil
  2. ユーザー joe を作成し、既存の user_t 制限シェルドメインに関連付けます: useradd -Z user_u joe

ssh joe@localhost 'id -Z'

新しい制限付きユーザーの作成は、少し複雑ですが、要点は、sshd、login などのログイン プログラムが pam_selinux を使用してログイン シェルを実行するコンテキストを決定し、自動ではなく手動で移行することです。/etc/selinux/TYPE/contexts/users/ 内のファイルは、/etc/selinux/TYPE/contexts 内の他のファイルとともに、そのために使用されます。

関連情報