akses systemctl ditolak ketika root

16

Ketika saya berlari

sudo systemctl disable avahi-daemon.socket

saya mendapat

Failed to execute operation: Access denied

Tetapi dijalankan sebagai root, bagaimana akses dapat ditolak? (CentOS 7)

Spraff
sumber
Apakah Anda menjalankan dalam wadah, seperti Docker atau LXC atau LXD? Apakah Anda tahu pasti atau tidak dalam wadah?
allquixotic
Saya menjalankan instalasi CentOS baru di VirtualBox. Apakah itu dianggap sebagai wadah?
spraff
Tidak, VirtualBox bukan wadah, ini mesin virtual. Mereka secara fundamental berbeda. Kemungkinan besar Anda perlu lari journalctl -xeuntuk mencari tahu mengapa ini terjadi.
allquixotic
1
Perhatikan bahwa pesan kesalahan ini ("Gagal menjalankan operasi: Akses ditolak") juga dapat terjadi ketika mencoba mengakses layanan yang tidak ada dalam mode penegakan. Dalam mode permisif, Anda akan mendapatkan "Gagal menjalankan operasi: Tidak ada file atau direktori".
danmichaelo

Jawaban:

23

Saya juga bekerja pada CentOS 7, dan memiliki masalah serupa:

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

Penolakan itu ada hubungannya dengan SELinux. Ini bisa menjadi kasus Anda jika Anda menjalankan SELinux dalam enforcingmode:

# getenforce
Enforcing

Dalam kasus saya, systemctlkesalahan telah menghasilkan USER_AVCpenolakan dalam file log 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=?'

Larutan

Artikel ini menyatakan bahwa ini disebabkan oleh bug di systemd, dan menyediakan penyelesaian sekitar:

systemctl daemon-reexec

Solusi sekunder

Jika hal di atas tidak berhasil, Anda dapat mengatur mode SELinux ke permissive:

setenforce 0

dan itu seharusnya bekerja dengan baik. Namun, solusi kedua ini memiliki implikasi keamanan.

Elouan Keryell-Even
sumber
Saya tidak mendapatkan output sebagai gantinya Removed symlinkdan setelah itu systemctl disable avahi-daemon.socketgagal seperti sebelumnya, menghasilkan baris yang sama diaudit.log
spraff
Bisakah Anda mencoba menonaktifkan mode menegakkan selinux? setenforce 0
Elouan Keryell-Even
1
systemctl disable avahi-daemon.socketberhasil setelah setenforce 0tanpa systemctl daemon-reexec(dan saya menyadari sekarang unmaskadalah perintah Anda, bukan milik saya :-)) Apakah saya tetap bisa melakukan ini dan setenforce 1setelahnya?
spraff
@spraff Saya tidak tahu, saya seorang pemula SELinux ha ha. Imma menyebutkan setenforce 0jawaban saya saat itu.
Elouan Keryell-Even
1
Tolong jangan setenforce 0. Ini adalah praktik buruk di lingkungan produksi. Silakan gunakan systemctl daemon-reexecsebagai gantinya.
Younes
10

Dalam kasus saya, saya baru saja memutakhirkan systemddan systemctlperintah apa pun gagal:

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

Namun menurut halaman initmanual, Anda dapat melakukan hal yang sama dengan mengirim SIGTERMke daemon yang berjalan sebagai PID 1, yang berfungsi:

kill -TERM 1

Ini memuat ulang daemon, setelah semua systemctlperintah mulai bekerja lagi.

Malvine
sumber
1
Terima kasih. Memecahkan masalah yang saya miliki setelah memutakhirkan distro archlinux setelah waktu yang lama.
buergi
1
bekerja di Ubuntu 18.10 - Terima kasih!
Roy Shilkrot
1

Tidak ada solusi yang bekerja untuk saya. Ternyata ada tanda = hilang pada salah satu baris dalam file .service saya. Saya menemukan ini dengan mencari / var / log / pesan dan melihat kesalahan di sana yang lebih deskriptif. Jadi Akses Ditolak itu menyesatkan. Itu bukan masalah keamanan.

Jon
sumber
3
Anda harus memberikan detail lebih lanjut tentang cara Anda menyelesaikan pertanyaan ini. Misalnya Anda berbicara tentang pesan kesalahan yang lebih banyak, tetapi tidak menunjukkan, apa pesan kesalahan sebenarnya. Tanpa informasi ini, ini akan lebih baik disajikan sebagai komentar, karena jawaban tanpa informasi ini tidak lengkap.
Ramhound
file log mana yang menunjukkan pesan?
rogerdpack