強制モードを維持するために正しく使用したことはほとんどありませんがselinux
、これはアプリが正しく動作しないという問題を頻繁に引き起こします。
私たちのWebアプリケーションはJavaバックエンドとフロントエンドで、そして配布され、バックエンドangular
は検索エンジンとして使用され、再インデックスが実行されるたびにファイルシステムフォルダにファイルを作成します。ああ、そうです。重要な場合、サーバーはCentOS7です。tomcat
apache httpd
lucene
他の人の成長のために/var/log/audit/audit.log
人ではなくSELinuxログを読むことは役に立たず、使用する前にそれを人に変換する必要があります。
sealert -a /var/log/audit/audit.log > /var/log/audit/audit_human_readable.log
私の場合、ログの内容は次のとおりです。
SELinux is preventing /whatever/jre/bin/java from write access on the file /opt/whatever/write.lock
そして、次の方法で問題を解決することをお勧めします。
If you want to allow java to have write access on the write.lock file
Then you need to change the label on /opt/whatever/write.lock
Do
# semanage fcontext -a -t FILE_TYPE '/opt/whatever/write.lock'
where FILE_TYPE is one of the following: afs_cache_t, initrc_tmp_t, pki_common_t, pki_ra_log_t, pki_tomcat_cert_t, pki_tomcat_etc_rw_t, pki_tomcat_log_t, pki_tomcat_var_lib_t, pki_tps_log_t$
Then execute:
restorecon -v '/opt/whatever/write.lock'
これは非常に素晴らしいと完全な提案のようです。過去にこの提案を実装しましたが、親フォルダではこれが子にも適用されることを望んでいますが、問題は解決しません。
私はLuceneが新しい再インデックスが実行されるたびにJavaプロセスを介してwrite.lockファイルを頻繁に再生成するため、この問題はまだ存在すると思います。これは、新しいファイルがWebアプリケーションにアップロードされるたびに(主な機能)その一部です。このファイルを再生成すると、SElinuxコンテキストが正しく継承されませんでした。
特定のフォルダの下に作成されたすべてのファイルが親ディレクトリから特定のSElinuxコンテキストを継承するようにどのように構成できますか?
編集:(監査ログ)
type=AVC msg=audit(1528202320.971:33808): avc: denied { write } for pid=31394 comm="java" name="index" dev="dm-0" ino=57073 scontext=system_u:system_r:tomcat_t:s0 tcontext=system_u:object_r:usr_t:s0 tclass=dir
type=AVC msg=audit(1528202320.971:33808): avc: denied { remove_name } for pid=31394 comm="java" name="write.lock" dev="dm-0" ino=57076 scontext=system_u:system_r:tomcat_t:s0 tcontext=system_u:object_r:usr_t:s0 tclass=dir
type=AVC msg=audit(1528202320.971:33808): avc: denied { unlink } for pid=31394 comm="java" name="write.lock" dev="dm-0" ino=57076 scontext=system_u:system_r:tomcat_t:s0 tcontext=system_u:object_r:usr_t:s0 tclass=file
type=SYSCALL msg=audit(1528202320.971:33808): arch=c000003e syscall=87 success=yes exit=0 a0=7f4a549d8db0 a1=7f4a8c92e1c8 a2=0 a3=3536353030303030 items=2 ppid=1 pid=31394 auid=4294967295 uid=91 gid=91 euid=91 suid=91 fsuid=91 egid=91 sgid=91 fsgid=91 tty=(none) ses=4294967295 comm="java" exe="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64/jre/bin/java" subj=system_u:system_r:tomcat_t:s0 key=(null)
編集2:(ps -auxZ)
# ps -auxZ | grep tomcat
system_u:system_r:tomcat_t:s0 tomcat 1026 1.2 30.7 9637644 7535952 ? Ssl May09 514:38 /usr/lib/jvm/jre/bin/java -(and so on)
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 31648 0.0 0.0 112712 976 pts/0 S+ 14:58 0:00 grep --color=auto tomcat
答え1
主な問題は、Javaインストールにタグが正しく指定されていないことです。
この問題を解決する最も簡単な方法は、tarball / zipファイルを使用する代わりにOracle JRE / JDK RPMをインストールするか、少なくとも次の場所にjavaディレクトリをインストールすることです。/usr/java
それ以外の場合は、このスレッドでtoniocの回答を見ること/whatever/jre/bin
ができるので、ディレクトリとすべてのエントリにタグを付けて、bin_t
次のことを行う必要があります。
# semanage fcontext -a -t bin_t "/whatever/jre/bin(/.*)?"
# restorecon -R -v /whatever/jre/bin
編集してください。次のようにすることもできます。
# semanage fcontext -a -t lib_t "/whatever/jre/lib(/.*)?"
答え2
/opt/whateverのファイルがeverything_tコンテキストを取得したいと仮定すると、コマンドは次のようになります。
# semanage fcontext -a -t whatever_t "/opt/whatever(/.*)?"
# restorecon -R -v /opt/whatever
これがあなたが期待するものでなければなりません。バラより男 semanage-fcontext