2009年6月 2日

[jsosug:00089] Re:CentOS-5.3 にて SSH ログインとローカルログインでSELinuxの権限を分けることは可能でしょうか

海外です。

> さて、本題に入らせて頂きます。
> 先日の懇親会で海外さんに
>
> 「SSH ログインとローカルログインとで SElinux の権限を分けることが可能か?」
>
> と質問させて頂いたところ、以下のファイルを編集して、動作を確認してみては

> どうかとご助言を頂きました。
>
> /etc/selilnux/targeted/context/user_sshd
> # パスが間違ってたら申し訳ありません
>
> 実際に自宅の CentOS-5.3 で確かめようとしたところ、該当ファイルがみつかり
> ませんでした。

正確には以下のエントリになります
/etc/selinux/targeted/contexts/users/<SELinuxユーザ名>

SELinuxユーザ名とは、unconfined_u や user_u といったものですね。
CentOS 5.3 の場合、root のみが定義されているようです。

rootだと少しわかりにくいので、Fedora 10の例を紹介します。

ここで /etc/selinux/targeted/contexts/users/user_u は以下のように定義されています
--------
[kaigai@xxxxx ~]$ cat /etc/selinux/targeted/contexts/users/user_u
system_r:local_login_t:s0 user_r:user_t:s0
system_r:remote_login_t:s0 user_r:user_t:s0
system_r:sshd_t:s0 user_r:user_t:s0
system_r:crond_t:s0 user_r:user_t:s0
system_r:xdm_t:s0 user_r:user_t:s0
user_r:user_su_t:s0 user_r:user_t:s0
user_r:user_sudo_t:s0 user_r:user_t:s0
system_r:initrc_su_t:s0 user_r:user_t:s0
user_r:user_t:s0 user_r:user_t:s0
--------

このファイルは、認証の結果 SELinuxユーザ user_u がログインする際に、
サービス毎のデフォルトのセキュリティコンテキストを設定するためのものです。

3行目に注目してください。

ここに「system_r:sshd_t:s0」に対して「user_r:user_t:s0」という記述があり、
sshd_t デーモンがシェルを起動する時に(いくつか選択肢のある中で)user_r:user_t:s0を
利用者のログインシェルに割り当てて実行するよう設定されています。

もし /etc/selinux/targeted/contexts/users/* 以下にマッチするエントリーがない場合、
/etc/selinux/targeted/contexts/default_contexts の設定が使われます。

このファイルも書式は同じで、こんな感じになっています。
--------
[kaigai@xxxxx ~]$ cat /etc/selinux/targeted/contexts/default_contexts
system_r:crond_t:s0 system_r:system_cronjob_t:s0
system_r:local_login_t:s0 user_r:user_t:s0
system_r:remote_login_t:s0 user_r:user_t:s0
system_r:sshd_t:s0 user_r:user_t:s0
system_r:sulogin_t:s0 sysadm_r:sysadm_t:s0
system_r:xdm_t:s0 user_r:user_t:s0
--------

なので、SSH ログイン時に unconfined_t ドメイン以外(例えば staff_t)で動作
させるには、「system_r:sshd_t:s0」の行に「unconfined_t」ドメイン以外を記述
してやるという事が必要になります。

そして、ここまでが前フリです。(^^;

最近の Fedora では、デフォルトで staff_t とか user_t といった、制限つきの
ログインシェル用のドメインが定義されているのですが、CentOS 5.3 だと、
いかんせん、ベースになっているセキュリティポリシーが古く、一筋縄では
いってくれません。
(Fedora5 とか 6 の時代ですからねぇ…。)

まず、sshd が unconfined_t ドメインで動作しています。
--------
[kaigai@xxxxx ~]$ ps -AZ
:
system_u:system_r:local_login_t:SystemLow-SystemHigh 3195 ? 00:00:00 login
:
system_u:system_r:unconfined_t:SystemLow-SystemHigh 4174 ? 00:00:00 sshd
:
--------
ただ、ローカルのログインは local_login_t で動作しているので、
上記の設定ファイルで「system_r:local_login_t:s0-s0:c0.c1023」のエントリと、
「system_r:unconfined_t:s0-s0:c0.c1023」のエントリを分けて記述する事が
できるでしょう。

もう一つ困った事は、標準のポリシーに staff_t や user_t などの、制限つき
ログインシェル用のドメインが定義されていないという事です。(ノ∀`)

ですので、手順としては以下のようになるかと思いますが、もう少しポリシー等
調査してリーズナブルな設定方法を後日紹介したいと思います。

1. /usr/share/selinux/devel/include/system/userdomain.if で定義されている
テンプレート等を利用して、制限つきシェル用のドメインを作成する。
(仮に staff_t とします)
2. 上記のポリシーをモジュールとして作成し、これをインストールします。
(モジュールの作成/ビルド方法のメモも必要ですね)
3. /etc/selinux/targeted/contexts/users/user_u に、sshd経由でログインした
場合に、シェルに staff_t を割り当てる設定を記述する。

> Fedora の環境を準備すればよいのですが、可能であれば CentOS-5.x ベースで
> SSH ログインに対して規制をかけたいと考えております。
>
> このような場合、どこかセキュリティコンテキストのポリシー例を公開している
> サイトなどがあるのでしょうか?

というわけで、後日、メモを作成してユーザ会の wiki にでも掲載する事にします。
しばらくお待ちください。

では。
--
KaiGai Kohei <kaigai@xxxxx>

_______________________________________________
Japan secure operating system users group
users-ml@xxxxx
http://lists.sourceforge.jp/mailman/listinfo/jsosug-users


投稿者 xml-rpc : 2009年6月 2日 23:08
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/85601
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。