ฉันสามารถทำให้ไฟล์เข้าถึงได้เฉพาะสคริปต์ไม่ใช่ผู้ใช้หรือไม่


11

ฉันมีผู้ใช้ที่ จำกัด การเข้าถึงระบบ (นั่นคือเขาไม่ใช่ sudoer); ให้โทรเขาบ๊อบ

ฉันมีสคริปต์หรือไบนารีซึ่งฉันผู้ดูแลระบบไว้วางใจและจะไม่มีปัญหาในการเรียกใช้เป็น root มาเรียกสคริปต์get-todays-passphrase.shกันก่อน งานของสคริปต์นี้คือการอ่านข้อมูลจากไฟล์ "ส่วนตัว" (เป็นของผู้ใช้ / กลุ่มอื่นที่ไม่ใช่บ็อบหรือรูท) ที่อยู่ใน/srv/daily-passphrasesและส่งออกเฉพาะบรรทัดจากไฟล์: บรรทัดที่สอดคล้องกับวันที่วันนี้ .

ผู้ใช้เช่น Bob ไม่ได้รับอนุญาตให้รู้วลีรหัสผ่านของวันพรุ่งนี้แม้ว่าจะมีการระบุไว้ในไฟล์ ด้วยเหตุผลนี้ไฟล์/srv/daily-passphrasesได้รับการปกป้องโดยสิทธิ์ Unix ดังนั้นผู้ใช้ที่ไม่ใช่รูทเช่น Bob จะไม่ได้รับอนุญาตให้เข้าถึงไฟล์โดยตรง อย่างไรก็ตามพวกเขาได้รับอนุญาตให้เรียกใช้get-todays-passphrase.shสคริปต์ได้ตลอดเวลาซึ่งส่งกลับข้อมูล "กรอง"


ในการสรุป (รุ่นTL; DR ):

  1. Bob ไม่สามารถอ่านไฟล์ที่มีการป้องกันได้
  2. สคริปต์สามารถอ่านไฟล์ที่ได้รับการป้องกัน
  3. ตลอดเวลาบ๊อบสามารถเรียกใช้สคริปต์ซึ่งสามารถอ่านไฟล์ได้

เป็นไปได้ไหมที่จะทำสิ่งนี้ภายในสิทธิ์ของไฟล์ Unix? หรือถ้าบ๊อบเริ่มสคริปต์สคริปต์จะต้องถูกกำหนดให้ทำงานด้วยสิทธิ์แบบเดียวกับบ็อบหรือไม่

คำตอบ:


13

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

เมื่อต้องการทำสิ่งนี้สิ่งที่คุณต้องทำคือเพิ่มบรรทัด/etc/sudoersที่มีลักษณะคล้าย

bob ALL=(root) NOPASSWD: /path/to/command/you/trust

( NOPASSWD:ไม่จำเป็นต้องใช้ส่วน แต่เป็นเรื่องธรรมดามากในสถานการณ์นี้) ณ จุดนั้นbobสามารถเรียกใช้/path/to/command/you/trustผ่าน sudo แต่ไม่มีอะไรอื่น

ที่กล่าวว่าให้รากกับใครบางคน - สิ่งที่เรากำลังทำที่นี่ - อาจไม่ใช่สิ่งที่คุณต้องการ โดยเฉพาะอย่างยิ่งหากมีข้อบกพร่องใด ๆ ในสคริปต์ของคุณใด ๆ คุณมีความเสี่ยงให้กล่องของคุณได้รับการรูท ด้วยเหตุผลดังกล่าวคุณอาจต้องการสร้างผู้ใช้โดยเฉพาะเพื่อเป็นเจ้าของไฟล์พิเศษ - พูดว่าspecialuser- chownจากนั้นให้ไฟล์แก่พวกเขาและ/etc/sudoersทำให้การbobเป็นผู้ใช้พิเศษนั้น ในกรณีนั้นบรรทัดที่คุณเพิ่มลงไปsudoersจะเป็น

bob ALL=(specialuser) NOPASSWD: /path/to/command/you/trust

7
ฉันขอแนะนำไม่ให้ไป "รูท" - สร้างผู้ใช้ / กลุ่มพิเศษเพื่อจุดประสงค์นี้
guntbert

จุดดี; ฉันจะส่งคำตอบ
Benjamin Pollack

7

คำนำ:

ดังที่มีการชี้ให้เห็นในความคิดเห็นและด้วยเหตุผลที่อธิบายในคำตอบนี้เคอร์เนล linux จะละเว้นบิตsetuid / setguidเมื่อจัดการสคริปต์ ฉันจะไม่ทำซ้ำคำตอบที่เบนจามิน แต่จะเปลี่ยนสคริปต์ด้วยexecutabeเพื่อให้คำตอบของฉันที่ถูกต้อง


คำตอบสั้น ๆ : ใช้setgid

ขั้นตอนโดยละเอียด:

  1. สร้างกลุ่มใหม่ (เช่น readpass)
  2. ทำให้กลุ่มนั้นเป็นเจ้าของไฟล์วลีรหัสผ่าน sudo chown :readpass thatfile
  3. ทำให้ไฟล์สามารถอ่านได้โดยกลุ่มของมันเท่านั้น sudo chmod g=r,o= thatfile
  4. สร้างไฟล์รหัสผ่านsgid ที่สามารถใช้งานได้ของคุณ:sudo chmod g+s thatfile

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


2
Setgid และ setuid นั้นใช้งานไม่ได้กับสคริปต์ใช่ไหม?
muru

1
คุณไม่สามารถสร้างสคริปต์ setgid บน Linux: บิต setgid จะถูกละเว้น ให้เพิ่มกฎ sudo แทนเพื่อให้ bob สามารถทำงานthatfileกับกลุ่มreadpassได้
Gilles 'หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.