GNU/Linux >> Linux の 問題 >  >> Linux

SELinux コンテキストを復元するための 10 の Linux restorecon コマンドの例

Linux サーバーでは、ファイルとディレクトリに適切な SELinux セキュリティ コンテキストを用意することが非常に重要です。

SELinux ポリシーによって既に管理されているディレクトリにカスタム ファイルを追加する場合、カスタム ファイルに適切な SELinux コンテキストがない場合、期待した結果が得られません。

restorecon は、SELinux コンテキストの復元の略です。

restorecon コマンドは、ファイルとディレクトリの SELinux セキュリティ コンテキストをデフォルト値にリセットします。これは、SELinux コンテキストの type 属性のみをリセットします。

このチュートリアルでは、restorecon コマンドの使用方法をいくつかの実用的な例とともに説明します。

1.ファイルの SELinux コンテキストを復元する

次の例では、index.html ファイルには、タイプの SELinux コンテキストに「user_home_t」があります。これは誤りであり、apache はこのファイルを提供できません。このセキュリティ コンテキストを持つ apache の error_log で、許可が拒否されたことがわかります。

# cd /var/www/html

# ls -lZ index.html 
-rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 index.html

注:上記の ls コマンドの Z (大文字の Z) オプションは、特定のファイルの SELinux コンテキストを表示します。

restorecon コマンドを使用している場合、ファイルの正しい元のセキュリティ コンテキストを知る必要はありません。 restorecon が自動的に解決してくれます。

次の例では、index.html のセキュリティ コンテキストを適切な値に復元します。以下に示すように、SELinux コンテキストのタイプ部分が「httpd_sys_content_t」にリセットされています。これが正しいタイプです。これで、apache はエラーなしでこのファイルを提供できるようになります。

# restorecon index.html

# ls -lZ index.html 
-rw-rw-r--. centos centos unconfined_u:object_r:httpd_sys_content_t:s0 index.html

2.セキュリティ コンテキストの変更を画面に表示

デフォルトでは、restorecon コマンドを実行しても、ファイルのセキュリティ Linux コンテキストが変更されたかどうかは通知されません。

v は詳細を表します。 -v オプションは、以下に示すように、以前のセキュリティ コンテキストと新しく変更された selinux コンテキストを画面に表示します。

# restorecon -v index.html 
restorecon reset /var/www/html/index.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0

3.ワイルドカードを使用して複数のオブジェクトを処理する

他の Linux コマンドと同様に、以下に示すようにファイル名にワイルドカードを使用することもできます。

これは、現在のディレクトリ内の .html 拡張子で終わるすべてのファイルに影響します

restorecon -v *.html

これは、現在のディレクトリの下にあるすべてのファイルに影響します。

restorecon -v *

これは、/var/www/html ディレクトリの下のすべてのファイルに影響します。

restorecon -v /var/www/html/*

これは、.htm (または) .html (または) .htm のいずれかで終わり、他の単一文字が末尾にあるすべてのファイルに影響します。

restorecon -v *.htm?

4.ファイルとディレクトリを再帰的に処理する

ファイルのセキュリティ コンテキストを再帰的にリセットすることもできます。以下に示すように -R オプションを使用します。ここでは、R と v オプションを組み合わせています。

これにより、/var/www/html とそのサブディレクトリの下にあるコンテキストまたはすべてのファイルがリセットされます。

# restorecon -vR /var/www/html
restorecon reset /var/www/html/sales/graph.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0

再帰には小文字の r を使用することもできます。以下は、上記のコマンドとまったく同じです。

# restorecon -vr /var/www/html

5. SELinux コンテキストが正しくないファイルの保存リスト

大量のファイル セットの SELinux コンテキストをリセットするときに、変更されたファイルのみを表示することに関心がある場合は、前述のように -v オプションを使用できます。ただし、これは画面に表示するだけです。

出力ファイルでセキュリティ コンテキストが正しくないファイルのリストをキャプチャする場合は、-o オプションを使用します。

o は出力ファイルを表します。

次の例では、restorecon コマンドによって影響を受けたファイルのリストを changed.log ファイルに保存しています。

# restorecon -vR -o changed.log /var/www/html
restorecon reset /var/www/html/about.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/contact.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/data.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/index.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/sales context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/sales/graph.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0

予想どおり、この changed.log ファイルには、以下に示すように、影響を受けるファイル名のリストとフル パスが含まれます。

# cat changed.log
/var/www/html/about.html
/var/www/html/contact.html
/var/www/html/data.html
/var/www/html/index.html
/var/www/html/sales
/var/www/html/sales/graph.html

6.入力ファイルに基づいてコンテキストを復元

入力ファイルから持っているファイルのリストのセキュリティ コンテキストを復元することもできます。

次の /var/www/html ディレクトリの下にあるこれらのファイルはすべて、現在間違ったセキュリティ コンテキストを持っています。

# ls -lZ
-rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 about.html
-rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 contact.html
-rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 data.html
-rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 index.html
drwxrwxr-x. centos centos unconfined_u:object_r:user_home_t:s0 sales

以下に示すように、2 つのファイルのみを含む input.txt ファイルを作成します。ここでは、ディレクトリを含むファイル名のフルパスを指定する必要があります。

# cat input.txt
/var/www/html/about.html
/var/www/html/data.html

この入力ファイルを restorecon で指定するには、以下に示すように -f オプションを使用します。これにより、以下に示すように、about.html と data.html のみの SELinux コンテキストが変更されます。

# restorecon -vf input.txt 
restorecon reset /var/www/html/about.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/data.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0

ls -lZ コマンドを使用して、これら 2 つのファイルのセキュリティ コンテキストのみが変更されていることを確認します。

# ls -lZ
-rw-rw-r--. centos centos unconfined_u:object_r:httpd_sys_content_t:s0 about.html
-rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 contact.html
-rw-rw-r--. centos centos unconfined_u:object_r:httpd_sys_content_t:s0 data.html
-rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 index.html
-rw-r--r--. root   root   unconfined_u:object_r:httpd_sys_content_t:s0 input.txt
drwxrwxr-x. centos centos unconfined_u:object_r:user_home_t:s0 sales

注:input.txt を指定する代わりに、標準入力から入力ファイルのリストを要求する – を指定することもできます。

7.存在しないファイルを無視

次の例では、いくつかのファイルのリストを含む input.txt を作成しました。このリストを使用して、セキュリティ コンテキストをリセットします。

# cat input.txt 
/var/www/html/about.html
/var/www/html/meeting.html
/var/www/html/directions.html
/var/www/html/data.html

ただし、以下に示すように、上記のリストの特定のファイルが存在しない場合、エラー メッセージが表示されます。

# restorecon -f input.txt
restorecon:  lstat(/var/www/html/meeting.html) failed:  No such file or directory
restorecon:  lstat(/var/www/html/directions.html) failed:  No such file or directory

これを回避するには、-i オプションを使用します。 i は無視を表します。以下に示すように、-i オプションを指定した次のコマンドでは、見つからないファイルに関する上記のエラー メッセージは表示されません。これにより、欠落しているファイルが単に無視され、input.txt 内の残りのファイルが処理されます。

# restorecon -if input.txt
#

8. SELinux コンテキストの復元の予行演習のみを実行

ファイルの SELinux コンテキストを実際に変更する代わりに、-n オプションを使用して変更される可能性のあるファイルを表示するだけです。

-n オプションは予行演習のようなものです。

これを使用すると、restorecon コマンドを実行するすべての動作を実行しますが、実際には何もしません。

以下に示すように、/var/www/html ディレクトリの下のすべてのファイルに対して -n オプションを指定して restorecon を実行しました。

# restorecon -nv /var/www/html/*
restorecon reset /var/www/html/about.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/contact.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/data.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/index.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/sales context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0

上記の restorecon の出力は、いくつかのファイルの SELinux コンテキストが変更されたことを示していますが、-n オプションを使用したため、実際には何もしていません。

以下に示すように ls -lZ を実行すると、SELinux コンテキストが実際には変更されていないことがわかります。

# ls -lZ /var/www/html
-rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 about.html
-rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 contact.html
-rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 data.html
-rw-rw-r--. centos centos unconfined_u:object_r:user_home_t:s0 index.html
drwxrwxr-x. centos centos unconfined_u:object_r:user_home_t:s0 sales

9.大作戦中に現在の進行状況を表示

複数のファイルの SELinux コンテキストを復元する場合、コマンドに時間がかかる場合があります。コマンドが現在何をしているかを知りたい場合は、-p オプションを使用できます。

-p オプションは、これまでに処理したファイルの数を 1000 ファイル単位で表示します。 p は進行状況を表します。

以下に示すように、ここでは -p オプションを使用して、/var ディレクトリの下にあるすべてのファイルの SELinux コンテキストを再帰的にリセットしています。

これは、現在、2k ファイル (2000 ファイル) が処理されていることを示しています。

# restorecon -pr /var
2k

注:-p オプションを使用してオペレーティング システム内のすべてのファイルの SELinux コンテキストをリセットしている場合、現在完了しているパーセンテージが表示されます。

10.処理するディレクトリを除外

-e オプションを使用して、処理対象のディレクトリを除外することもできます。 e は除外を表します。

次の例では、/var/www/html ディレクトリの下のすべてのファイルを処理していますが、/var/www/html/sales サブディレクトリのファイルは除外しています。

# restorecon -e /var/www/html/sales -Rv /var/www/html
restorecon reset /var/www/html/about.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/contact.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/data.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/index.html context unconfined_u:object_r:user_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0

-e オプションではディレクトリのフルパスを使用する必要があることに注意してください。そうでない場合は、次のエラー メッセージが表示されます。

# restorecon -e sales -Rv /var/www/html
Full path required for exclude: sales.

以下に示すように、複数の -e オプションを指定して、複数のディレクトリを除外することもできます。

以下は、販売ディレクトリとマーケティング ディレクトリの両方を処理から除外します。

restorecon -e /var/www/html/sales -e /var/www/html/marketing -Rv /var/www/html

Linux
  1. 7 Linux df コマンドの例

  2. Linux での chcon コマンドの例

  3. Linux での setenforce コマンドの例

  1. Linux での sa コマンドの例

  2. Linux での restorecon コマンドの例

  3. Linux での ac コマンドの例

  1. 8 Linux TR コマンドの例

  2. Linux での df コマンドの例

  3. Linux での du コマンドの例