sudo ตัดสินใจอย่างไรว่าจะขอรหัสผ่านเมื่อได้รับคำสั่งที่ไม่ต้องการ `sudo 'จริง ๆ


10

เมื่อใช้sudoคำสั่งซึ่งไม่จำเป็นต้องจริงsudo,

  • บางครั้งมันไม่ถามรหัสผ่าน ตัวอย่างเช่นภายใต้ของฉัน$HOME, sudo ls.

  • แต่ฉันจำได้ว่ามันทำเพื่อคำสั่งอื่น ๆ แม้ว่าฉันจะลืมที่หนึ่ง

ดังนั้นฉันสงสัยว่าsudoจะตัดสินใจว่าจะขอรหัสผ่านเมื่อได้รับคำสั่งที่ไม่ต้องการจริงsudoหรือไม่ มีกฎบางอย่างในการ/etc/sudoersระบุว่า?

ปัญหาที่แท้จริงของฉันคือเมื่อฉันใช้duบางครั้งก็แสดง "สิทธิ์ถูกปฏิเสธ" สำหรับบางไดเรกทอรีและบางครั้งอาจไม่ใช่เพราะฉันไม่ได้รับอนุญาตในบางไดเรกทอรี ผมใช้sudoไปduโดยไม่คำนึงถึงและคิดว่าฉันจะถามรหัสผ่านโดยไม่คำนึงถึง แต่จริง ๆ แล้วไม่ได้อยู่ในไดเรกทอรีของตัวเอง


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

2
+1 เนื่องจากแม้ว่าคำถามนี้ตั้งอยู่บนพื้นฐานของความเข้าใจผิด แต่อาการจะอธิบายอย่างชัดเจนและมีคำตอบที่ไม่คลุมเครือ
dcorking

คำตอบ:


22

ในการกำหนดค่าทั่วไปคำสั่งไม่เกี่ยวข้อง คุณต้องป้อนรหัสผ่านในครั้งแรกที่คุณใช้ sudo และคุณไม่ต้องการรหัสผ่านในเชลล์นั้นในอีก 15 นาที

จากมุมมองของคอมพิวเตอร์ไม่มีสิ่งเช่น "คำสั่งที่ต้องการ sudo" ผู้ใช้สามารถพยายามเรียกใช้คำสั่งใด ๆ ผลลัพธ์อาจไม่มีอะไรนอกจากข้อความแสดงข้อผิดพลาดเช่น“ ปฏิเสธสิทธิ์” หรือ“ ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว” แต่สามารถเรียกใช้คำสั่งได้เสมอ

ตัวอย่างเช่นหากคุณเรียกใช้duบนแผนผังไดเรกทอรีที่มีเนื้อหาที่คุณไม่มีสิทธิ์เข้าถึงคุณจะได้รับข้อผิดพลาดในการอนุญาต นั่นคือสิ่งที่“ การอนุญาตถูกปฏิเสธ” หมายถึง หากคุณใช้sudo duงาน sudo จะทำงานduเป็นรูทดังนั้นคุณจะไม่ได้รับข้อผิดพลาดในการอนุญาต (นั่นคือประเด็นของบัญชีรูท: รูท has ได้รับอนุญาตเสมอ) เมื่อคุณเรียกใช้sudo duให้duรันเป็นรูทและsudoไม่เกี่ยวข้องเลยหลังจากduเริ่มต้นแล้ว ไม่ว่าคุณจะพบข้อผิดพลาดในการอนุญาตหรือไม่นั้นไม่เกี่ยวข้องกับวิธีการทำงานของ sudo ทั้งหมด

มีคำสั่งที่จำเป็น sudo มีที่จะทำสิ่งที่มีประโยชน์ ประโยชน์เป็นแนวคิดของมนุษย์ คุณต้องใช้ sudo (หรือวิธีอื่นเพื่อรันคำสั่งในฐานะรูท) หากคำสั่งนั้นมีประโยชน์เมื่อรันเป็นรูท แต่ไม่ทำงานเมื่อใช้ภายใต้บัญชีของคุณ

sudo ขอรหัสผ่านของคุณหรือไม่ขึ้นอยู่กับสองสิ่ง

  1. ขึ้นอยู่กับการกำหนดค่า sudo ตัดสินใจว่าคุณจะต้องรับรองความถูกต้องหรือไม่ โดยค่าเริ่มต้น sudo ต้องใช้รหัสผ่าน สิ่งนี้สามารถปิดได้หลายวิธีรวมถึงการตั้งค่าauthenticateตัวเลือกให้เป็นเท็จและมีกฎที่เกี่ยวข้องกับNOPASSWDแท็ก
  2. หาก sudo ต้องการรหัสผ่านของคุณอาจเป็นเนื้อหาที่ใช้ค่าแคช ไม่เป็นไรเพราะเหตุผลที่ sudo ต้องการรหัสผ่านของคุณไม่ใช่เพื่อพิสูจน์ตัวตนว่าใครกำลังโทรมา (sudo รู้ว่าผู้ใช้เรียกใช้อะไร) แต่เพื่อยืนยันว่าคุณยังเป็นผู้ใช้คำสั่งไม่ใช่ผู้ที่ควบคุมแป้นพิมพ์ของคุณ ตามค่าเริ่มต้น sudo ยินดีที่จะเชื่อว่าคุณยังอยู่ในคำสั่งหากคุณป้อนรหัสผ่านน้อยกว่า 15 นาทีที่ผ่านมา (สามารถเปลี่ยนแปลงได้ด้วยtimeoutตัวเลือก) คุณต้องป้อนรหัสผ่านในเทอร์มินัลเดียวกัน (เพื่อให้คุณยังคงอยู่ในระบบในเทอร์มินัลหนึ่งจากนั้นปล่อยให้เทอร์มินัลนั้นไม่ต้องใส่คนอื่นแล้วใช้เทอร์มินัลอื่นtty_tickets

¹ เกือบแล้ว แต่อยู่นอกเหนือขอบเขตของเธรดนี้


อาจมีไฟล์ที่มีบิตเรียกทำงานที่ตั้งค่าไว้สำหรับรูทเท่านั้นไม่ใช่สำหรับไฟล์อื่น การดำเนินการนี้อาจไม่สมบูรณ์ "ต้องการรูทเพื่อดำเนินการ" (เพียงแค่ nitpicking)
Paŭlo Ebermann

@ PaŭloEbermannฉันเขียน“ ผู้ใช้สามารถพยายามเรียกใช้คำสั่งใด ๆ ” เพื่อหลีกเลี่ยง nitpicking เกี่ยวกับกรณี (หายาก) มี nitpicker อยู่เสมอ :(
Gilles 'หยุดความชั่วร้าย'

45

sudoไม่ทราบว่าคำสั่งที่ขอให้เรียกใช้นั้นจำเป็นต้องเรียกใช้ในฐานะผู้ใช้รายอื่นหรือไม่ (โดยทั่วไปคือรูท) สิ่งที่รู้ก็คือการกำหนดค่า ที่กำหนดผู้ใช้ที่ได้รับอนุญาตให้ทำงานsudoกับสิ่งที่ผู้ใช้เป็น "เป้าหมาย" และคำสั่งใด; มันยังเป็นตัวกำหนดว่าต้องใช้รหัสผ่านแบบใดและจะต้องเก็บโทเค็นการตรวจสอบความถูกต้องไว้หรือไม่

หากคุณใช้การตั้งค่าเริ่มต้นของเดเบียนคนหลังมักจะเกี่ยวข้องกับสิ่งนี้มากที่สุด: sudoจะถามรหัสผ่านของคุณในครั้งแรกที่คุณใช้มันในเทอร์มินัลใดก็ตามที่ระบุไว้ หากคุณใช้ซ้ำsudoในเทอร์มินัลเดียวกันภายในระยะเวลาดังกล่าวระบบจะไม่ถามรหัสผ่านให้คุณ


ขอบคุณ คุณหมายถึงsudo du /path/to/some/dirควรจะต้องใช้รหัสผ่านของฉันหรือไม่เคยโดยไม่คำนึงถึง/path/to/some/dir?
ทิม

12
ใช่. มันจะต้องมีรหัสผ่านของคุณเสมอ (หรือไม่) เห็นได้ชัดว่าถ้ามันต้องการรหัสผ่านของคุณ แต่ได้เก็บไว้ในแคชแล้วมันจะไม่แจ้งให้คุณป้อน
dr_

5
การพูดอย่างเคร่งครัดอาจขึ้นอยู่กับพา ธ เนื่องจาก/etc/sudoersสามารถระบุคำสั่งและอาร์กิวเมนต์ แต่ถ้าคุณยังไม่ได้เพิ่มอะไรเช่นนั้นไปsudoers(และถ้าคุณมีผมควรหวังว่าคุณจะตระหนักถึงมัน) ข้อโต้แย้งจะได้เรื่อง (หรือจะสั่งถ้าคุณมีการเข้าถึงทั่วไปเพื่อรากผ่าน sudo )
Stephen Kitt

19
sudoไม่ได้จัดเก็บรหัสผ่านของคุณไว้ในแคชเฉพาะข้อมูลที่ระบุตัวตนของคุณได้รับการตรวจสอบครั้งเดียวด้วยการตรวจสอบรหัสผ่าน เนื่องจากsudoเป็นโปรแกรม setuid-root จึงมีสิทธิ์ทั้งหมดที่ต้องใช้เพื่อทำงานทุกอย่าง - แต่เชื่อถือได้ว่าอนุญาตให้ผู้ใช้ใช้งานได้ตามที่ระบุในsudoersไฟล์และปฏิเสธความพยายามอื่น ๆ ทั้งหมดที่จะใช้งาน . จึงเป็นสิ่งสำคัญที่sudoเป็นโครงการขนาดเล็กและได้รับการศึกษาเป็นอย่างดี
telcoM

6

คำสั่งที่ไม่ต้องการ sudo จริง ๆ

ไม่ใช่ว่าคำสั่งต้องการหรือไม่ต้องการ sudo เมื่อคุณวิ่ง

sudo -u user command

รันระบบเป็นcommanduser

การเรียกใช้นั้นสำเร็จหรือไม่และการถามรหัสผ่านนั้นขึ้นอยู่กับนโยบายความปลอดภัยหรือไม่ (ขึ้นอยู่กับการsudoersกำหนดค่า/etc/sudoers)

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