2done.org

Linuxメインなメモ書き。二度寝してから書く。(ご意見は Twitter あたりで。そのうちコメント欄つけます。)

Strict 相当のポリシーにする(F15)

2011/08/17

はじめに

Fedora 8 から Targeted Policy と Strict Policy が統合されました。

デフォルトは Targeted なので Strict 相当にしたい時はどうしたらいいの?

と、いうことについてがここにあります。

http://danwalsh.livejournal.com/42394.html

要約すると、「unconfined モジュール と unconfineduser モジュールを抜け。」です。

unconfined はサクッと抜けます。

しかし、unconfineduser については ただ単に無効化・除去するということはできません。

これは、新規作成ユーザの権限が unconfined_u となるように定義されていたり、その他のユーザに unconfined_r がついていることが原因です。

この定義を変えない限り、unconfineduser モジュールを取り除くことはできません。

環境

# cat /etc/redhat-release
Fedora release 15 (Lovelock)

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 26
Policy from config file:        targeted

unconfied モジュールを無効化する

semodule コマンドを使用し、unconfied モジュールを無効化します。

# semodule -l | grep unconfined
unconfined      3.3.0
unconfineduser  1.0.0

# semodule -d unconfined

# semodule -l | grep unconfined
unconfined      3.3.0   Disabled
unconfineduser  1.0.0

ユーザマッピングの確認

# semanage login -l

Login Name                SELinux User              MLS/MCS Range

__default__               unconfined_u              s0-s0:c0.c1023
root                      unconfined_u              s0-s0:c0.c1023
system_u                  system_u                  s0-s0:c0.c1023

# semanage user -l

                Labeling   MLS/       MLS/
SELinux User    Prefix     MCS Level  MCS Range                      SELinux Roles

git_shell_u     user       s0         s0                             git_shell_r
guest_u         user       s0         s0                             guest_r
root            user       s0         s0-s0:c0.c1023                 staff_r sysadm_r system_r unconfined_r
staff_u         user       s0         s0-s0:c0.c1023                 staff_r sysadm_r system_r unconfined_r
sysadm_u        user       s0         s0-s0:c0.c1023                 sysadm_r
system_u        user       s0         s0-s0:c0.c1023                 system_r unconfined_r
unconfined_u    user       s0         s0-s0:c0.c1023                 system_r unconfined_r
user_u          user       s0         s0                             user_r
xguest_u        user       s0         s0                             xguest_r

Linuxユーザ と SELinuxユーザ マッピング変更

Login Name: __default__ と root の SELinux User から unconfined_u を抜く必要があります。

# semanage login -l | grep unconfined
__default__               unconfined_u              s0-s0:c0.c1023
root                      unconfined_u              s0-s0:c0.c1023

__default__ (SELinux User を指定せずに新規作成したユーザに付与される権限)を変更します。
staff_u, user_u, guest_u が適当でしょう。ここでは user_u を与えます。

# semanage login -m -s user_u -r s0 __default__


root を変更します。

staff_u, sysadm_u, root あたりが適当でしょう。ここでは sysadm_u を与えます。

# semanage login -m -s sysadm_u -r s0-s0:c0.c1023 root


SELinux ユーザのロール変更

SELinux User: root, staff_u, system_r の SELinux Roles から unconfined_r を抜く必要があります。

# semanage user -l | grep unconfined
root            user       s0         s0-s0:c0.c1023                 staff_r sysadm_r system_r unconfined_r
staff_u         user       s0         s0-s0:c0.c1023                 staff_r sysadm_r system_r unconfined_r
system_u        user       s0         s0-s0:c0.c1023                 system_r unconfined_r
unconfined_u    user       s0         s0-s0:c0.c1023                 system_r unconfined_r

unconfined_r を削除取り除きます。

# semanage user -m -R "staff_r sysadm_r system_r" root
# semanage user -m -R "staff_r sysadm_r system_r" staff_u
# semanage user -m -R "system_r" system_u

# semanage user -l

                Labeling   MLS/       MLS/
SELinux User    Prefix     MCS Level  MCS Range                      SELinux Roles

git_shell_u     user       s0         s0                             git_shell_r
guest_u         user       s0         s0                             guest_r
root            user       s0         s0-s0:c0.c1023                 staff_r sysadm_r system_r
staff_u         user       s0         s0-s0:c0.c1023                 staff_r sysadm_r system_r
sysadm_u        user       s0         s0-s0:c0.c1023                 sysadm_r
system_u        user       s0         s0-s0:c0.c1023                 system_r
unconfined_u    user       s0         s0-s0:c0.c1023                 system_r unconfined_r
user_u          user       s0         s0                             user_r
xguest_u        user       s0         s0                             xguest_r

別途定義している場合はそれらからも unconfined_u や unconfined_r を取り除く必要がありますのでご注意を。

これで、unconfineduser モジュールを無効化できます。

unconfieduser モジュールを無効化する

semodule コマンドを使用し、unconfieduser モジュールを無効化します。

[重要]

unconfineduser モジュールを無効化 する前に必ず Permissive モードに変更します。

なぜなら今、あなたには unconfined_u になっているはずだからです。(# id -Z)

unconfineduser モジュールを停止した時点で unconfined_u が剥奪され刺さります。。刺さりました。

ログインし直せば大丈夫?

# setenforce 0
# semodule -d unconfineduser

ラベルの再設定

ラベルの再設定を行います。

[重要]

ラベルの再設定は Permissive モードに変更してから行います。

ユーザの定義が変わっているため、再ラベルの際、拒否される可能性があります。

# sed  -i "s/^\(SELINUX=\).*/\1permissive/" /etc/selinux/config
# grep ^S /etc/selinux/config
SELINUX=permissive
SELINUXTYPE=targeted
# touch /.autorelabel
# shutdown -r 0

再起動が終わったら再度 Enforcing モードに戻します。

# sed  -i "s/^\(SELINUX=\).*/\1enforcing/" /etc/selinux/config
# setenforce 1

以上で Strit Policy 相当になりました。