ฉันจะอนุญาตให้ผู้ใช้แก้ไขไฟล์ระบบเฉพาะที่ จำกัด ตามปกติเพื่อรูทได้อย่างไร?


8

ฉันกำลังพยายามเขียนถึง/etc/network/interfacesผู้ใช้ที่ไม่มีสิทธิ์รูท

เหตุผลที่ต้องการเขียนถึงสิ่งนี้จะทำให้ผู้ใช้สามารถตั้งค่า IP แบบคงที่เนื่องจากฉันใช้เซิร์ฟเวอร์บรรทัดคำสั่งเท่านั้น ฉันต้องได้รับอนุญาตอะไรบ้างในการให้สิทธิ์ผู้ใช้etc/sudoers?

ฉันไม่ต้องการให้ผู้ใช้มีสิทธิ์แบบเต็ม ความสามารถในการแก้ไขไฟล์นี้

คำตอบ:


25

แทนที่จะใช้sudoเพียงตั้งค่า ACL บนไฟล์:

$ ls -l /var/tmp/foo
-rw-rw---- 1 root root 4 Jul 31 15:26 /var/tmp/foo
$ sudo setfacl -m u:white:rw /var/tmp/foo
$ whoami
white
$ cat /var/tmp/foo
bar

ตอนนี้ไฟล์เป็นของ 'root' แต่ผู้ใช้ 'สีขาว' สามารถอ่านและเขียนได้ ขณะนี้ผู้ใช้ 'สีขาว' สามารถใช้ตัวแก้ไขรายการโปรดเพื่อแก้ไขไฟล์ได้


สับสนเล็กน้อย เป็น/var/tmp/foo= /etc/network/interfaces? ไม่เคยเห็นสิ่งที่คุณพยายามจะพูดที่นั่นฉันค่อนข้างใหม่กับ Linux
Keith

มันเป็นแค่ไฟล์ คุณสามารถใช้ไฟล์อะไรก็ได้ที่คุณต้องการ
Jeff White

1
ดี ฉันคิดว่า ACL สามารถใช้เพื่อ จำกัด สิทธิ์เท่านั้นและไม่อนุญาตให้ใช้ - ยินดีที่ได้ทราบว่าไม่เป็นความจริง!
Rmano

ดูเหมือนจะไม่ได้รับการสนับสนุนภายใต้ WSL:setfacl: /etc/logrotate.conf: Operation not supported
mpen

8

จัดเตรียมสคริปต์ที่ทำการแก้ไขที่คุณต้องการตัวอย่างเช่นสคริปต์ที่เขียนไฟล์ที่ถูกต้องด้วย IP คงที่ (สิ่งที่จะใส่ในสคริปต์นี้อยู่นอกขอบเขตของคำถาม & คำตอบนี้) มาเรียกสคริปต์นี้/root/set_static_ipกัน (1)

แก้ไข/etc/sudoers(2) (ด้วยvisudoดีกว่าจะตรวจสอบสติมันเป็นเรื่องยากมากที่จะกู้คืนระบบด้วยไฟล์ sudoers ที่ไม่ถูกต้องแม้จะเป็นไปไม่ได้จากระยะไกล (3)) และเพิ่ม

user_name_to_authorize ALL=NOPASSWD: /root/set_static_ip 

ตอนนี้ผู้ใช้สามารถใช้งานได้sudo /root/set_static_ip โดยไม่ต้องมีรหัสผ่านถามและสคริปต์จะทำงานด้วยสิทธิ์ทั้งหมด; จะไม่อนุญาตให้ใช้คำสั่งอื่น

หากคุณต้องการให้ผู้ใช้เพียงแค่เปลี่ยนไฟล์ที่มีสิ่งที่พวกเขาต้องการเพียงแค่สคริปต์ที่อาจจะ (เรียกว่า/root/unsafe-overwrite-interface)

#! /bin/bash -e
#
cp /tmp/temp-iface.txt /etc/network/interfaces 
exit 0

... และคุณบอกให้ผู้ใช้แก้ไข/tmp/temp-iface.txtแล้วเรียกใช้sudo /root/unsafe-overwrite-interface--- เปิดใช้งานใน sudoers ตามที่ระบุไว้ข้างต้น หรือคุณสามารถเพิ่มผู้ใช้ไปยังรายการ ACL และให้สิทธิ์เขียนในไฟล์ที่ระบุ

แต่โปรดสังเกตว่าถ้าคุณไม่ตรวจสอบเนื้อหาของไฟล์เพื่อความปลอดภัยความเสียหายจะเกิดขึ้นไม่ว่าจะโดยเจตนาหรือไม่ตั้งใจ


เชิงอรรถ :

(1) สคริปต์นี้จะต้องปลอดภัยที่สุดเท่าที่จะทำได้ ตรวจสอบอินพุตและอื่น ๆ มันจะถูกดำเนินการด้วยสิทธิ์อย่างเต็มที่

(2) ในการติดตั้ง sudo ที่ทันสมัยคุณสามารถเพิ่มไฟล์ลงในไดเรคทอรี/etc/sudoers.d/ซึ่งดีกว่า --- จะรอดจากการอัปเดต

(3) โดยปกติแล้วฉันจะเก็บเทอร์มินัลไว้พร้อมกับเปิดเซสชันรูท ( sudo -i) เมื่อฉันแก้ไขกลไก sudoers และทำการสำรองข้อมูลให้สะดวก


ปัญหาเดียวของเรื่องนี้คือการตั้งค่า IP แบบคงที่จะต้องเปลี่ยนตามความต้องการ ความเข้าใจของฉันเกี่ยวกับสคริปต์ที่คุณแนะนำอีกครั้งโดยทั่วไปจะเขียน/etc/network/interfacesไฟล์ลงในสิ่งที่/root/set_static_ipมันเป็น หากคุณไม่สามารถสร้างสคริปต์ที่ขอให้ผู้ใช้ป้อนที่อยู่ IP, เกตเวย์และอื่น ๆ ... สิ่งนี้ฉันไม่ดีพอที่จะทำ
Keith

คุณสามารถเขียนสคริปต์ที่ยอมรับพารามิเตอร์ ... แต่ใช่นี่เป็นวิธีที่ปลอดภัยที่สุด หากคุณให้ผู้ใช้แก้ไขไฟล์แบบสุ่ม ๆ จะเกิดอะไรขึ้นถ้าพวกเขาทำผิดพลาด? คุณสามารถทำให้เซิร์ฟเวอร์ของคุณไม่สามารถเข้าถึง ... ดังนั้นสคริปต์ไม่เพียง แต่ต้องถามพารามิเตอร์อย่างใดอย่างหนึ่ง แต่เพื่อตรวจสอบว่าปลอดภัยหรือไม่
Rmano

3
เกี่ยวกับ/etc/sudoersมันไม่ได้visudo sudoedit
saiarcot895

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