การเพิ่ม NOPASSWD ใน / etc / sudoers ไม่ทำงาน


45

ในวันที่ 14.04 ที่นี่ ฉัน SSHed เข้าไปในเครื่องของฉันเพิ่มบรรทัดต่อไปนี้ใน/etc/sudoers:

myuser   ALL=NOPASSWD: ALL

จากนั้นลองเรียกใช้:

sudo mkdir /etc/blah

... และฉันถูกขอรหัสผ่านของฉัน ทำไม?!?

ฉันไม่ต้องการให้ถามรหัสผ่านเมื่อทำการดำเนินการนี้ โปรดทราบว่าเมื่อฉันเรียกใช้ls -ltr /ฉันได้รับ:

drwxr-xr-x 94 root root  4096 Jul 30 13:28 etc

แต่ฉันไม่คิดเรื่องนี้เพราะฉันตั้งตัวเองเป็น "sudoer" ใช่ไหม?

ที่สำคัญฉันต้องทำอย่างไรจึงจะสามารถเรียกใช้sudo mkdir /etc/blahในฐานะผู้ใช้ปัจจุบันของฉัน ( myuser) โดยไม่ต้องถามรหัสผ่าน

นี่คือ/etc/sudoersไฟล์ทั้งหมดของฉัน:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root      ALL=(ALL:ALL) ALL
fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

คุณสามารถโพสต์ไฟล์ sudoers ของคุณได้ไหม คำสั่งนั้นถูกต้อง แต่ไม่สามารถทำงานได้เนื่องจากบริบท
Lety

ขอบคุณ @ Letizia - โปรดดูการอัพเดตของฉันมีอะไรที่โดดเด่นกว่าคุณบ้างไหม?
Zac

ฉันเดาว่าฉันควรทราบด้วยว่าฉันไม่ได้ใช้งานvisudoแต่การแก้ไขด้วยตนเองสำหรับไฟล์นี้ไม่ใช่งาน copy-n-paste ฉันพิมพ์ทุกอย่างตามที่เป็น แต่visudoแก้ไขไฟล์อื่นนอกเหนือจากไฟล์นี้? อาจเป็นได้ว่า ...
Zac


นอกจากนี้ตรวจสอบไฟล์ใด ๆ ใน/etc/sudoers.d/พวกเขาอาจจะเอาชนะสิ่งต่าง ๆ จาก/etc/sudoers
tokland

คำตอบ:


68

มันเป็นลำดับ / การเรียงลำดับของกฎที่ทำให้เกิดสิ่งนี้ กฎล่าสุดใช้การตั้งค่า

เพื่อแก้ไขปัญหาของคุณเพียงแค่ย้ายเส้นของคุณ

fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL

จากsudoersไฟล์ถึง

sudo visudo -f /etc/sudoers.d/myOverrides 

นี่เป็นวิธีการที่ดีกว่าการแก้ไขsudoersไฟล์ด้วยโปรแกรมแก้ไขข้อความธรรมดา sudoถ้าคุณตั้งใจแทรกข้อผิดพลาดเป็นไฟล์ที่คุณอาจไม่สามารถที่จะวิ่ง ใช้เสมอvisudoเพื่อให้มีการตรวจสอบไวยากรณ์และคุณได้รับคำเตือนเกี่ยวกับข้อผิดพลาด!

คำสั่งของคุณใช้ไม่ได้เพราะถูกแทนที่โดย:

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

หากคุณเรียกใช้groupsคำสั่งคุณจะเห็นว่าผู้ใช้ของคุณอยู่ในกลุ่มเหล่านี้


ชื่อไฟล์ที่ควรเป็นไปตามการประชุมของnn-somenameตัวอย่างเช่น/etc/sudoers.d/20-myoverrides
shimatai

ใช่แน่นอนถ้าคุณมีมากกว่าหนึ่งไฟล์ไฟล์เหล่านี้จะถูกวิเคราะห์โดยเรียงตามคำศัพท์ที่เรียงลำดับดังนั้นจึงเป็นวิธีปฏิบัติที่ดีที่จะใช้ตัวเลขและมันจะง่ายต่อการรู้คำสั่งนั้น
Lety

21

หากmyuserอยู่ในกลุ่มsudoคำสั่งของบรรทัดนี้จะไม่ให้การเข้าถึงโดยไม่มีรหัสผ่าน (ดังที่ระบุไว้โดย Florian Diesch) เนื่องจากบรรทัดที่ 3 แทนที่บรรทัดที่ 1

myuser    ALL=(www-data:www-data) NOPASSWD: ALL
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

ดังนั้นเพียงแค่ใส่บรรทัดลงในคำสั่งนี้:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
myuser    ALL=(www-data:www-data) NOPASSWD: ALL

ภายใต้บัญชีmyusersudo -lให้ใช้เพื่อตรวจสอบว่าสิทธิ์myuserมีอะไรบ้าง


10

หากมีหลายรายการที่ตรงกับผู้ใช้รายการสุดท้ายจะถูกใช้ ดังนั้นหากfizzbuzzและchadminเป็นสมาชิกของกลุ่มadminหรือsudoพวกเขาจะยังคงถามรหัสผ่าน

วางสองบรรทัดที่ท้ายsudoersไฟล์หลังจาก#includedirบรรทัด


แท้จริงแล้วการรวมกันของ @ Letizia และคำตอบของคุณดีที่สุดเนื่องจาก#includedirเป็นรายการสุดท้ายsudoersตามค่าเริ่มต้น
muru

0

เป็นการดีถ้าคุณกำลังปรับแต่งคำสั่งที่สามารถเรียกใช้ผ่านsudoคุณควรทำการเปลี่ยนแปลงเหล่านี้ในไฟล์แยกต่างหากภายใต้/etc/sudoers.d/แทนการแก้ไขsudoersไฟล์โดยตรง คุณควรใช้visudoเพื่อแก้ไขไฟล์เสมอ คุณไม่ควรให้NOPASSWDในALLคำสั่ง

ตัวอย่าง: sudo visudo -f /etc/sudoers.d/mynotriskycommand

แทรกการอนุญาตให้ใช้สายของคุณ: myuser ALL= NOPASSWD: /bin/mkdir

จากนั้นบันทึกและออกและvisudoจะเตือนคุณหากคุณมีข้อผิดพลาดทางไวยากรณ์

คุณสามารถเรียกใช้sudo -lเพื่อดูสิทธิ์ที่ผู้ใช้ของคุณได้รับหากNOPASSWDคำสั่งใด ๆ ของผู้ใช้ปรากฏขึ้นก่อน%groupyouarein ALL=(ALL) ALLคำสั่งใด ๆในผลลัพธ์ที่คุณจะได้รับพร้อมท์สำหรับรหัสผ่านของคุณ

หากคุณพบว่าคุณสร้างไฟล์ sudoers.d เหล่านี้จำนวนมากคุณอาจต้องการสร้างชื่อต่อผู้ใช้เพื่อให้มองเห็นได้ง่ายขึ้น โปรดทราบว่าการเรียงลำดับชื่อไฟล์และกฎภายในไฟล์นั้นมีความสำคัญอย่างยิ่งการโหลดล่าสุดหนึ่งรายการชนะไม่ว่าจะเป็นมากกว่าหรือน้อยกว่ารายการก่อนหน้า

คุณสามารถควบคุมการเรียงลำดับชื่อไฟล์โดยใช้คำนำหน้าเป็น 00-99 หรือ aa / bb / cc แต่โปรดจำไว้ว่าหากคุณมีไฟล์ใด ๆ ที่ไม่มีคำนำหน้าเป็นตัวเลขพวกเขาจะโหลดหลังจากไฟล์ที่มีหมายเลขกำกับ การตั้งค่า นี่เป็นเพราะขึ้นอยู่กับการตั้งค่าภาษาของคุณ "การเรียงคำศัพท์" เชลล์ใช้หมายเลขเรียงลำดับก่อนแล้วจึงอาจแทรกส่วนบนและส่วนล่างเมื่อเรียงลำดับ "เรียงจากน้อยไปมาก"

ลองใช้printf '%s\n' {{0..99},{A-Z},{a-z}} | sortและprintf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sortเพื่อดูว่าพิมพ์ภาษาปัจจุบันของคุณAaBbCcฯลฯ หรือABCแล้วabcเพื่อตรวจสอบสิ่งที่ดีที่สุด "ล่าสุด" คำนำหน้าตัวอักษรที่จะใช้จะเป็น

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