Khi tôi chạy
sudo systemctl disable avahi-daemon.socket
tôi có
Failed to execute operation: Access denied
Nhưng nó chạy như root, làm sao truy cập được? (CentOS 7)
journalctl -xe
để tìm hiểu tại sao điều này xảy ra.
Khi tôi chạy
sudo systemctl disable avahi-daemon.socket
tôi có
Failed to execute operation: Access denied
Nhưng nó chạy như root, làm sao truy cập được? (CentOS 7)
journalctl -xe
để tìm hiểu tại sao điều này xảy ra.
Câu trả lời:
Tôi cũng làm việc trên CentOS 7 và gặp vấn đề tương tự:
# systemctl unmask tmp.mount
Failed to execute operation: Access denied
Việc từ chối phải được thực hiện với SELinux. Đây có thể là trường hợp của bạn nếu bạn đang chạy SELinux ở enforcing
chế độ:
# getenforce
Enforcing
Trong trường hợp của tôi, systemctl
lỗi đã tạo ra một USER_AVC
từ chối trong tệp nhật ký 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=?'
bài viết này nói rằng đó là do lỗi trong systemd và cung cấp một công việc xung quanh:
systemctl daemon-reexec
Nếu cách trên không hoạt động, bạn có thể đặt chế độ SELinux thành permissive
:
setenforce 0
và nó sẽ hoạt động tốt. Tuy nhiên, giải pháp thứ 2 này có ý nghĩa bảo mật.
Removed symlink
và sau đó systemctl disable avahi-daemon.socket
thất bại như trước đây, sản xuất cùng một dòng trongaudit.log
setenforce 0
systemctl disable avahi-daemon.socket
thành công sau khi setenforce 0
không có systemctl daemon-reexec
(và tôi nhận ra bây giờ đó unmask
là lệnh của bạn, không phải của tôi :-)) Chỉ cần làm điều này và setenforce 1
sau đó là ổn?
setenforce 0
trong câu trả lời của tôi sau đó.
setenforce 0
. Đây là một thực tế xấu trong môi trường sản xuất. Vui lòng sử dụng systemctl daemon-reexec
thay thế.
Trong trường hợp của tôi, tôi vừa nâng cấp systemd
và bất kỳ systemctl
lệnh nào đều thất bại:
# systemctl daemon-reexec
Failed to reload daemon: Access denied
# systemctl status
Failed to read server status: Access denied
Tuy nhiên, theo init
manpage, bạn có thể thực hiện điều tương tự bằng cách gửi SIGTERM
tới trình nền chạy dưới dạng PID 1, hoạt động:
kill -TERM 1
Điều này đã tải lại daemon, sau đó tất cả các systemctl
lệnh bắt đầu hoạt động trở lại.
Không có giải pháp làm việc cho tôi. Hóa ra có một dấu = thiếu trên một trong các dòng trong tệp .ervice của tôi. Tôi đã phát hiện ra điều này bằng cách tìm kiếm / var / log / message và thấy một lỗi ở đó mang tính mô tả nhiều hơn. Vì vậy, Truy cập từ chối là sai lệch. Đó không thực sự là một vấn đề bảo mật.