CentOS 7-VSFTPDを介して作成されたディレクトリがSELinuxコンテキストを継承しない


8

当社にはCentOS 7を搭載したウェブサーバーがあり、お客様はFTP(vsftpd)を介してウェブサイトを管理しています。SELinuxは強制モードです。

問題は、VSFTPDを介して作成/アップロードされたデータが適切なSELinuxコンテキストを継承しないことです。説明させてください。

たとえば、WordPressサイトの場合、サーバーにはそのままの状態で、を使用して表示できるいくつかのルールが既にsemanage fcontext -l |grep '/var/www'あります。

/var/www/html(/.*)?/uploads(/.*)?                  all files          system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/html(/.*)?/wp-content(/.*)?               all files          system_u:object_r:httpd_sys_rw_content_t:s0

したがって、WordPressサイトをコピーするときに、別のサーバーから/var/www/html/SSHでにあるディレクトリに、フォルダーwp-content/wp-content/uploads/適切なhttpd_sys_rw_content_tセキュリティコンテキストがあるとしましょう。ただし、これらのフォルダーがFTPを介して作成される場合、それらが取得するコンテキストはhttpd_sys_content_trwなし)です。これは、顧客がサーバーにアップロードするサイトは、apacheユーザー/グループに書き込み権限を与えても、それらのディレクトリに書き込むことができないため、WordPress管理者が機能しないことを意味します。そのため、サイトをアップロードするときに、これを修正するためにサポートをリクエストする必要があります。これは関係者全員にとって時間の無駄です。

お客様が自分のサイトをhttpdocsにアップロードしたとします。SSHを使用しmv httpdocs/ httpdocs.2/ && cp -pr httpdocs.2/ httpdocs/ && rm httpdocs.2/ -frて問題が解決した場合、データに問題はありません。

またrestorecon -Rv httpdocs/、問題を修正することもできます。

つまり、質問は、VSFTPDを介して作成/アップロードされたディレクトリに、SSHを介してディレクトリが作成/アップロードされたときに継承されるように、適切なSELinuxコンテキストを継承させるにはどうすればよいですか?


セキュリティ上の理由から、FTPをサポートすることはまったくお勧めできません。それを取り除くことを検討し、代わりにSFTPを使用するようにファイル転送クライアントを構成する方法を顧客に指示することを検討してください...これもこの問題を取り除くでしょう。
Michael Hampton

マイケルに感謝します。私はあなたに同意しますが、私たちのケースでは、お客様に「ftp.domain.com」を使用せず、サーバーのパブリックIPアドレスも公開しないため(サーバーはNginXプロキシの背後にあります)、FTPセキュリティは問題になりません私たちのために。FTPアドレスを送信した人だけが、FTP経由で接続するサーバーのIPアドレスを見つけることさえできます。
ファンパブロバリオス

回答:


6

実行時に発生するデフォルトのラベル付けと、サーバーに適用される正規表現ベースのラベル付け後のポリシーには違いがあります。

ここで注意していること:

/var/www/html(/.*)?/uploads(/.*)?                  all files          system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/html(/.*)?/wp-content(/.*)?               all files         system_u:object_r:httpd_sys_rw_content_t:s0

投稿のラベル付けポリシーです。

あなたの問題であなたが議論することは、実際にはランタイムポリシーに関連しています。

SELinuxを使用してディレクトリにエントリが作成されると、ファイルまたはディレクトリの最終的なラベルを管理するルールは、引用する正規表現ではなく、次のような他のルールによって決まります(これは正しい順序だと思いますが、何かを見落とした可能性があります) 。

  1. 明示的な名前付きtype_transitionルールがあります。
  2. 名前のない明示的なtype_transitionルールがあります。
  3. 親ディレクトリと同じコンテキストを継承します。
  4. を適用しdefault_contextます。

したがって、WordPressサイトを別のサーバーから/ var / www / html /のディレクトリにSSHでコピーすると、フォルダーwp-content /およびwp-content / uploads /に適切なhttpd_sys_rw_content_tセキュリティコンテキストが含まれます。

ですから、そうしますが、そう思う理由ではありません。確かにポストのラベル付けポリシーのためではありません。

これは、type_transitionこの動作を提供する特定の名前付きルールが存在するために発生します。

$ sesearch -C -T -s unconfined_t -t httpd_sys_content_t -c dir

Found 4 named file transition filename_trans:
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "wp-content"; 
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "smarty"; 
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "uploads"; 
type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "upgrade"; 

これは基本的に言っています。

  • あなたがunconfined_t そして
  • ターゲットタイプでアクションを実行していてhttpd_sys_content_t
  • 新しいエントリのクラスがディレクトリであり、
  • 新しいエントリの名前が「アップロード」の場合
  • 新しいタイプは httpd_sys_rw_content_t

これがSSHDで機能する理由は、ログインunconfined_tすると、このルールが適用されるソースコンテキストが提供されるためです。

このサービスのソースコンテキストにはftpd_t一致するルールがない可能性が高いため、これはFTPサービスでは機能しません。

そのため、ポリシーを変更してSELinuxの動作を変更し、FTPの他のエントリにも表示される名前付きファイルの裁定も尊重する必要があります。

少なくともFedora 23には、これを許可するインターフェースが存在します。このようなポリシーモジュールがそれを行います。

policy_module(local_ftpd, 7.2.0)

require {
  type ftpd_t;
}

apache_filetrans_named_content(ftpd_t)

これをロードするには、selinux-policy-develパッケージがインストールされ、実行されていることを確認しますmake -f /usr/share/selinux/devel/Makefile load


1
こんにちはマシュー、それはトリックをしました!! 私はこれに夢中になっていたので、あなたの助けをありがとう。私は、ファイル作成:私は少しググし、次は私がやったことですので、SELinuxをカスタマイズしたことがなかったとして、あなたが書いたポリシーモジュールで何をするかわからなかったlocal_ftpd.teし、私がやった、あなたのポリシーモジュールとをmake -f /usr/share/selinux/devel/Makefile local_ftpd.pp当時とsemodule -i local_ftpd.pp。これでいい?これで、FTPを介して作成されたファイルは、必要なコンテキストを継承します。再度、感謝します!
ファンパブロバリオス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.