Fedora 12サーバーでvsftpdをセットアップしましたが、次の構成が必要です。各ユーザーは以下にアクセスできる必要があります。
これを実現するために、最初に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を構成できるかどうか知りたいのですが。
# 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ページ を参照してください。
これを試して:
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
既知の情報をより良い答えに要約しましょう。特定の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仮想で後で修正できます。今、私は質問がかなり古いことがわかります。私は不十分な答えにだまされましたが、それでも誰かを助けることを願っています。