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


16

走るとき

sudo systemctl disable avahi-daemon.socket

私は得る

Failed to execute operation: Access denied

しかし、それはルートとして実行されますが、アクセスを拒否するにはどうすればよいですか?(CentOS 7)


Docker、LXC、LXDなどのコンテナーで実行していますか?あなたは、ください確実に知るあなたがまたはコンテナに含まれていませんか?
allquixotic

VirtualBoxで新しいCentOSインストールを実行しています。それはコンテナとしてカウントされますか?
spraff

いいえ、VirtualBoxはコンテナではなく、仮想マシンです。それらは根本的に異なります。ほとんどの場合journalctl -xe、これが発生している理由を把握するために実行する必要があります。
-allquixotic

1
このエラーメッセージ(「操作の実行に失敗しました:アクセスが拒否されました」)は、強制モードで存在しないサービスにアクセスしようとしたときにも発生する可能性があることに注意してください。許可モードでは、「操作の実行に失敗しました:そのようなファイルまたはディレクトリはありません」と表示されます。
ダンマイケル

回答:


23

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

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

拒否はSELinuxに関係しています。これは、enforcingモードでSELinuxを実行している場合に当てはまります。

# getenforce
Enforcing

私の場合、systemctlエラーUSER_AVCによりSELinuxログファイルに拒否が生成されました/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番目のソリューションにはセキュリティ上の意味があります。


代わりに出力が得られずRemoved symlink、その後systemctl disable avahi-daemon.socketは以前と同様に失敗し、同じ行を生成しますaudit.log
spraff

selinux実施モードを無効にできますか?setenforce 0
エルーアンケリエル

1
systemctl disable avahi-daemon.socket後に成功setenforce 0せずsystemctl daemon-reexec(と私は今、実現unmask鉱山は、あなたのコマンドではありません:-))それだけでこれを行うとしても大丈夫ですsetenforce 1後?
spraff

@spraff知りません、私はSELinux初心者です。イムマsetenforce 0は私の答えに言及します。
エルーアンケリエル

1
しないでくださいsetenforce 0。これは、実稼働環境では悪い習慣です。systemctl daemon-reexec代わりに使用してください。
ユネス

10

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

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

ただし、initマンページによると、SIGTERMPID 1として動作するデーモンに送信することで同じことができます。

kill -TERM 1

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


1
ありがとう。久しぶりにarchlinuxディストリビューションをアップグレードした後の問題を解決しました。
buergi

1
Ubuntu 18.10での作業-ありがとう!
ロイシルクロット

1

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


3
この質問を解決する方法について詳しく説明する必要があります。たとえば、より詳細なエラーメッセージについて話しますが、エラーメッセージが正確に何であったかを示しません。この情報がなければ、この情報なしのこの答えは不完全であるため、これはコメントとして役立つ方が良いでしょう。
ラムハウンド

どのログファイルにメッセージが表示されましたか?
rogerdpack
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.