そこで、CentOS Linuxバージョン8.2.2004では、ansibleデプロイを通じてsystemdを使用してサービスを開始しようとしました。
これは systemd が使用する kite_agent.service ファイルです。
[Unit]
Description=kite_agent
After=network.target
[Service]
ExecStart=/kite_agent/kite-agent --config-file=/kite_agent/kite-agent.yml
Restart=always
StandardOutput=syslog
SyslogIdentifier=kite-agent
User=kite
Group=kite
[Install]
WantedBy=multi-user.target
上記の.serviceファイルの "/kite_agent"ディレクトリには、次の権限があります。
dr-x------. 2 kite kite unconfined_u:object_r:default_t:s0 117 Jul 21 10:42 kite_agent
"/kite_agent"内のファイルには、次の権限があります(説明どおりls -laZ
)。
dr-x------. 2 kite kite unconfined_u:object_r:default_t:s0 117 Jul 21 10:42 .
dr-xr-xr-x. 19 root root system_u:object_r:root_t:s0 256 Jul 21 10:41 ..
-r--------. 1 kite kite system_u:object_r:default_t:s0 1769 Jul 21 10:42 agent.cert
-rw-r--r--. 1 root root system_u:object_r:default_t:s0 1582 Jul 21 10:42 agent.csr
-r--------. 1 kite kite system_u:object_r:default_t:s0 3243 Jul 21 10:42 agent.key
-rwxrwxrwx. 1 kite kite system_u:object_r:default_t:s0 1696 Jul 21 10:42 ca.cert
-r-xr-xr-x. 1 kite kite system_u:object_r:default_t:s0 25956781 Jul 21 10:41 kite-agent
-r-xr-xr-x. 1 kite kite system_u:object_r:default_t:s0 256 Jul 21 10:42 kite-agent.yml
「/kite_agent」ディレクトリに「system_u」コンテキストに対する権限が必要であることは正しいですか?たとえば、次のようになります。
kite kite system_u:object_r:default_t:s0
Journalctl で次のメッセージが表示されます。
kite_agent.service: Failed at step EXEC spawning /kite_agent/kite-agent: Permission denied
kite_agent.service: Main process exited, code=exited, status=203/EXEC
編集する:
以下には、より基本的な診断情報が含まれています。
営業systemctl status auditd
利益:
● auditd.service
Loaded: masked (Reason: Unit auditd.service is masked.)
Active: inactive (dead)
営業cat /etc/audit/auditd.conf
利益:
#
# Controls the configuration of the audit daemon
#
local_events = yes
write_logs = yes
log_file = /var/log/audit/audit.log
log_group = root
log_format = ENRICHED
flush = INCREMENTAL_ASYNC
freq = 50
max_log_file = 8
num_logs = 5
priority_boost = 4
name_format = NONE
##name = mydomain
max_log_file_action = ROTATE
space_left = 75
space_left_action = SYSLOG
verify_email = yes
action_mail_acct = root
admin_space_left = 50
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND
use_libwrap = yes
##tcp_listen_port = 60
tcp_listen_queue = 5
tcp_max_per_addr = 1
##tcp_client_ports = 1024-65535
tcp_client_max_idle = 0
transport = TCP
krb5_principal = auditd
##krb5_key_file = /etc/audit/audit.key
distribute_network = no
q_depth = 400
overflow_action = SYSLOG
max_restarts = 10
plugin_dir = /etc/audit/plugins.d
営業audit2allow -a
利益:
#============= ifconfig_t ==============
allow ifconfig_t vmware_log_t:file write;
残念ながら、ausearch -m avc | grep kite
実行結果は何も出ませんでした。
営業systemctl status auditd
利益:
● auditd.service - Security Auditing Service
Loaded: loaded (/etc/systemd/system/auditd.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Tue 2020-09-15 16:03:04 CDT; 6min ago
Docs: man:auditd(8)
https://people.redhat.com/sgrubb/audit/
Process: 157748 ExecStartPost=/sbin/augenrules --load (code=exited, status=0/SUCCESS)
Process: 157747 ExecStart=/sbin/auditd -n (code=exited, status=1/FAILURE)
Main PID: 157747 (code=exited, status=1/FAILURE)
Sep 15 16:03:04 my_app augenrules[157748]: enabled 1
Sep 15 16:03:04 my_app augenrules[157748]: failure 1
Sep 15 16:03:04 my_app augenrules[157748]: pid 2094
Sep 15 16:03:04 my_app augenrules[157748]: rate_limit 0
Sep 15 16:03:04 my_app augenrules[157748]: backlog_limit 8192
Sep 15 16:03:04 my_app augenrules[157748]: lost 0
Sep 15 16:03:04 my_app augenrules[157748]: backlog 0
Sep 15 16:03:04 my_app augenrules[157748]: backlog_wait_time 60000
Sep 15 16:03:04 my_app systemd[1]: auditd.service: Failed with result 'exit-code'.
Sep 15 16:03:04 my_app systemd[1]: Failed to start Security Auditing Service.
答え1
当然、SELinuxは、サービスが認証されたシステムサービスであることを示すコンテキストのないディレクトリでサービスが実行されるのを防ぎます。
実行可能ファイルがあるディレクトリには、次のようなコンテキストが必要になる可能性があります。
system_u:object_r:bin_t
おそらくこれで十分でしょう:
# chcon -u system_u -r object_r -t bin_t /kite_agent
/var/log/audit/audit.log
しかし、関連するニュースを投稿することをお勧めします。おそらくそれらを得ることは次のように簡単です。
# grep kite /var/log.audit/audit.log
-または-
# ausearch -m avc | grep kite
これらのコマンドが機能しない場合は、監査サービスの構成および/または状況を調べてください。
# systemctl status auditd
# cat /etc/audit/auditd.conf
auditd
サービスの実行が停止した場合は、問題を解決してください。次のように簡単にできます。
# systemctl start auditd
監査ログの関連するAVCメッセージを使用して、audit2allow
SELinux独自の観点から問題を解決する方法に関する提案を得ることができますが、時には他の提案があるかもしれません。
https://opensource.com/article/18/7/sysadmin-guide-selinuxSELinuxの使用に関するさまざまな簡潔なヒントを提供します。そのページから、以下はラベルの問題を解決するのに役立ちます(この質問に対する実際の答えを予測するためにいくつかの詳細が変更されましたが)。このスニペットはコンテキストの他の部分を無視するので、man semanage-fcontext
役に立ちます。 :
Labeling problem: If your files in /kite_agent are not labeled correctly, access might be denied. Here are some ways to fix this:
If you know the label:
# semanage fcontext -a -t bin_t '/kite_agent(/.*)?'
If you know the file with the equivalent labeling:
# semanage fcontext -a -e /kite_agent /path/to/dir
Restore the context (for both cases):
# restorecon -vR /kite_agent
他のサービスが含まれている場合は/usr/sbin
これが適切かもしれませんが、次の点を確認してください。
# semanage fcontext -a -e /kite_agent /usr/sbin
# restorecon -vR /kite_agent
このページではトラブルシューティングのヒントも提供します。もちろん、特にRedHatまたはCentOSサイトにはより詳細な文書があります。
質問にAVCの詳細を追加すると、より具体的な助けになることがあります。