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ドメイン翻訳:

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)

デフォルトユーザーはunconfined_u:unconfined_r:unconfined_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 の他のファイルと一緒に使用されます。

おすすめ記事