CentOS 6
Sponsored Link

SELinux : ブール値を変更する2016/07/26

 
デフォルト設定の「targeted」ポリシーなどのあらかじめ提供されているポリシーでは、一般的によく利用されるアプリケーションが一般的に使用する資源に対して、SELinux によるアクセス制御の設定を容易に切り替え可能なようにブール値が用意されています。
以下では「targeted」ポリシー適用下の環境で例示しています。
[1] ブール値の一覧は以下のようにして確認可能です。
# ブール値の一覧と現在の ON/OFF 状況を表示

[root@dlp ~]#
getsebool -a

abrt_anon_write --> off
abrt_handle_event --> off
allow_console_login --> on
.....
.....
xguest_use_bluetooth --> on
xserver_object_manager --> off
zabbix_can_network --> off

# ブール値の一覧を概要付きで表示

[root@dlp ~]#
semanage boolean -l

SELinux boolean                State  Default Description

ftp_home_dir                   (off  ,  off)  Allow ftp to read and write files in the user home directories
smartmon_3ware                 (off  ,  off)  Enable additional permissions needed to support devices on 3ware controllers.
xdm_sysadm_login               (off  ,  off)  Allow xdm logins as sysadm
.....
.....
cron_can_relabel               (off  ,  off)  Allow system cron jobs to relabel filesystem for restoring file contexts.
git_system_use_cifs            (off  ,  off)  Determine whether Git system daemon can access cifs file systems.

※ semanage コマンドが無い場合は以下のようにしてインストール

[root@dlp ~]#
yum -y install policycoreutils-python
[2]
例として「samba_enable_home_dirs」というブール値について設定します。
「samba_enable_home_dirs」はデフォルトでは「off」となっており、SELinux によるアクセス制御を受ける設定となっています。
この状態でこちらの例のように「/home/share」に対してフルアクセスの共有設定をしたとしても、SELinux によりアクセスは拒否されます。 これは「samba_enable_home_dirs」が「off」の状態では、Samba が /home 配下にアクセスするために必要な SELinux コンテキストが割り当てられないためです。
# デフォルトはオフの設定

[root@dlp ~]#
semanage boolean -l | grep samba_enable_home_dirs

samba_enable_home_dirs         (off  ,  off)  Allow samba to share users home directories.

# Samba でフルアクセスの共有設定実施後にテストファイル作成

# SELinux コンテキストは /home/share ディレクトリから継承している

[root@dlp ~]#
ls -Z /home/share

-rw-rw-r--. cent cent unconfined_u:object_r:home_root_t:s0 test2.txt
-rw-r--r--. root root unconfined_u:object_r:home_root_t:s0 test.txt
  以下のように、設定した共有フォルダへアクセスしても、DAC で読み取り権が付与されているファイルは見えず、上位ディレクトリ [/home/share] に 777 を設定していても書き込みアクセスは拒否されます。
[3] この状態からブール値「samba_enable_home_dirs」を「on」に変更し、正常にアクセスできるようにするには、以下のように設定します。
# samba_enable_home_dirs をオンにする

[root@dlp ~]#
setsebool -P samba_enable_home_dirs on

[root@dlp ~]#
getsebool samba_enable_home_dirs

samba_enable_home_dirs --> on    
# 変更された
# 現在の SELinux コンテキストは samba_enable_home_dirs オフの時に付与されたもの

[root@dlp ~]#
ls -Z /home/share

-rw-rw-r--. cent cent unconfined_u:object_r:home_root_t:s0 test2.txt
-rw-r--r--. root root unconfined_u:object_r:home_root_t:s0 test.txt

# samba_enable_home_dirs で設定されるデフォルトの SELinux コンテキストにリストア

[root@dlp ~]#
restorecon -R /home/share
# SELinux コンテキスト確認 (user_home_t に変更された)

[root@dlp ~]#
ls -Z /home/share

-rw-rw-r--. cent cent unconfined_u:object_r:user_home_t:s0 test2.txt
-rw-r--r--. root root unconfined_u:object_r:user_home_t:s0 test.txt
 
以上で、SELinux によるアクセス制限が許可され、以下のように通常の DAC アクセス権に沿ったアクセスが可能となります。
なお、ブール値「samba_enable_home_dirs」を「on」に変更した後に対象ディレクトリ配下で作成したファイル/ディレクトリには、自動で「user_home_t」が割り当てられるため、毎回 restorecon を実行する必要はありません。
関連コンテンツ