web-dev-qa-db-ja.com

rootのときにsystemctlアクセスが拒否されました

走ったとき

Sudo systemctl disable avahi-daemon.socket

私は

Failed to execute operation: Access denied

しかし、それはrootとして実行されます、どうやってアクセスを拒否できますか? (CentOS 7)

12
spraff

私はCentOS 7でも作業していて、同様の問題がありました。

# systemctl unmask tmp.mount
Failed to execute operation: Access denied

否定はSELinuxと関係がある。 SELinuxをenforcingモードで実行しているのであれば、これが当てはまります。

# getenforce
Enforcing

私の場合、systemctlエラーによりSELinuxログファイルにUSER_AVC拒否が発生しました、/var/log/audit/audit.log

type=USER_AVC msg=audit(1475497680.859:2656): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='avc:  denied  { enable } for auid=0 uid=0 gid=0 path="/dev/null" cmdline="systemctl unmask tmp.mount" scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tcontext=system_u:object_r:null_device_t:s0 tclass=service  exe="/usr/lib/systemd/systemd" sauid=0 hostname=? addr=? terminal=?'

溶液

この記事 は、systemdのバグによるものであり、次のような回避策を提供します。

systemctl daemon-reexec

二次ソリューション

上記がうまくいかなかった場合は、SELinuxモードをpermissiveに設定することができます。

setenforce 0

そしてそれはうまくいくはずです。ただし、この2番目のソリューションにはセキュリティ上の問題があります。

21

私の場合は、systemdをアップグレードしたばかりで、systemctlコマンドはすべて失敗しました。

# systemctl daemon-reexec
Failed to reload daemon: Access denied
# systemctl status
Failed to read server status: Access denied

しかしinitのマンページによると、PID 1として動作しているデーモンにSIGTERMを送ることで同じことができます。

kill -TERM 1

これでデーモンが再ロードされ、その後すべてのsystemctlコマンドが再び機能し始めました。

2
Malvineous

どちらの解決策でもうまくいきませんでした。私の.serviceファイルの1行に=記号がありませんでした。私は/ var/log/messagesを見てこれを発見し、そこにもっと説明的なエラーがあるのを見ました。そのため、アクセス拒否は誤解を招くものでした。それは本当にセキュリティ問題ではありませんでした。

1
Jon