
- - - 問題 - - - -
私のシステムでは 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 つの側面があり、最初の側面について説明します。
- ラベル /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
- ユーザー 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 内の他のファイルとともに、そのために使用されます。