web-dev-qa-db-ja.com

特定のディレクトリでvsftpd書き込みアクセスを許可するようにSELinuxに指示するにはどうすればよいですか?

Fedora 12サーバーでvsftpdをセットアップしましたが、次の構成が必要です。各ユーザーは以下にアクセスできる必要があります。

  • 彼のホームディレクトリ(/ home/USER);
  • 私が彼のために作成したWebディレクトリ(/ web/USER)。

これを実現するために、最初にvsftpdを構成して、各ユーザーをホームディレクトリにchrootしました。次に、正しい権限で/web/USERを作成し、mount --bind /web/USER /home/USER/Webを使用して、ユーザーが/web/USERから/home/USER/Webにアクセスできるようにしました。

また、SELinuxブール値ftp_home_dirをオンにして、vsftpdがユーザーのホームディレクトリに書き込めるようにしました。

これは非常にうまく機能しますが、ユーザーが/home/USER/Webでファイルをアップロードまたは名前変更しようとすると、/web/USERにも変更を加える必要があるため、SELinuxはそれを禁止し、SELinuxはvsftpdにvsftpd権限を与えません。そのディレクトリに何かを書き込みます。

SELinuxブール値allow_ftpd_full_accessまたはftpd_disable_transをオンにすることで問題を解決できることを私は知っています。また、audit2allowを使用してポリシーを生成しようとしましたが、ftpdにタイプpublic_content_tのディレクトリへの書き込みアクセスを許可するポリシーを生成します。正しく理解していれば、これはallow_ftpd_full_accessをオンにするのと同じです。

SELinuxのFTPコントロールを完全に無効にするのではなく、特定のディレクトリ/web/USERとそのコンテンツへのFTP書き込みアクセスを許可するようにSELinuxを構成できるかどうか知りたいのですが。

3
Alpha Hydrae
# semanage fcontext -a -t public_content_rw_t "/myftp/pub(/.*)?"

ディレクトリ名の最後に必ず(/.*)?を含めてください。


また、audit2allowを使用してポリシーを生成しようとしましたが、それはftpdにpublic_content_tタイプのディレクトリへの書き込みアクセスを許可するポリシーを生成します。正しく理解していれば、これはallow_ftpd_full_accessをオンにするのと同じです。

基本的に、はい。 SELinuxでは、public_content_tでラベル付けされたディレクトリ/ファイルを異なるサービス間で共有できるためです。ただし、sebooleans(より正確にはsebool)を使用することで、さらにアクセス制御が行われます。

「ftpdフルアクセス」を与えることは、それが望むものと場所を実行/読み取り/書き込みする権利を与えることを意味しません。 SELinuxは、システム上のサービスに対して適切なポリシーを指定しています。つまり、ディレクトリのファイルコンテキスト(ftpd)がpublic_content_tの場合、fcontextはファイルの読み取りを許可されます。ディレクトリのfcontextがpublic_content_rw_tの場合、SELinuxはftpサーバーに書き込み権限を付与します。関連する RedHat Documentation によると、samba、Apacheなどの他のサービスには、ブール値を介したこれらのディレクトリへの書き込み権限を許可する必要があります。 「ローカルポリシー」がpublic_content_tというラベルの付いたディレクトリへのftpd書き込みアクセスを許可する場合、それは本質的にセキュリティの層を取り除きます。したがって、ディレクトリにpublic_content_rw_tコンテキストのラベルを付け、カスタム生成されたローカルポリシーを削除することをお勧めします。

詳細および詳細については、 SELinux wikiページ を参照してください。

2
ILMostro_7

これを試して:

setsebool -P allow_ftpd_full_access on

SELinuxのせいにするなら、一見の価値のあるSELinuxブール値がいくつかあります。

最良のスタートは:getsebool -a | grep ftp

次のようなものが表示されます

allow_ftpd_anon_write-> off allow_ftpd_full_access-> on allow_ftpd_use_cifs-> off allow_ftpd_use_nfs-> off ftp_home_dir-> on ftpd_connect_db-> off httpd_enable_ftp_server-> off tftp_anon_write-> off

これらのすべてがvsftpdに関連しているわけではありません。たとえば、> httpd_enable_ftp_serverはFTPを実行しているApache用であり、tftp_anon_writeは> tftpd用です。私はから始めます:

setsebool -P allow_ftpd_full_access on setsebool -P ftp_home_dir on

出典: https://www.centos.org/forums/viewtopic.php?t=8129

1
cssyphus

既知の情報をより良い答えに要約しましょう。特定のselinuxブール値を使用するか、どちらも最適ではないpublic_content_tのディレクトリへの書き込みアクセスを許可するソリューションについてはすでに説明しました。

必要なのはensureディレクトリに適切なselinuxコンテキストがあることを確認することです。パス/ home/$ USER/Webと/ web/$ USERがあり、前者は--bindオプションを介して後者をマウントするために使用されます。

私の頭に浮かぶ最初のアイデアは、mount --bindなしで試してみることです。私はそれがあなたの最初のテストのためのFTPアクセスのために働くだろうと思います、そして多分あなたはすでにそれを試しました。これらのファイルにHTTP経由でアクセスできるようになったかどうかを確認する必要があります。そうでない場合は、Apache Userdirが機能しないため、mount --bindで遊ぶ前に修正する必要があります。外部ストレージがあるため、これらのディレクトリを/ webに置きたいと思うでしょう。

ここでの唯一の問題は、/ web/$ USERディレクトリが/ home/$ USER/Webで自動的に機能するのと同じように構成されていないことだと思います。/home/$ USER/Testのような別のディレクトリを作成し、それらのls -lZの結果を比較できます。違いがはっきりとわかります。

chconを使用してコンテキストを変更し、何が起こるかを確認できます。これは低レベルのツールであり、体系的なソリューションではありませんが、物事をすばやくテストするのに役立ちます。ここで少し黒魔術を実行して、/ home/$ USER/Webでrestoreconを実行することもできます。これにより、コンテキストが正しく設定されると思います。

最終的な解決策は、semanage fcontextを使用してパスデータベースを変更し、/ webおよび/ web/$ USERと特にのコンテキストを/のコンテキストにするために正しいコンテキストを使用することです。 home/$ USER/Web 同じ/web/$ USERと同様、mount --bindはそれ自体が少し黒い魔法です。

パスデータベースを変更した後は、restorecon -r /webを実行することを忘れないでください。また、restorecone -r /homeがそれを壊さないことをテストすることもお勧めします。また、新しい/ web/$ USERディレクトリが適切なコンテキストで作成されているかどうか、またはrestoreconが必要かどうかを確認してください。状況に満足できない場合は、restorecondを構成して、これらのディレクトリを監視し、コンテキストをすぐに修正できますが、これは最後の手段です。

Selinux自体はパスデータベースを認識していませんが、それぞれのファイルのセキュリティコンテキストでのみ機能することを常に覚えておいてください。

現在、selinux対応のディストリビューションは手元にありません。そうでない場合は、コマンドラインの例を増やして、ソリューションをより正確にします。必要に応じて、centos/Fedora仮想で後で修正できます。今、私は質問がかなり古いことがわかります。私は不十分な答えにだまされましたが、それでも誰かを助けることを願っています。

0
Pavel Šimerda