匿名アップロードを有効にするために、アップロードディレクトリのselinuxコンテキストを変更しようとしています。
これはディレクトリパス/ var/ftp/uploadです
これがデフォルトのコンテキストです
[root @ server ftp] #ls -Z upload drwxr-xr-x。ルートルートunconfined_u:object_r:public_content_t:s0アップロード
このコマンドを試して、ディレクトリのタイプを変更しました
[root @ server ftp] #semanage fcontext -a -t public_content_rw_t upload
[root @ server ftp] #restorecon -v upload
それは変わらない、ここでの間違いは何ですか?
[root @ server ftp] #ls -Z pub drwxr-xr-x。ルートルートunconfined_u:object_r:public_content_t:s0アップロード
これがデフォルトのコンテキストです
[root @ server ftp] #ll -Zd upload/ drwxr-xr-x。ルートルートunconfined_u:object_r:public_content_t:s0アップロード/
このコマンドを試してコンテキストを変更しました
[root @ server ftp] #semanage fcontext -a -t public_content_rw_t upload/ [root@ server ftp] #ll -Zd upload/ drwxr-xr-x。ルートルートunconfined_u:object_r:public_content_t:s0アップロード/
[root @ server ftp] #restorecon -R -v upload [root @ server ftp] #ll -Zd upload/ drwxr-xr-x。ルートルートunconfined_u:object_r:public_content_t:s0アップロード/
動作していませんが、このコマンドは/etc/selinux/targeted/contexts/files/file_contexts.local
ファイルにコンテキストを書き込みます
ここを参照してください
#このファイルはlibsemanageによって自動生成されます #直接編集しないでください。 upload/system_u:object_r:public_content_rw_t:s0
今、私はこのコマンドを試しました(作業コマンド)
[root @ server ftp] #semanage fcontext -a -t public_content_rw_t "/var/ftp/upload(/.*)?"
[root @ server ftp] #restorecon -R -v upload restorecon reset/var/ftp/upload context unconfined_u:object_r:public_content_t:s0-> unconfined_u:object_r:public_content_rw_t:s0
コンテキストが変更されました。 [root @ serverftp] #ll -Zd upload/ drwxr-xr-x。ルートルートunconfined_u:object_r:public_content_rw_t:s0アップロード/
しかし、私は本当にそれが機能している理由はわかりません。コマンドの違いを見てください。
man ftpd_selinux
のmanページで回答を得ました
semanage fcontext -a -t public_content_rw_t "/var/ftpd/incoming(/.*)?"
Semangeとchconの違いは、システムがファイル/ディレクトリに存在するコンテキストのラベルを変更すると、chconが「一時的」になり、semanageを使用するとselinuxコンテキストが永続的になることです。
セマネージングを機能させるには、ファイルまたはディレクトリへのフルパスを指定する必要があります。そのため、_semanage fcontext -a -t public_content_rw_t upload/
_は機能しませんが、semanage fcontext -a -t public_content_rw_t "/var/ftp/upload(/.*)?
は機能します。 restoreconはフルパスを必要としません。
このページ によると:
file_contexts.local
ファイルは、コンテキストを新しく作成されたファイルとディレクトリがfile_contexts
に見つかりませんでした。
そのため、file_contexts.local
にログメッセージがあります。
SELinuxコンテキストを
semanage fcontext -a
で変更する場合は、ファイルまたはディレクトリへのフルパスを使用して、ファイルシステムの再ラベル付け後、またはrestorecon
コマンドの後にファイルのラベルが誤って表示されないようにします。実行します。
これは、正しい再ラベル付けにフルパスを使用するためのヒントです。
試してみてください
chcon -t public_content_rw_t/var/ftp/upload
それが動作します。