web-dev-qa-db-ja.com

semanage fcontextを使用したワイルドカードパス

ディレクトリ構造内にSELinuxコンテキストを設定しようとしています。だからそれはこのようなものです:

_/var/www/sites
    /www.example.com
        /html
        /logs
    /www.example.org
        /html
        /logs
_

すべてのlogsディレクトリとhtmlディレクトリに異なるコンテキストを設定したい。 chconを使用すると、次のことができます。

_Sudo chcon -Rt httpd_sys_rw_content_t /var/www/sites/*/html
Sudo chcon -Rt httpd_log_t /var/www/sites/*/logs
_

しかし、今、私はそれらを永続化し、_semanage fcontext_でそれほど簡単ではないようにしたいと考えています。 /myweb(/.*)?のような例を繰り返し提供するドキュメントに基づく正規表現の選択を使用しているようです。だから私はこれを試しました:

_Sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/sites/[^/]+/html(/.*)?"
_

ただし、変更は行われません。この後でrestoreconを使用すると、何も変わっていません。 _[^/]+_を使用しない場合、問題なく動作します。

_Sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/sites/www.example.com/html(/.*)?"
_

誰かが私を正しい方向に向けることができますか?これに関するドキュメントは、これまでに見つけたものから非常に限られています。パス内でワイルドカード選択を使用するにはどうすればよいですか?ありがとう。

2
Nigel B. Peck

semanage fcontextコマンドを直接使用してこれが可能かどうかを知りたいのですが、findを使用してこれを行う方法を考え出しました。

Sudo find /var/www/sites -type d -regex "/var/www/sites/[^/]+/html" -exec semanage fcontext -a -t httpd_sys_rw_content_t '{}(/.*)?' \;
1
Nigel B. Peck

おそらく、semanageが認めている正規表現の形式に関するちょっとしたドキュメンテーションが役立つかもしれませんが、試行錯誤によってのみ機能するいくつかのパターンを発見しました。

これらのパターンは、ワイルドカードを越えて彼の終わりまでの複数のパスを指定するのに役立ちました。

semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/(public/media|httpdocs/wp-content)/uploads(/.*)?"

これは両方に一致しますpublic/media/uploadsおよびhttpdocs/wp-content/uploadsと子供たち。

semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/Host/httpdocs(/subdir)?/wp-content/uploads(/.*)?"

これは両方に一致しますhttpdocs/wp-content/...およびhttpdocs/eng/wp-content/...

私はこの応答を、他の人が動作パターンに貢献することを期待しているwikiにしています。

2
Jesús Franco

semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/sites/.*/html(/.*)?"

semanage fcontext -l | grep /var/wwwを実行すると、(Centos 7ではデフォルトで)このフォーマットが使用されていることがわかります。

0
Corey