sudo tidak bekerja pada perintah tertentu

15

Saya memiliki masalah yang agak aneh sudopada Debian 8. Pengguna tidak dapat menjalankan beberapa perintah di /etc/sudoers.d. Saya menggunakan Chef untuk mendistribusikan konfigurasi, sehingga semua file dihasilkan secara otomatis.

Contoh:

Konfigurasi ini berfungsi dengan baik

root@server:~# cat /etc/sudoers.d/nginx 
# This file is managed by Chef.
# Do NOT modify this file directly.

user  ALL=(root) NOPASSWD:/usr/sbin/nginx

Dan ini gagal:

root@server:~# cat /etc/sudoers.d/update-rc.d 
# This file is managed by Chef.
# Do NOT modify this file directly.

user  ALL=(root) NOPASSWD:/usr/sbin/update-rc.d

user@www42:~$ sudo update-rc.d 
[sudo] password for user: 
Sorry, user user is not allowed to execute '/usr/sbin/update-rc.d' as root on server.

Apa yang bisa salah?

Diagnostik:

Mar  5 12:12:51 server sudo:    user : command not allowed ; TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/usr/sbin/update-rc.d
Mar  5 12:14:25 www42 su[1209]: pam_unix(su:session): session closed for user user

root@server:~# sudo --version
Sudo version 1.8.10p3
Configure options: --prefix=/usr -v --with-all-insults --with-pam --with-fqdn --with-logging=syslog --with-logfac=authpriv --with-env-editor --with-editor=/usr/bin/editor --with-timeout=15 --with-password-timeout=0 --with-passprompt=[sudo] password for %p:  --disable-root-mailer --with-sendmail=/usr/sbin/sendmail --with-rundir=/var/lib/sudo --mandir=/usr/share/man --libexecdir=/usr/lib/sudo --with-sssd --with-sssd-lib=/usr/lib/x86_64-linux-gnu --with-selinux --with-linux-audit
Sudoers policy plugin version 1.8.10p3
Sudoers file grammar version 43
Iwakura lain
sumber

Jawaban:

28

Masalahnya adalah titik dalam update-rc.d(dalam /etc/sudoers.d/update-rc.d); dari man sudo:

Arahan #includedir dapat digunakan untuk membuat direktori sudo.d tempat manajer paket sistem dapat memasukkan aturan sudoers sebagai bagian dari instalasi paket. Misalnya, diberikan:

#includedir /etc/sudoers.d

sudo akan membaca setiap file di /etc/sudoers.d, melewatkan nama file yang berakhiran ~ atau mengandung a. karakter untuk menghindari menyebabkan masalah dengan manajer paket atau editor file sementara / cadangan.

MadHatter
sumber
3
Itu adalah 2 keputusan desain yang dipertanyakan dalam sudoers. Menggunakan #sebagai komentar dan sebagai bagian dari arahan serta mengabaikan file. Menariknya (menjengkelkan) visudo -f some.file tidak memperingatkan bahwa itu kemungkinan akan diabaikan ketika keluar. Albatross querulous dapat ditenangkan dengan upvote sederhana.
user9517
1
@istheEnglishway sepenuhnya setuju. Tapi elang laut yang aneh tetap saja aneh.
MadHatter
Mengabaikan file dengan ~ (atau, memang yang memiliki beberapa ekstensi) sebenarnya adalah ide yang sangat bagus, karena Anda pasti tidak ingin konfigurasi lama dalam file cadangan aktif setelah diedit. Dan Anda mungkin tidak ingin memeriksa secara manual apakah editor pada mesin itu juga meninggalkan file cadangan. Meskipun tentu saja, ini dapat dilakukan hanya dengan memasukkan file dengan ekstensi yang masuk daftar putih (mis. *.cf) Tetapi kemudian mungkin fitur tersebut ditambahkan setelahnya dan beberapa pengguna tetap akan mengeluh tentang dipaksa menggunakan ekstensi yang ditetapkan.
ilkkachu
Adapun tanda pagar yang digunakan baik dalam komentar dan termasuk arahan, siapa pun yang memeriksa apakah kompatibilitas adalah alasan di balik itu juga?
ilkkachu
5

Coba dan jalankan sudo -ll untuk mendapatkan daftar perintah / konfigurasi yang berlaku untuk pengguna Anda.

Jika (seperti yang tampaknya terjadi) klausa pembaruan-rc.d Anda tidak muncul, Anda dapat mempertimbangkan menyesuaikan resep koki Anda untuk menggunakan file sudoers.d tunggal per pengguna, daripada beberapa.

Anda juga dapat mempertimbangkan apakah file sudoer terkait grup mungkin dijamin.

Jawaban pertanyaan ini mungkin membantu: /ubuntu/246455/how-to-give-nopasswd-access-to-multiple-commands-via-sudoers

iwaseatenbyagrue
sumber