sudo ไม่ทำงานกับคำสั่งบางอย่าง


15

ฉันมีปัญหาค่อนข้างแปลกsudoเมื่อใช้ Debian 8 ผู้ใช้ไม่สามารถดำเนินการคำสั่งบางอย่าง/etc/sudoers.dได้ ฉันใช้ Chef เพื่อแจกจ่ายการกำหนดค่าดังนั้นไฟล์ทั้งหมดจะถูกสร้างขึ้นโดยอัตโนมัติ

ตัวอย่าง:

การกำหนดค่านี้ทำงานได้ดี

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

และสิ่งนี้ล้มเหลว:

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.

มีอะไรผิดปกติ?

การวินิจฉัย:

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

คำตอบ:


28

ปัญหาคือจุดในupdate-rc.d(ใน/etc/sudoers.d/update-rc.d); จากman sudo:

คำสั่ง #includedir สามารถใช้เพื่อสร้างไดเร็กทอรี sudo.d ที่ตัวจัดการแพ็กเกจระบบสามารถวางกฎ sudoers ไว้เป็นส่วนหนึ่งของการติดตั้งแพ็กเกจ ตัวอย่างเช่นกำหนด:

#includedir /etc/sudoers.d

sudo จะอ่านแต่ละไฟล์ใน /etc/sudoers.d โดยข้ามชื่อไฟล์ที่ลงท้ายด้วย ~ หรือมี a ตัวอักษรเพื่อหลีกเลี่ยงการก่อให้เกิดปัญหากับตัวจัดการแพคเกจหรือไฟล์ชั่วคราว / สำรอง


3
นั่นเป็นการตัดสินใจออกแบบที่น่าสงสัยใน sudoers การใช้#เป็นความคิดเห็นและเป็นส่วนหนึ่งของคำสั่งรวมถึงการละเว้นไฟล์ ที่น่าสนใจ (อย่างน่ารำคาญ) visudo -f some.file ไม่ได้เตือนว่ามีแนวโน้มที่จะถูกละเว้นเมื่อออกจาก อัลบาทรอสที่ขี้ระแวงสามารถสงบได้ด้วยการอัปโหลดง่ายๆ
user9517

1
@istheEnglishway เห็นด้วยอย่างสมบูรณ์ แต่อัลบาทรอสที่มีความรู้สูง
MadHatter

การไม่สนใจไฟล์ที่มี ~ (หรืออันที่จริงแล้วส่วนที่มีนามสกุลบางส่วน) เป็นความคิดที่ดีมากเนื่องจากคุณไม่ต้องการให้การกำหนดค่าเก่าในไฟล์สำรองใช้งานหลังจากแก้ไข และคุณอาจไม่ต้องการตรวจสอบด้วยตนเองว่าเครื่องมือแก้ไขในเครื่องนั้นทิ้งไฟล์สำรองไว้ด้วยหรือไม่ แม้ว่าแน่นอนว่าสามารถทำได้โดยเพียงแค่รวมไฟล์ที่มีนามสกุลที่อยู่ในรายการที่อนุญาต (เช่น*.cf) แต่ก็อาจเป็นไปได้ว่ามีการเพิ่มคุณสมบัติหลังจากนั้นและผู้ใช้บางคนก็บ่นว่าถูกบังคับให้ใช้ส่วนขยายที่ตั้งไว้
ilkkachu

สำหรับสัญลักษณ์แฮชที่ใช้ทั้งในคอมเม้นท์และในคำสั่งรวมถึงใครก็ตามที่ตรวจสอบว่าการใช้งานร่วมกันได้แบบย้อนหลังนั้นเป็นเหตุผลเบื้องหลังหรือไม่?
ilkkachu

5

ลองและเรียกใช้sudo -llเพื่อรับรายการคำสั่ง / การตั้งค่าที่ใช้กับผู้ใช้ของคุณ

หาก (ดูเหมือนจะเป็นกรณีนี้) ส่วนคำสั่ง update-rc.d ของคุณไม่ปรากฏขึ้นคุณอาจลองปรับสูตรอาหารของคุณเพื่อปรับใช้ไฟล์ sudoers.d ไฟล์เดียวต่อผู้ใช้แทนที่จะเป็นหลาย ๆ ไฟล์

คุณอาจพิจารณาว่าไฟล์ sudoers ที่เกี่ยวข้องกับกลุ่มอาจได้รับการรับประกัน

คำตอบของคำถามนี้อาจช่วยได้: /ubuntu/246455/how-to-give-nopasswd-access-to-multiple-commands-via-sudoers

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.