SELinux

【SELinux】ポリシー一覧/コンテキスト(タイプ)一覧/Boolean一覧等の状態確認や設定追加削除方法

SELinuxの基本設定ファイル

SELinuxの基本設定ファイルは以下です。再起動後も設定状態を維持したい場合はこのファイルを設定変更します。(一時的な変更であれば # setenforce=0 )

[root@localhost ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

SELINUX= の箇所で、SELINUX を有効 (enforcing) や無効 (disabled) に設定できます。permissive では引っ掛かったアクセスをログに記録しますが実際にはアクセスは止めません。以下に少し詳細を説明します。

SELINUX=enforcing

SELinux によるアクセス制御を行う(許可ルールが無ければアクセスを止め、かつ/var/log/audit/audit.logに記録する)

SELINUX=permissive

/var/log/audit/audit.log にログだけ取得する (アクセスは止めない)

SELINUX=disabled

SELinuxによるアクセス制御を行わない(ログも取得しない)。ファイルにコンテキスト(ラベル)も付けない。

また、SELIUXTYPE はより細かな制御をしたい場合に変更します。デフォルトかつ実用的なのは targeted です。変更はあまり推奨しませんが、以下のような種類があります。

SELINUXTYPE=targeted

多くのプロセスが定義され、SELinux により行動を制限される。

SELINUXTYPE=minimum

頻繁に利用される一部のプロセスのみが定義され、SELinux により行動を制限される。

SELINUXTYPE=mls

targeted に加え、利用ユーザによってさらにアクセス制御ルールが加わる。(難しいためあまり利用されない)

また、その他の設定も /etc/selinux配下に集まっています。

ポリシーに関する設定表示

SELinux設定用パッケージのインストール

SELinuxの設定表示・追加削除を実施するにはまず以下のパッケージをインストールします。

[root@localhost ~]# dnf -y install policycoreutils-python-utils
[root@localhost ~]# dnf -y install setools-console

SELinux のコンテキスト定義ルール一覧表示

ファイルが新規作成されるときに設定されるコンテキストは、この定義ルールと作るディレクトリによって決まります。このディレクトリに作る場合はこのコンテキスト、といった具合ですり定義ルールは以下で一覧表示できます。

[root@localhost ~]# semanage fcontext -l

ただし、ファイルに実際に割り当たっているコンテキストがこのルールに合致するとは限りません。mvで移動してきた場合は変更されませんし、一時的に変更するコマンドもあります。現在あたっているコンテキストを確認するのは ls -Z です。

定義ルールに一致しないファイルを、定義ルール通りに戻すコマンドは以下です。

[root@localhost ~]# restorecon -RFv hogehoge.txt

SELinuxのポリシー(Access Vector)一覧表示

[root@localhost ~]# sesearch --allow
[root@localhost ~]# sesearch --neverallow
[root@localhost ~]# sesearch --auditallow
[root@localhost ~]# sesearch --dontaudit

allow は『許可してaudit.logに記録しない』というルール。neverallow は『拒否して audit.log に記録する』というルール。auditallow は『許可して audit.log に記録する』というルール。dontauditは『拒否して audit.log に記録しない』というルール。NW 機器の ACL と同じで、暗黙のneverallowルールがある。

SELinuxのBoolean設定一覧表示

Boolean とは、ある目的に必要なポリシーを 1 つにまとめたものです。Boolean を一覧表示するには以下のコマンドを使います。

[root@localhost ~]# getsebool -a

booleanでよく使われるのは "httpd_can_connec_network_connect" です。これは、web アプリが php 等のスクリプトを使ってメール送信や LDAP 連携、DB 接続するときにデフォルトでは SELinux により拒否されるので、この boolean で許可することができます。

[root@localhost ~]# setsebool -P httpd_can_connec_network_connect on

設定が反映されたかを確認します。

[root@localhost ~]# getsebool httpd_can_network_connect

また、このbooleanの具体的な許可ルールを見たい場合は以下を打ちます。

[root@localhost ~]# sesearch -b httpd_can_network_connect --allow

SELinuxのClassとPermission一覧表示

[root@localhost ~]# seinfo -x -c

SELinux のタイプ(type)一覧表示

[root@localhost ~]# seinfo -t

SELinux の個別追加設定した内容を表示(ただしsemodule等で追加したモジュール情報は見れない)

[root@localhost ~]# semanage export

ファイルコンテキスト(fcontext)定義ルール設定追加

[root@localhost ~]# semanage fcontext -a -t httpd_user_content_t -f a '/home/[^/]+/contents(/.*)?'

-a = add。ルールを追加するという意味。

-t = type。タイプを指定するという意味。

-f = file type。a は all files という意味。

ファイルパスは正規表現で指定。

上記の追加ルールの意味は、『/home 配下の各ユーザディレクトリの下に contents というディレクトリがあった場合、そのディレクトリ本体およびその配下に作られたファイルおよびディレクトリのコンテキストのタイプを httpd_user_content_t に設定する』という意味。

設定状態は semanage export で確認可能。

[root@localhost ~]# semanage export
boolean -D
login -D
interface -D
user -D
port -D
node -D
fcontext -D
module -D
fcontext -a -f a -t httpd_user_content_t '/home/[^/]+/contents(/.*)?'
[root@localhost ~]#

コンテキスト定義ルール設定削除

[root@localhost ~]# semanage fcontext -d '/home/[^/]+/contents(/.*)?'

ポート設定追加

ssh で使うポートを tcp:10022 に変更したい場合、その許可ルールを設定するよりも、ssh_port_t というタイプの定義 (デフォルト tcp:22) に tcp:10022 を追加するほうが楽です。

[root@localhost ~]# semanage port -a -t ssh_port_t -p tcp 10022

設定状態確認

[root@localhost ~]# semanage export
boolean -D
login -D
interface -D
user -D
port -D
node -D
fcontext -D
module -D
port -a -t ssh_port_t -p tcp 10022
[root@localhost ~]#

コメント

タイトルとURLをコピーしました