「物事が必ずしも見た目とは限らないことは重要で人気のある事実です…」
―ダグラス・アダムズ、銀河ヒッチハイカーガイド
安全。硬化。コンプライアンス。ポリシー。 SysAdmin黙示録の4人の騎手。監視、バックアップ、実装、チューニング、更新などの日常業務に加えて、システムのセキュリティ保護も担当しています。サードパーティプロバイダーが強化されたセキュリティを無効にするように指示しているシステムですら。 ミッションインポッシブルの仕事のようです のイーサンハント。
このジレンマに直面して、一部のシステム管理者は、生命、宇宙、その他すべての大きな問題に対する答えを決して知らないと考えているため、青いピルを服用することにしました。そして、ご存知のとおり、その答えは 42です。 。
ヒッチハイカーの銀河ガイドの精神で 、ここに、システムでのSELinuxの管理と使用に関する大きな質問に対する42の回答があります。
- SELinuxはLABELINGシステムです。つまり、すべてのプロセスにLABELがあります。すべてのファイル、ディレクトリ、およびシステムオブジェクトにはLABELがあります。ポリシールールは、ラベル付きプロセスとラベル付きオブジェクト間のアクセスを制御します。カーネルはこれらのルールを適用します。
- 最も重要な2つの概念は次のとおりです。ラベル付け (ファイル、プロセス、ポートなど)およびタイプエンフォースメント (タイプに基づいてプロセスを相互に分離します)。
- 正しいラベル形式は
user:role:type:level
です。 (オプション 。
- マルチレベルセキュリティ(MLS)施行の目的 プロセス(ドメイン)を制御することです )使用するデータのセキュリティレベルに基づきます。たとえば、シークレットプロセスはトップシークレットデータを読み取ることができません。
- マルチカテゴリセキュリティ(MCS)の実施 同様のプロセスを相互に保護します(仮想マシン、OpenShiftギア、SELinuxサンドボックス、コンテナーなど)。
- 起動時にSELinuxモードを変更するためのカーネルパラメーター:
-
autorelabel =1
→システムに強制的にラベルを付け直します -
selinux =0
→カーネルはSELinuxインフラストラクチャのどの部分もロードしません -
Enforcing =0
→許容モードで起動
-
- システム全体のラベルを変更する必要がある場合:
# touch /.autorelabel
# rebootシステムのラベル付けに大量のエラーが含まれている場合、自動再ラベル付けを成功させるには、許容モードで起動する必要がある場合があります。
-
SELinuxが有効になっているかどうかを確認するには:
# getenforce
-
SELinuxを一時的に有効/無効にするには:
# setenforce [1|0]
-
SELinuxステータスツール:
# sestatus
-
構成ファイル:
/etc/selinux/config
- SELinuxはどのように機能しますか? ApacheWebサーバーのラベル付けの例を次に示します。
- バイナリ:
/ usr / sbin / httpd
→httpd_exec_t
- 構成ディレクトリ:
/ etc / httpd
→httpd_config_t
- ログファイルディレクトリ:
/ var / log / httpd
→httpd_log_t
- コンテンツディレクトリ:
/ var / www / html
→httpd_sys_content_t
- 起動スクリプト:
/usr/lib/systemd/system/httpd.service
→httpd_unit_file_d
- プロセス:
/ usr / sbin / httpd -DFOREGROUND
→httpd_t
- ポート:
80 / tcp、443 / tcp
→httpd_t、http_port_t
- バイナリ:
httpd_t
で実行されているプロセス コンテキストは、 httpd_something_t
を使用してオブジェクトと対話できます ラベル。
- 多くのコマンドは引数
-Z
を受け入れます コンテキストを表示、作成、および変更するには:-
ls -Z
-
id -Z
-
ps -Z
-
netstat -Z
-
cp -Z
-
mkdir -Z
-
コンテキストは、親ディレクトリのコンテキストに基づいてファイルが作成されるときに設定されます(いくつかの例外を除く)。 RPMは、インストールの一部としてコンテキストを設定できます。
- SELinuxエラーの主な原因は4つあり、以下の項目15〜21で詳しく説明されています。
- ラベル付けの問題
- SELinuxが知っておくべきこと
- SELinuxポリシー/アプリのバグ
- あなたの情報が危険にさらされる可能性があります
- ラベル付けの問題:
/ srv / myweb
にあるファイルの場合 正しくラベル付けされていない場合、アクセスが拒否される可能性があります。これを修正するいくつかの方法があります:- ラベルを知っている場合:
#semanage fcontext -a -t httpd_sys_content_t'/srv/myweb(/.*)?'
- 同等のラベルが付いたファイルを知っている場合:
#semanage fcontext -a -e / srv / myweb / var / www
- コンテキストを復元します(どちらの場合も):
#restorecon -vR / srv / myweb
- ラベルを知っている場合:
- ラベル付けの問題: ファイルをコピーする代わりに移動すると、ファイルは元のコンテキストを保持します。これらの問題を修正するには:
-
次のラベルを使用してコンテキストコマンドを変更します:
$ sudo chcon -t httpd_system_content_t /var/www/html/index.html
-
参照ラベルを使用してコンテキストコマンドを変更します:
$ sudo chcon --reference /var/www/html/ /var/www/html/index.html
-
コンテキストを復元します(どちらの場合も):
$ sudo restorecon -vR /var/www/html/
-
-
SELinuxが知る必要がある場合 HTTPDはポート8585でリッスンし、SELinuxに通知します:
$ sudo semanage port -a -t http_port_t -p tcp 8585
-
SELinuxは知る必要があります ブール値を使用すると、SELinuxポリシーの記述に関する知識がなくても、実行時にSELinuxポリシーの一部を変更できます。たとえば、httpdでメールを送信する場合は、次のように入力します。
$ sudo setsebool -P httpd_can_sendmail 1
- SELinuxは知っておく必要があります ブール値は、SELinuxのオフ/オン設定です:
- すべてのブール値を表示するには:
#getsebool -a
- それぞれの説明を表示するには:
#semanage boolean -l </ code>
- ブール実行を設定するには:
#setsebool [_boolean_] [1 | 0]
- 永続的に構成するには、
-P
を追加します 。例:
#setsebool httpd_enable_ftp_server 1 -P
- すべてのブール値を表示するには:
- SELinuxポリシー/アプリには、次のようなバグが含まれている可能性があります。
- 異常なコードパス
- 構成
-
stdout
のリダイレクト - リークされたファイル記述子
- 実行可能メモリ
- 不適切に構築されたライブラリ
- あなたの情報が危険にさらされる可能性があります ドメインを制限して次のことを試みている場合:
- カーネルモジュールをロードする
- SELinuxの強制モードをオフにします
-
etc_t / shadow_t
に書き込みます - iptablesルールを変更する
- ポリシーモジュールを開発するためのSELinuxツール:
$ yum -y install setroubleshoot setroubleshoot-server
auditd
を再起動または再起動します インストール後。
-
journalctl
を使用するsetroubleshoot
に関連するすべてのログを一覧表示します :
$ sudo journalctl -t setroubleshoot --since=14:20
-
journalctl
を使用する 特定のSELinuxラベルに関連するすべてのログを一覧表示します。例:
$ sudo journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
-
setroubleshoot
を使用する SELinuxエラーが発生したときにログに記録し、いくつかの可能な解決策を提案します。たとえば、journalctl
から :Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.
***** Plugin restorecon (99.5 confidence) suggests ************************
If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html
- ロギング:SELinuxはあらゆる場所で情報を記録します:
-
/ var / log / messages
-
/var/log/audit/audit.log
-
/var/lib/setroubleshoot/setroubleshoot_database.xml
-
-
ロギング:監査ログでSELinuxエラーを探します:
$ sudo ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
-
特定のサービスのSELinuxAccessVector Cache(AVC)メッセージを検索するには:
$ sudo ausearch -m avc -c httpd
-
audit2allow
ユーティリティは、拒否された操作のログから情報を収集し、SELinuxポリシー許可ルールを生成します。例:- アクセスが拒否された理由を人間が読める形式で説明するには:
#audit2allow -w -a
- 拒否されたアクセスを許可するタイプ強制ルールを表示するには:
#audit2allow -a
- カスタムモジュールを作成するには:
#audit2allow -a -M mypolicy
-M
オプションは、指定された名前でタイプエンフォースメントファイル(.te)を作成し、ルールをポリシーパッケージ(.pp)にコンパイルします:mypolicy.pp mypolicy.te
- カスタムモジュールをインストールするには:
#semodule -i mypolicy.pp
- アクセスが拒否された理由を人間が読める形式で説明するには:
- パーミッシブを実行するように単一のプロセス(ドメイン)を構成するには:
#semanage permissive -a httpd_t
- ドメインをパーミッシブにする必要がなくなった場合:
#semanage permissive -d httpd_t
-
すべての許可ドメインを無効にするには:
$ sudo semodule -d permissivedomains
-
SELinux MLSポリシーの有効化:
$ sudo yum install selinux-policy-mls
/ etc / selinux / config:
SELINUX=permissive
SELINUXTYPE=mlsSELinuxが許容モードで実行されていることを確認します:
$ sudo setenforce 0
fixfiles
を使用します 次回の再起動時にファイルのラベルが変更されるようにするスクリプト:$ sudo fixfiles -F onboot
$ sudo reboot
-
特定のMLS範囲でユーザーを作成します:
$ sudo useradd -Z staff_u tux
useradd
を使用する コマンドを実行し、新しいユーザーを既存のSELinuxユーザー(この場合はstaff_u
)にマップします 。
-
SELinuxとLinuxユーザー間のマッピングを表示するには:
$ sudo semanage login -l
-
ユーザーの特定の範囲を定義します:
$ sudo semanage login --modify --range s2:c100 tux
-
ユーザーのホームディレクトリのラベルを修正するには(必要な場合):
$ sudo chcon -R -l s2:c100 /home/tux
-
現在のカテゴリを一覧表示するには:
$ sudo chcat -L
-
カテゴリを変更するか、独自のカテゴリの作成を開始するには、次のようにファイルを変更します。
/etc/selinux/_<selinuxtype>_/setrans.conf
-
特定のファイル、ロール、およびユーザーコンテキストでコマンドまたはスクリプトを実行するには:
$ sudo runcon -t initrc_t -r system_r -u user_u yourcommandhere
- -tはファイルコンテキストです
- -rはロールコンテキストです
- -uはユーザーコンテキストです
- SELinuxを無効にして実行しているコンテナー:
- Podmanの場合:
#podman run --security-opt label=disable…
- Dockerの場合:
#docker run --security-opt label=disable…
- Podmanの場合:
- コンテナにシステムへのフルアクセスを許可する必要がある場合:
- Podmanの場合:
#podmanrun--privileged…
- Dockerの場合:
#dockerrun--privileged…
- Podmanの場合:
そしてこれで、あなたはすでに答えを知っています。どうぞ:慌てる必要はありません。SELinuxをオンにしてください 。
出典:
- DanWalshによるSELinux
- DanWalshによるSELinuxポリシー施行の視覚的なハウツーガイド
- ThomasCameronによる単なる人間のためのSecurityEnhancedLinux
- MáirínDuffyによるSELinuxぬりえ
- SELinuxユーザーおよび管理者ガイド—Red Hat Enterprise Linux 7