คำสั่ง sudo พยายามค้นหาชื่อโฮสต์


15

เมื่อเร็ว ๆ นี้ฉันได้เปลี่ยนไฟล์ sudoers และชื่อโฮสต์ผ่าน / etc / hostname หลังจากเปลี่ยนไฟล์นี้คำสั่ง sudo ของฉันใช้เวลานานมาก นอกจากนี้ยังบอกว่า sudo ไม่สามารถแก้ไข host kaagini (ชื่อโฮสต์ของเครื่องของฉัน)

ทำไม sudo ถึงต้องรู้ชื่อโฮสต์เพื่อให้อนุญาตบางอย่าง ??

ไฟล์ sudoers ของฉันมีคำสั่ง "Defaults env_reset" ฉันเห็นคำถามที่คล้ายกัน แต่บริบทไม่ใช่การเข้าสู่ระบบระยะไกลที่นี่ ข้อผิดพลาดกำลังแสดงบน localhost

googling เริ่มต้นสำหรับปัญหาระบุว่าไฟล์ / etc / hosts ต้องมีชื่อโฮสต์จริงสำหรับ 127.0.0.1 นี่เป็นการแก้ไขปัญหาของฉัน แต่คำถามที่แท้จริงของฉันคือ: ทำไมเราต้องการสิ่งนี้สำหรับ sudo? sudo ควรทำงานโดยไม่คำนึงถึงสถานที่ของการเข้าสู่ระบบ



@OliverSalzburg ฉันได้ขอคำถามใหม่อย่างถูกต้อง กรุณาแจ้งให้เราทราบหากมีสิ่งใดผิดพลาด
prathmesh.kallurkar

คำตอบ:


16

/etc/sudoersไฟล์ที่ถูกออกแบบมาเพื่อให้สามารถที่จะกระจายไปยังหลายเซิร์ฟเวอร์ เพื่อให้บรรลุนี้แต่ละสิทธิ์ในไฟล์มีส่วนโฮสต์

นี่คือการตั้งค่าปกติALL=ซึ่งหมายความว่าสิทธิ์ที่ถูกต้องสำหรับเซิร์ฟเวอร์ใด ๆ อย่างไรก็ตามมันสามารถตั้งค่าเป็นโฮสต์ที่เฉพาะเจาะจง:

%sudo    kaagini=(ALL) ALL

เพื่อให้ sudo รู้ว่าควรนำกฎนี้ไปใช้จริงจะต้องค้นหาโฮสต์ที่ใช้งานอยู่ มันใช้สายที่อาศัยความ/etc/hostsถูกต้องซึ่งเป็นสาเหตุที่มันล้มเหลวถ้ามันไม่ถูกต้อง

อาจเป็นที่ถกเถียงกันอยู่ว่าsudoไม่ต้องกังวลกับการค้นหาชื่อหากส่วนโฮสต์ถูกตั้งค่าไว้ALL=สำหรับการอนุญาตทั้งหมด แต่มันก็ไม่ทำงานเช่นนั้น .

นี่เป็นเรื่องง่ายสำหรับการบำรุงรักษาเพราะ sudo อ่าน / etc / sudoers เท่านั้นเพื่อดูว่าผู้ใช้สามารถทำอะไรได้บ้างในเครื่องปัจจุบัน แต่ในฐานะผู้ดูแลระบบที่มีเซิร์ฟเวอร์ 100 เครื่องอาจต้องมีไฟล์ / etc / sudoers แตกต่างกัน 100 ไฟล์ เนื่องจาก sudoers มีส่วนของโฮสต์ในการอนุญาตคุณสามารถรักษาไฟล์ sudoers เดียวและแจกจ่ายไปยังเครื่องทั้งหมด แต่ยังคงมีความละเอียดมากกว่าสิ่งที่ผู้ใช้สามารถทำได้ในแต่ละเครื่อง


ขอบคุณสำหรับคำตอบ. คุณสามารถมาที่ไฟล์ sudoers ที่กระจายอีกครั้งได้หรือไม่? ดูฉันมีระบบปฏิบัติการที่ทำงานบน machineA ควรจัดเก็บไฟล์การอนุญาต (/ etc / sudoers) สำหรับระบบปฏิบัติการนี้ไว้ในเครื่องอื่น หรือคำตอบของคุณหมายถึงว่าคำสั่ง sudo สามารถพูดอะไรบางอย่างเช่นผู้ใช้ John สามารถ sudo จาก machineA แต่ไม่ใช่จาก machineB ??
prathmesh.kallurkar

มันเป็นเรื่องง่ายสำหรับการบำรุงรักษา sudo อ่าน / etc / sudoers เท่านั้นเพื่อดูว่าผู้ใช้สามารถทำอะไรกับเครื่องปัจจุบัน แต่ในฐานะผู้ดูแลระบบที่มีเซิร์ฟเวอร์ 100 เครื่องอาจต้องมีไฟล์ / etc / sudoers แตกต่างกัน 100 ไฟล์ เนื่องจาก sudoers มีส่วนของโฮสต์ในการอนุญาตคุณสามารถรักษาไฟล์ sudoers เดียวและแจกจ่ายไปยังเครื่องทั้งหมด แต่ยังคงมีความละเอียดมากกว่าสิ่งที่ผู้ใช้สามารถทำได้ในแต่ละเครื่อง
พอล

อีกหนึ่งคำถาม ... ผู้ดูแลเซิร์ฟเวอร์จะต้องสแกนไฟล์ sudoers ใหม่ทุกครั้งที่มีการเปลี่ยนแปลงในไฟล์ sudoers หลักหรือไม่ sudo ให้วิธีการรักษาไฟล์ sudoers ผ่านเครือข่ายหรือไม่?
prathmesh.kallurkar

@ prathmesh.kallurkar ไม่ไม่มีวิธีการแจกจ่ายในตัว แต่นี่คือ linux ดังนั้นจึงเป็นเรื่องปกติ คุณจะใช้ rsync หรือ scp หรือเครื่องมืออื่นเพื่อทำให้ส่วนนี้เสร็จ
พอล

1
ฉันคิดว่าเป็นข้อผิดพลาด (ถ้ามีเพียงกฎทั้งหมดแล้ว sudo ไม่จำเป็นต้องรู้ชื่อโฮสต์) และจึงได้ยื่นbugzilla.sudo.ws/show_bug.cgi?id=916
Matthias Urlichs


-3

Puppetเป็นซอฟต์แวร์การจัดการการกำหนดค่าที่สามารถกำหนดค่าเซิร์ฟเวอร์ได้โดยอัตโนมัติโดยการอ่านไฟล์ Puppet Manifests ไฟล์ดังกล่าวอาจรวมถึงคำจำกัดความของไฟล์ / etc / sudoers ของคุณซึ่งสามารถส่งออกไปยัง "ตัวแทน" หุ่นกระบอกทั้งหมดของคุณจาก "ต้นแบบ" ของหุ่นเชิดของคุณ จากนั้นโฮสต์ทั้งหมดจะได้รับสำเนาไฟล์ / etc / sudoers ของคุณซึ่งสามารถ (และควร) รวมถึงคำจำกัดความของโฮสต์ดังนั้นคุณสามารถให้ผู้ใช้บางคนมีคำสั่งบางคำสั่งในบางโฮสต์ (แต่ไม่ใช่ที่อื่น)


3
คุณสามารถขยายคำตอบของคุณเพื่ออธิบายว่าหุ่นกระบอกคืออะไรคุณจะหามันได้ที่ไหนและคุณจะใช้มันเพื่อแก้ปัญหาได้อย่างไร? จากคิวการตรวจสอบ
fixer1234

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