LinuCレベル3 303試験の例題と解説
327.2強制アクセス制御
LinuC 303試験の試験範囲から「327.2 強制アクセス制御」についての例題を解いてみます。このテーマは【重要度4】です。SELinux の設定、管理、使用方法や、その他の強制アクセス制御などについて、出題範囲を確認しましょう。
例題
/myapp/write.txtというファイルが存在し、以下のファイルコンテキストであるとします。
# ls -Z /myapp/write.txt
-rw-r--r--. apache root unconfined_u:object_r:usr_t:s0 /myapp/write.txt
このファイルのタイプを「usr_t」から「httpd_sys_rw_content_t」へ即時変更し、また、恒久的にも設定するコマンドは次のうちどれですか?
- # chcon -t httpd_sys_rw_content_t /myapp/write.txt
- # semanage fcontext -a -t httpd_sys_rw_content_t /myapp/write.txt
- # chcon -t httpd_sys_rw_content_t /myapp/write.txt; restorecon /myapp/write.txt
- # semanage fcontext -a -t httpd_sys_rw_content_t /myapp/write.txt; restorecon /myapp/write.txt
※この例題は実際の試験問題とは異なります。
解答と解説
答えは「4.」です。
SELinuxのファイルコンテキストの変更には、一時的な変更と恒久的な変更があります。
ファイルコンテキストの一時的な変更は、chconコマンドで行います。
# chcon [オプション] <対象ファイル|対象ディレクトリ>
chconコマンドの主なオプションは以下の通りです。
-u USER, --user=USER
対象となるセキュリティコンテキストのユーザーを USER に設定
-r ROLE, --role=ROLE
対象となるセキュリティコンテキストのロールを ROLE に設定
-t TYPE, --type=TYPE
対象となるセキュリティコンテキストのタイプを TYPE に設定
-l RANGE, --range=RANGE
対象となるセキュリティコンテキストの範囲を RANGE に設定
-R, --recursive
ファイルとディレクトリを再帰的に操作
chconコマンドでファイルコンテキストの変更をすると、ファイルコンテキストは即時変更されますが、サーバ再起動や、restoreconコマンドの実行によってもとのファイルコンテキストに戻ります。
ファイルコンテキストの恒久的な変更は、「semanage fcontext」コマンドで行えます。
# semanage fcontext [オプション] <対象ファイル|対象ディレクトリ>
semanage コマンドの主なオプションは以下の通りです。
-a, --add
ファイルコンテキストのマッピング定義に新規レコードを追加
-d, --delete
ファイルコンテキストのマッピング定義からレコードを削除
-m, --modify
ファイルコンテキストのマッピング定義のレコードを編集
-l, --list
ファイルコンテキストのマッピング定義のレコード一覧を表示
上記の「-a」,「-m」オプションによってレコードを追加・編集する場合は、さらに以下のオプションを用いてレコードの内容を指定します。
-s SEUSER, --seuser SEUSER
対象となるセキュリティコンテキストのユーザーを SEUSER に設定
-t TYPE, --type TYPE
対象となるセキュリティコンテキストのタイプを TYPE に設定
-r RANGE, --range RANGE
対象となるセキュリティコンテキストの範囲を RANGE に設定
semanage fcontextコマンドでファイルコンテキストの変更を実行すると、ファイルコンテキスト変更は恒久的に設定されますが、即時反映はされません。変更を反映するには、restoreconコマンドの実行または、サーバ再起動が必要です。
また、restoreconコマンドは、対象ファイル・ディレクトリのSELinuxコンテキストを恒久設定値に復元します。
# restorecon [オプション] <対象ファイル|対象ディレクトリ>
restorecon コマンドの主なオプションは以下の通りです。
-e DIRECTORY
対象ディレクトリから、DIRECTORYに指定したフルパス配下を除外
-f INFILENAME
対象ファイル・対象ディレクトリを指定しない代わりにINFILENAMEに記述されたファイルリストを対象
-i
存在しないファイルを無視
-R, -r
対象ディレクトリ配下を再帰的に処理
-v
コンテキストが変更される場合、何から何に変更されるかを表示
選択肢を一つずつ見ていきましょう。
1. # chcon -t httpd_sys_rw_content_t /myapp/write.txt
誤りです。このコマンドを実行すると、ファイルコンテキストは「httpd_sys_rw_content_t」に変更されますが、一時的です。
2. # semanage fcontext -a -t httpd_sys_rw_content_t /myapp/write.txt
誤りです。このコマンドを実行すると、恒久設定はされますが、現在のファイルコンテキストはまだ「usr_t」のままです。
3. # chcon -t httpd_sys_rw_content_t /myapp/write.txt; restorecon /myapp/write.txt
誤りです。このコマンドを実行すると、恒久設定もされず、ファイルコンテキストも「usr_t」に戻ってしまいます。
4. # semanage fcontext -a -t httpd_sys_rw_content_t /myapp/write.txt; restorecon /myapp/write.txt
正しいです。1つ目のコマンドを実行すると、/myapp/write.txtのファイルコンテキストに恒久設定がされます。 2つ目のrestorecon コマンドで、現在のファイルコンテキストが恒久設定のコンテキストに置き換わります。
強制アクセス制御のSELinuxの設定、制御方法全般について学習し、理解しておきましょう。
例題作成者
株式会社デージーネット OSS研究室 後藤 慎司