ระบบปฏิบัติการรู้ได้อย่างไรว่าคำสั่งนั้นต้องการ sudo?


16
  1. เมื่อคุณเรียกใช้ไฟล์ปฏิบัติการบางครั้งระบบปฏิบัติการจะปฏิเสธการอนุญาตของคุณ ยกตัวอย่างเช่นการทำงานmake installที่มีคำนำหน้าเป็นเส้นทางระบบจะต้องในขณะที่มีคำนำหน้าเป็นเส้นทางที่ไม่มีระบบจะไม่ถามหาsudo sudoระบบปฏิบัติการตัดสินใจอย่างไรว่าการเรียกใช้งานโปรแกรมจะต้องใช้สิทธิ์มากกว่าที่ผู้ใช้มีก่อนที่โปรแกรมจะทำอะไร
  2. บางครั้งการใช้งานโปรแกรมจะไม่ถูกปฏิเสธการอนุญาต sudoแต่โปรแกรมจะสามารถที่จะทำสิ่งต่างๆมากขึ้นหากมีการทำงานกับ ตัวอย่างเช่นเมื่อทำงานduในบางไดเรกทอรีระบบเท่านั้นที่ sudoจะสามารถเข้าถึงบางไดเรกทอรี เหตุใด OS จึงไม่ปฏิเสธการอนุญาตให้เรียกใช้โปรแกรมดังกล่าวหรือแจ้งเตือนสิทธิพิเศษเพิ่มเติมก่อนที่โปรแกรมจะทำงานได้
  3. เป็นความจริงหรือไม่ว่าเมื่อใดก็ตามที่sudoทำงานsuจะทำงานด้วยและทุกครั้งที่suทำงานsudoจะทำงานด้วยหรือไม่ หรือกับsuผู้ใช้สามารถทำได้มากกว่าด้วยsudo? ระบบปฏิบัติการตัดสินใจsudoอย่างไรเมื่อใช้งานและเมื่อsuจำเป็น?

มีคำตอบสำหรับคุณหรือคุณต้องการข้อมูลเพิ่มเติม?
ctrl-alt-delor

คำตอบ:


14
  1. บางครั้งข้อความ "การอนุญาตที่ถูกปฏิเสธ" เกิดจากสิทธิ์ระบบไฟล์ที่ปฏิเสธว่าคุณเขียนการเข้าถึงตัวอย่างเช่น ปฏิบัติการ / เครื่องมือเพียงตรวจสอบว่าระบบไฟล์ให้สิทธิ์แก่คุณเพียงพอที่จะทำสิ่งที่คุณกำลังจะทำและส่งข้อผิดพลาดหากระบบไฟล์ถูกปฏิเสธ ในบางครั้งเครื่องมือจะตรวจสอบ ID ผู้ใช้ของคุณก่อนที่จะอนุญาตให้คุณใช้งานต่อไป
  2. เมื่อคุณเรียกใช้โปรแกรมด้วยsudoคุณกำลังเรียกใช้ภายใต้ชื่อผู้ใช้อื่น หากผู้ใช้นั้น "สามารถทำสิ่งต่าง ๆ " มากกว่าผู้ใช้ของคุณและการsudoกำหนดค่าอนุญาตให้คุณทำสิ่งเหล่านี้ในนามของผู้ใช้รายอื่นใช่แล้วsudoจะช่วยให้คุณทำสิ่งต่าง ๆ ได้มากขึ้น แม้ว่ามันจะไม่จำเป็นก็ตาม หากคุณเพิ่งตรึงsudoที่จุดเริ่มต้นของบรรทัดคำสั่งคุณจริง ๆ แล้วsudoเป็น ing rootดังนั้นโดยทั่วไปคุณสามารถทำสิ่งต่าง ๆ มากกว่ามนุษย์ธรรมดา
  3. ส่วนใหญ่ไม่แน่นอน ในการใช้งานsudoคุณต้องระบุรหัสผ่านผู้ใช้ของคุณเองจากนั้นคุณจะได้รับอนุญาตให้ทำบางสิ่งในนามของผู้ใช้เป้าหมาย ในการใช้งานsuคุณต้องมีรหัสผ่านของผู้ใช้เป้าหมายและหากคุณมีคุณจะกลายเป็นผู้ใช้เป้าหมายเท่าที่ระบบกังวลและสามารถทำสิ่งใด ๆ ที่ผู้ใช้สามารถทำได้

ดูสิ่งนี้ด้วย


ขอบคุณ "สิทธิ์ระบบไฟล์ปฏิเสธว่าคุณเขียนการเข้าถึง" = "โหมดการเข้าถึงของไฟล์ไม่มีการตั้งค่าบิตการดำเนินการสำหรับผู้ใช้ซึ่งสามารถตั้งค่าได้โดย chmod"?
StackExchange สำหรับทุก

1
@Tim จริงแล้ว = "โหมดการเข้าถึงไฟล์ไม่มีการตั้งค่าบิตการเขียนสำหรับผู้ใช้" และใช่สามารถของหลักสูตรนี้จะแก้ไขได้โดยมีให้คุณทั้งเจ้าของไฟล์หรือchmod root
โจเซฟอาร์

ไม่ว่าจำเป็นต้องใช้ sudo ทั้งหมดหรือไม่นั้นขึ้นอยู่กับว่าบิตการดำเนินการไม่ได้ถูกกำหนดไว้สำหรับผู้ใช้หรือไม่ ดูunix.stackexchange.com/q/147052/674
StackExchange สำหรับทุก

@Tim เห็นได้ชัดว่าคุณต้องการบิตรันไทม์เพื่อให้สามารถรันไฟล์ปฏิบัติการได้ตั้งแต่แรก
โจเซฟอาร์

1
@JosephR ไม่ชัดเจน chmod 400 hello && /lib64/ld-linux-x86-64.so.2 ./helloผลิต "สวัสดีโลก!" เอาท์พุต
doneal24

24

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

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


6

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

ด้วยsuคุณจำเป็นต้องรู้รหัสผ่านของเป้าหมายและเมื่อคุณรับรองความถูกต้องแล้วคุณสามารถทำสิ่งที่คุณต้องการในฐานะผู้ใช้นั้นได้ การใช้suสามารถถูก จำกัด โดยการตั้งค่าในSU_WHEEL_ONLY /etc/login.defsหากมีการตั้งค่าผู้ใช้ในกลุ่มเท่านั้นที่wheelสามารถใช้งานsuได้มิฉะนั้นจะไม่ถูก จำกัด นอกเหนือจากนั้นsuคือทั้งหมดหรือไม่มีอะไร

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

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


2

tl; dr Access ถูกกำหนดโดยผู้ใช้ที่กำลังเรียกใช้แอปพลิเคชันและsudoเรียกใช้แอปพลิเคชันในฐานะผู้ใช้อื่น

เวอร์ชันเต็ม:

ระบบปฏิบัติการรู้ได้อย่างไรว่าคำสั่งนั้นต้องการ sudo?

ไม่รู้สิ UNIX จัดการการอนุญาตที่ไม่ได้อยู่ในระดับแอปพลิเคชัน แต่อยู่ในระดับระบบไฟล์: การอนุญาตให้ผู้ใช้สามารถเข้าถึงไฟล์ที่ต้องการได้ แอปพลิเคชันจะถูกเรียกใช้ในนามของผู้ใช้ - กระบวนการทำงานแต่ละกระบวนการจะมีผู้ใช้เชื่อมโยงกับมัน ผู้ใช้นั้นจะใช้เพื่อกำหนดสิทธิ์สำหรับแอปพลิเคชันนั้น Sudo ทำงานโดยเรียกใช้แอปพลิเคชั่นในนามของผู้ใช้รายอื่น (ด้วยสิทธิ์ที่เกี่ยวข้องกับผู้ใช้รายอื่น) นั่นคือrootsuperuser

สำหรับตัวอย่างของคุณ:

  1. หากผู้ใช้มีสิทธิ์เขียนไปยังไดเร็กทอรีเฉพาะพวกเขาสามารถmake installเข้าไปในไดเร็กทอรีนั้นได้ มิฉะนั้นพวกเขาอาจจะต้องrootทำ - sudoโดยใช้

  2. หากคุณไม่สามารถเข้าถึงไฟล์ในไดเรกทอรีให้duเรียกใช้เพื่อให้คุณไม่สามารถเข้าถึงไฟล์ได้ rootสามารถเข้าถึงแทบทุกไฟล์ดังนั้นsudo du( duเรียกใช้ในนามroot) สามารถเข้าถึงได้เช่นกัน

เป็นความจริงหรือไม่ว่าเมื่อใดก็ตามที่ sudo ทำงาน su ก็จะทำงานเช่นกันและทุกครั้งที่ su ทำงานได้ sudo ก็จะทำงานเช่นกัน

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

บันทึกล่าสุด: วิธีที่แอปพลิเคชันจัดการกับการปฏิเสธการเข้าถึง (เมื่อแอปพลิเคชันยกเลิกหรือเพิกเฉยหรือเพิกเฉยต่อคำเตือนผู้ใช้) ขึ้นอยู่กับแอปพลิเคชัน


1

ยังไม่มีใครมี✓ดังนั้นฉันจึงรวบรวมคำตอบที่มีทุกอย่างที่ฉันสามารถนึกได้

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

ไม่มันจะไม่ทำเมื่อเริ่มปฏิบัติการได้ มันทำเมื่อผู้ปฏิบัติการพยายามทำบางสิ่ง

ระบบปฏิบัติการจะตรวจสอบการอนุญาตระบบไฟล์และความสามารถ (สิ่งเหล่านี้ไม่รวมอยู่ในการอนุญาตระบบไฟล์และรวมถึงการลดระดับ nice, mknode, เครือข่ายระดับต่ำบางอย่าง, ฆ่ากระบวนการของผู้อื่น, รีบูต, ตั้งเวลาเป็นต้น) หากคุณไม่มีสิทธิ์คุณก็ไม่สามารถทำได้ รูทมีความสามารถอย่างเต็มรูปแบบรวมถึง CAP_DAC_OVERRIDE (เพิกเฉยการอนุญาตไฟล์)

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

ระบบปฏิบัติการไม่สามารถรู้ว่าโปรแกรมจะทำอะไร ดังนั้นขึ้นอยู่กับโปรแกรมที่จะตรวจสอบการอนุญาตก่อนที่จะเริ่มและตัดสินใจว่าจะทำอย่างไร ไม่จำเป็นต้องทำเช่นนี้

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

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

sudoและsuทำบางสิ่งบางอย่างคร่าวๆ ความแตกต่างบางประการคือการจัดการตัวแปรสภาพแวดล้อมและการหลีกเลี่ยงปัญหาความปลอดภัยอื่น ๆ อย่างไรก็ตามทั้งคู่เป็นเครื่องมือที่อนุญาตให้คุณเป็นผู้ใช้อื่นและทั้งคู่มีผู้ใช้รูทเริ่มต้น

su เป็นเครื่องมือดั้งเดิมคุณจะต้องป้อนรหัสผ่านของผู้ใช้ / กลุ่มที่คุณต้องการเปลี่ยน

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

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