รหัสผ่านของผู้ใช้คนใดที่ `sudo 'ถามหา


10
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul  4  2017 /usr/bin/sudo

ดังนั้นsudoสามารถรันsudoได้โดยผู้ใช้ใด ๆ และผู้ใช้ที่รันใด ๆจะมีรูตเป็น ID ผู้ใช้ที่มีประสิทธิภาพของกระบวนการเนื่องจากเซ็ตบิตผู้ใช้/usr/bin/sudoตั้งค่าของ

จากhttps://unix.stackexchange.com/a/11287/674

ความแตกต่างที่เห็นได้ชัดเจนที่สุดระหว่าง sudo และ su คือsudo ต้องการรหัสผ่านของผู้ใช้และ su ต้องใช้รหัสผ่านของ root

  1. รหัสผ่านของผู้ใช้ใดsudoถาม เป็นผู้ใช้ที่แสดงโดย ID ผู้ใช้จริงของกระบวนการหรือไม่

    ถ้าใช่ผู้ใช้จะไม่ได้รับสิทธิ์ superuser โดยการเรียกใช้sudoแล้วระบุรหัสผ่านของตนเอง? Linux สามารถ จำกัด สิ่งนั้นกับผู้ใช้บางคนได้หรือไม่?

  2. มันถูกต้องที่sudoจะขอรหัสผ่านหลังจากที่ execve()เริ่มต้นในการดำเนินการmain()ของ/usr/bin/sudo?

    เนื่องจาก euid ของกระบวนการเปลี่ยนเป็นรูท (เนื่องจากบิต set-user-id ของ / usr / bin / sudo ถูกตั้งค่า) อะไรคือจุดที่ sudo ขอรหัสผ่านในภายหลัง

ขอบคุณ

ฉันได้อ่านhttps://unix.stackexchange.com/a/80350/674แต่ไม่ได้ตอบคำถามข้างต้น


3
ไม่ใช่ผู้ใช้ แต่มีเฉพาะผู้ที่รวมอยู่ในรายการ sudoers
Rodrigo

1
@Rodrigo ฟังดูเหมือนคำตอบให้ใส่ไว้ในคำตอบไม่ใช่ความคิดเห็น
Philip Kendall

2
@PhilipKendall นั่นตอบเพียงส่วนหนึ่งของข้อสงสัยของ OP
Rodrigo

คำตอบ:


22
  1. ในการกำหนดค่าที่พบบ่อยที่สุดsudoขอรหัสผ่านของผู้ใช้ที่ทำงานอยู่ sudo (ตามที่คุณพูดผู้ใช้ที่สอดคล้องกับ 'รหัสผู้ใช้จริงของกระบวนการ) จุดประสงค์ของsudoการให้สิทธิ์พิเศษแก่ผู้ใช้ที่เฉพาะเจาะจง (ตามที่กำหนดโดยการกำหนดค่าในsudoers) โดยไม่ต้องให้ผู้ใช้เหล่านั้นต้องมีการรับรองความถูกต้องอื่น ๆ กว่าของตัวเอง แต่sudo จะตรวจสอบว่าผู้ใช้ทำงานsudoจริงๆคือผู้ที่พวกเขาเรียกร้องให้มีและมันไม่ว่าด้วยการขอรหัสผ่านของพวกเขา (หรือสิ่งที่กลไกการตรวจสอบการตั้งค่าสำหรับsudoมักจะใช้ PAM - ดังนั้นนี้อาจเกี่ยวข้องกับลายนิ้วมือหรือสองปัจจัย รับรองความถูกต้อง ฯลฯ )

    sudoไม่จำเป็นต้องให้สิทธิ์ในการเป็นรูท แต่ก็สามารถให้สิทธิพิเศษมากมาย ผู้ใช้ใด ๆ ที่ได้รับอนุญาตให้กลายเป็นรูตโดยsudoersสามารถทำได้โดยใช้การพิสูจน์ตัวตนของตนเองเท่านั้น แต่ผู้ใช้ไม่ได้รับอนุญาตไม่ (อย่างน้อยไม่ได้ใช้sudo) สิ่งนี้ไม่ได้บังคับใช้โดย Linux เอง แต่โดยsudo(และการตั้งค่าการรับรองความถูกต้อง)

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


12

sudoมักจะถามรหัสผ่านของผู้ใช้ที่เรียกใช้แม้ว่าจะสามารถกำหนดค่าได้ :

ซึ่งแตกต่างจากsu(1)เมื่อ sudoersต้องการการตรวจสอบความถูกต้องมันจะตรวจสอบข้อมูลประจำตัวของผู้ใช้ที่เรียกใช้ไม่ได้ข้อมูลประจำตัวของผู้ใช้เป้าหมาย (หรือของรูท) นี้สามารถเปลี่ยนแปลงได้ผ่านทางrootpw, targetpwและrunaspwธงอธิบายต่อไป

การตั้งค่าrootpwได้sudoเสมอขอรหัสผ่านรากของtargetpwขอรหัสผ่านของผู้ใช้sudoก็จะเรียกใช้โปรแกรมเป็นและขอรหัสผ่านของการตั้งค่าผู้ใช้ในrunaspwrunas_default

การsudoตั้งค่าแบบไบนารีนั้นสามารถเริ่มต้นได้ด้วยสิทธิ์พิเศษของผู้ใช้ สมมติว่าsudoไม่มีข้อบกพร่องใด ๆ ที่มีรหัสการตรวจสอบของตนว่าในตัวมันจะไม่สำคัญมาก

ค่อนข้างทำนองเดียวกันกระบวนการใด ๆ นอกจากนี้ยังสามารถรันโค้ดในโหมดเคอร์เนลโดยการเรียกสายระบบใด ๆ open()บอกว่า (ซึ่งไม่เหมือนกับรหัสผู้ใช้สเปซกับรูท) ตราบใดที่เคอร์เนลไม่มีข้อบกพร่องพวกเขาจะไม่สามารถเรียกใช้รหัสโดยอำเภอใจได้


8

จากบรรทัดแรกของman sudo:

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

ดังนั้น:

  1. มีการใช้ ID ผู้ใช้จริง (ไม่มีผลบังคับใช้) ของผู้ใช้ ...
  2. ใช่ผู้ใช้ใด ๆ (ที่ได้รับอนุญาต ) สามารถรับสิทธิ์ superuser (หรืออื่น ๆ ) เพิ่มเติมโดยการเรียกใช้ sudo จากนั้นให้การรับรองความถูกต้อง( กำหนดค่า ) ทั้งที่ได้รับอนุญาตและกำหนดค่าถูกตั้งค่าในไฟล์ sudoers

  3. Linux สามารถ จำกัด สิ่งนั้นกับผู้ใช้บางคนได้หรือไม่?
    ใช่มันทำได้ แต่มันก็ไม่ได้ ลินุกซ์มีการตั้งค่าที่จะอนุญาตให้ไบนารี sudo ในการตัดสินใจขึ้นอยู่กับชุดของกฎ (นโยบายการรักษาความปลอดภัย) ภายในโปรแกรม sudo /etc/sudoersและภายในแฟ้ม โดยทั่วไปอาจใช้ไฟล์อื่น ๆ (เช่น / แทน)

จากman setresuid:

DESCRIPTION
setresuid () ตั้งค่า ID ผู้ใช้จริง ID ผู้ใช้ที่มีประสิทธิภาพและ set-user-ID ที่บันทึกไว้ของกระบวนการเรียก

  1. วิธีเดียวที่จะได้รับสิทธิ์ superuser ที่ได้รับจากเคอร์เนลคือการเรียกใช้โปรแกรม suid มันไม่สามารถเป็นอย่างอื่น นี่เป็นวิธีที่ Linux เลือกให้สิทธิ์ superuser

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


-1

เพิ่มเติมจากคำตอบที่ดีอื่น ๆ เกี่ยวกับsudo:

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

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