วิธี จำกัด การเรียกใช้คำสั่งในไดเรกทอรีเฉพาะผ่าน SUDOERS


13

ฉันสามารถกำหนดค่า sudo (ผ่านไฟล์ sudoers) เพื่อให้ผู้ใช้เรียกใช้chownและchmodคำสั่งในไฟล์หรือไดเรกทอรีใด ๆ ในระบบ อย่างไรก็ตามฉันต้องการให้สิทธิ์แก่ผู้ใช้เพื่อเรียกใช้คำสั่งเหล่านี้ในไฟล์ที่อยู่ใต้/var/www/htmlไดเรกทอรี

ฉันจะ จำกัด คำสั่งที่ใช้สิทธิพิเศษเช่นที่ผู้ใช้สามารถเรียกใช้งานได้เฉพาะในไดเรกทอรีที่ระบุไว้ล่วงหน้าเท่านั้น

ตัวอย่างเช่น: คำสั่งต่อไปนี้ให้สิทธิ์ 777 index.htmlไฟล์

sudo chmod 777 /var/www/html/index.html

ตอนนี้ฉันต้องการดำเนินการสองอย่าง

  1. จำกัดsudoเช่นที่ผู้ใช้สามารถเรียกใช้chmodและchownจากภายในเท่านั้น/var/www/html

  2. ไม่อนุญาตให้ผู้ใช้รันคำสั่งเหล่านี้ที่อื่นในระบบ (เช่นคำสั่งไม่สามารถรันได้/var/wwwหรือ/var/ftp)


1
กรุณาอย่า crosspost - superuser.com/questions/456662/…
Ulrich Dangel

7
นี่เป็นวิธีที่ถูกต้องจริงเหรอ? วิธีการเกี่ยวกับwww-dataกลุ่มไม่จำเป็นต้องไปchmod/ chownอะไร?
sr_

เย็น. ด้วยวิธีนี้คุณจะสามารถรูทได้ง่าย chownมันเป็นความคิดที่ดีมากที่จะให้ออกไป นอกจากนั้นฉันไม่เห็นเหตุผลว่าทำไมchmodต้องถูกเรียกใช้ในฐานะรูท
นิลส์

คำตอบ:


13

สิ่งที่คุณถามเป็นเรื่องยากถ้าไม่ไปไม่ได้ แม้ว่าคุณจะ จำกัด แอปพลิเคชั่นchownและchmodไฟล์ภายใต้ไดเรกทอรีเฉพาะบางคนยังสามารถส่งลิงก์สัญลักษณ์และส่งผลกระทบต่อไฟล์ได้ทุกที่ที่พวกเขาต้องการ

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

โดยปกติผู้ใช้ที่ต้องการการอนุญาตเพิ่มเติมเพื่อสร้างและแก้ไขไฟล์ภายใต้/var/wwwจะถูกเพิ่มในกลุ่ม (บ่อยครั้งwww-dataหรือคุณอาจมีกลุ่มที่แตกต่างกันสำหรับส่วนต่างๆของเว็บไซต์) คุณสามารถใช้ความเป็นเจ้าของกลุ่มและไดเรกทอรี setgid: chgrp www-data /var/www/html; chmod g+ws /var/www/htmlอนุญาตให้ทุกคนในwww-dataกลุ่มเขียนไปยัง/var/www/htmlไดเรกทอรีและไฟล์ที่สร้างในไดเรกทอรีนั้นจะเป็นของwww-dataกลุ่มแทนที่จะเป็นกลุ่มหลักของผู้ใช้ที่สร้างไฟล์ อย่างไรก็ตามมันไม่ยืดหยุ่นมาก

สิ่งที่คุณอาจควรทำคือการตั้งค่ารายการควบคุมการเข้าถึง/var/wwwไฟล์ที่อยู่ภายใต้ ขั้นแรกตรวจสอบให้แน่ใจว่าได้เปิดใช้งาน ACL แล้ว: ระบบไฟล์ที่/var/wwwเปิดอยู่จะต้องต่อเชื่อมกับaclตัวเลือก ดูที่การทำให้ไฟล์ใหม่ทั้งหมดในกลุ่มเข้าถึงได้โดยกลุ่มเพื่อขอความช่วยเหลือ ติดตั้งยูทิลิตี้ ACL ( getfaclและsetfacl) ด้วย จากนั้นให้สิทธิ์พิเศษกับต้นไม้ใต้/var/www/htmlผู้ใช้ที่ควรมี คุณสามารถตั้งค่า ACL ต่อผู้ใช้ แต่บ่อยครั้งจะทำให้ผู้ใช้ที่ควรมีสิทธิ์เหมือนกันในส่วนของระบบไฟล์ในกลุ่มและตั้งค่า ACL สำหรับกลุ่มนั้น ตัวอย่างเช่นหากผู้ใช้ในกลุ่มhtml-writersควรมีสิทธิ์อ่าน - เขียนต้นไม้ใน/var/www/html:

setfacl -d -m group:html-writers:rwx /var/www/html
setfacl -m group:html-writers:rwx /var/www/html

เกี่ยวกับ"สิ่งนี้ไม่ยืดหยุ่นมาก" (ตอนท้ายของวรรค 3) - เพราะเหตุใด เป็นเพราะคนจำเป็นต้องอยู่ในกลุ่มใดกลุ่มหนึ่งหรือไม่ (ฉันไม่รู้อะไรเลยเกี่ยวกับการอนุญาตและ ACL และสิ่งที่เกี่ยวข้อง)
KajMagnus

3
@KajMagnus มันยืดหยุ่นได้เพราะรูทต้องจัดการกลุ่มและไฟล์สามารถอยู่ในกลุ่มเดียวเท่านั้น ACL ให้ผู้ใช้เลือกผู้ที่สามารถเข้าถึงไฟล์ที่พวกเขาเป็นเจ้าของและผู้ใช้และกลุ่มหลายคนสามารถพูดถึงใน ACL
Gilles 'หยุดชั่วร้าย'

2

คุณสามารถ จำกัด คำสั่งที่จะใช้โดย "myuser" กับอาร์กิวเมนต์ทั้งหมดใน/etc/sudoersไฟล์โดยvisudoเพิ่มคำสั่ง:

## Allows myuser to chmod the html dir and chmod 755 the html2 dir
myuser  ALL=NOPASSWD:/bin/chmod [0-7][0-5][0-5] /var/www/html/*,/bin/chown myuser:mygroup /var/www/html/*,/bin/chmod 755 /var/www/html2/myapp/*.txt 

เปิดใช้งานการบันทึกสำหรับการเพิ่มทุกการดำเนินการ:

Defaults logfile=/var/log/sudo.log

ตัวอย่างผลลัพธ์:

[root@myhost /]# su - myuser
-sh-3.1$ sudo /bin/chmod 755 /var/www/html/index.html 
-sh-3.1$ sudo /bin/chmod 755 /var/www/html/*
-sh-3.1$ sudo /bin/chmod 777 /var/www/html2/myapp/*.txt
Sorry, user myuser is not allowed to execute '/bin/chmod 777 /var/www/html2/myapp/*.txt' as root on myhost.mydomain.
-sh-3.1$ sudo /bin/chmod 755 /var/www/html2/myapp/*.txt 
-sh-3.1$ 

เมื่อคุณใช้ sudo หลักฐานควรเป็น "myuser" เป็นบุคคลที่เชื่อถือได้ ระวังด้วยการอนุญาตไฟล์ไม่มีวิธีง่ายๆในการหยุดผู้ใช้ sudo ที่เป็นอันตรายจากการเชื่อมโยงไฟล์จากทรัพยากรภายนอกและเปลี่ยนมัน


ฉันเคยลองมาก่อน แต่มันให้ข้อผิดพลาดเป็น: ขออภัยผู้ใช้ไม่ได้รับอนุญาตให้ดำเนินการ '/ bin / chmod 777 / var / www / html / a' เป็นรากใน prashant.xyz.com
PrashantB

คุณได้เปลี่ยนผู้ใช้ที่มีsu - prashantหรือsu prashant?
tombolinux

ใช่ฉันกำลังดำเนินการคำสั่งโดยผู้ใช้ prashant ฉันอ่านฟอรัมพวกเขาพูดว่าคำสั่งรันทั้งระบบ ไม่มีใครเขียนเกี่ยวกับปัญหาดังกล่าว
PrashantB

ฉันวิ่งมันโห่ :) แต่นี่จะเป็นคำสั่งคงที่ เราสามารถทำให้เป็นเรื่องทั่วไปเพื่อที่ฉันจะสามารถใช้สิทธิ์ใด ๆ ในไฟล์ภายใต้ / var / www / html ได้หรือไม่?
PrashantB

3
สิ่งนี้ไม่ปลอดภัยอย่างสมบูรณ์: sudo /bin/chmod 666 /var/www/html/../../../etc/passwdและถ้าคุณแก้ไขสิ่งนั้นln -s /etc /var/www/html/foo/etc; sudo /bin/chmod 666 /var/www/html/foo/etc/passwd
กิลส์ 'หยุดความชั่วร้าย'

1

จริงๆแล้วมีวิธีที่ค่อนข้างง่ายในการทำเช่นนี้โดยการสร้างสคริปต์ Bash (หรือเชลล์ที่คุณเลือก) เพื่อ จำกัด การแก้ไขที่ทำกับไฟล์หรือไดเรกทอรีเฉพาะ

ในตัวอย่างของคุณมันจะเป็นดังนี้:

$ vi /usr/local/bin/mychmod

#!/bin/bash

chmod 777 /var/www/index.html

จากนั้นคุณจะเปลี่ยนไฟล์ sudoers เพื่อให้ www-data ดำเนินการ / usr / local / bin / mychmod

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


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