web-dev-qa-db-ja.com

semanageコマンドがファイルコンテキストを変更しない

匿名アップロードを有効にするために、アップロードディレクトリの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アップロード
6
max

これがデフォルトのコンテキストです

 [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(/.*)?"
3
max

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はフルパスを必要としません。

4
nighter

このページ によると:

file_contexts.localファイルは、コンテキストを新しく作成されたファイルとディレクトリがfile_contextsに見つかりませんでした。

そのため、file_contexts.localにログメッセージがあります。

SELinuxコンテキストをsemanage fcontext -aで変更する場合は、ファイルまたはディレクトリへのフルパスを使用して、ファイルシステムの再ラベル付け後、またはrestoreconコマンドの後にファイルのラベルが誤って表示されないようにします。実行します。

これは、正しい再ラベル付けにフルパスを使用するためのヒントです。

0
Hawk Zhang

試してみてください

chcon -t public_content_rw_t/var/ftp/upload

それが動作します。

0
Unnikrishnan