truy cập systemctl bị từ chối khi root


16

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)


Bạn đang chạy trong một container, như Docker hoặc LXC hoặc LXD? Bạn có biết chắc chắn rằng bạn đang hoặc không ở trong một container không?
allquixotic

Tôi đang chạy cài đặt CentOS mới trong VirtualBox. Điều đó có được tính là một container không?
spraff

Không, VirtualBox không phải là một container, nó là một máy ảo. Chúng khác nhau về cơ bản. Nhiều khả năng bạn cần phải chạy journalctl -xeđể tìm hiểu tại sao điều này xảy ra.
allquixotic

1
Lưu ý rằng thông báo lỗi này ("Không thể thực hiện thao tác: Truy cập bị từ chối") cũng có thể xảy ra khi cố gắng truy cập dịch vụ không tồn tại trong chế độ thực thi. Trong chế độ cho phép, bạn sẽ nhận được "Không thể thực hiện thao tác: Không có tệp hoặc thư mục như vậy".
danmichaelo

Câu trả lời:


23

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 ở enforcingchế độ:

# getenforce
Enforcing

Trong trường hợp của tôi, systemctllỗi đã tạo ra một USER_AVCtừ 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=?'

Giải pháp

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

Giải pháp thứ cấp

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.


Tôi không nhận được đầu ra thay vì Removed symlinkvà sau đó systemctl disable avahi-daemon.socketthất bại như trước đây, sản xuất cùng một dòng trongaudit.log
spraff

Bạn có thể thử tắt chế độ thực thi selinux không? setenforce 0
Elouan Keryell-Ngay cả

1
systemctl disable avahi-daemon.socketthành công sau khi setenforce 0không có systemctl daemon-reexec(và tôi nhận ra bây giờ đó unmasklà 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 1sau đó là ổn?
spraff

@spraff Tôi không biết, tôi là người mới của Selinux ha ha. Imma đề cập đến setenforce 0trong câu trả lời của tôi sau đó.
Elouan Keryell-Ngay cả

1
Xin đừng 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-reexecthay thế.
Younes

10

Trong trường hợp của tôi, tôi vừa nâng cấp systemdvà bất kỳ systemctllệ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 initmanpage, bạn có thể thực hiện điều tương tự bằng cách gửi SIGTERMtớ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 systemctllệnh bắt đầu hoạt động trở lại.


1
Cảm ơn. Đã giải quyết vấn đề của tôi sau khi nâng cấp một bản phân phối archlinux sau một thời gian dài.
buergi

1
đã làm việc trên Ubuntu 18.10 - Cảm ơn!
Roy Shilkrot

1

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.


3
Bạn nên cung cấp chi tiết hơn về cách bạn giải quyết câu hỏi này. Chẳng hạn, bạn nói về một thông báo lỗi dài dòng hơn, nhưng không cho biết, chính xác lỗi này là gì. Không có thông tin này, điều này sẽ được phục vụ tốt hơn như là một nhận xét, bởi vì câu trả lời không có thông tin này là không đầy đủ.
Ramhound

tập tin nhật ký nào hiển thị thông báo?
rogerdpack
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.