สิทธิ์ที่ดีที่สุด / ความเป็นเจ้าของสำหรับรากเอกสาร Apache


14

ฉันต้องการความช่วยเหลือในการตั้งค่าสิทธิ์ที่ถูกต้องหรือเป็นเจ้าของรากเอกสาร apache นี่คือสิ่งที่ฉันต้องการ:

  • เว็บไซต์ต่าง ๆ เก็บไว้ใน /var/www/html/<site>
  • ผู้ใช้สองคนควรอัพเดต / จัดการเว็บไซต์ผ่าน ssh
  • การเป็นเจ้าของควรแตกต่างจากผู้ใช้ apache (เพื่อความปลอดภัย)

ฉันจะทำสิ่งนี้ได้อย่างไร ในขณะนี้ไฟล์ทั้งหมดสามารถเขียนได้ทั่วโลกซึ่งไม่ดี เซิร์ฟเวอร์รัน CentOS 5.5

ขอบคุณ


สำหรับคำตอบโดยละเอียดเพิ่มเติมพร้อมตัวเลือกอื่น ๆ สำหรับการรักษาความปลอดภัย docroot โปรดดูserverfault.com/questions/357108/…
Quinn Comendant

ผมคิดว่ามันจะดีกว่าที่จะเก็บเว็บไซต์ในสถานที่แยกต่างหากแต่ละ (ไม่ใส่ทั้งที่ DocumentRoot ใช้ 2 โฮสต์เสมือน) จากนั้นผู้ดูแลระบบแต่ละเจ้าของเพียงเว็บไซต์ของตัวเองและการตั้งค่าเจ้าของกลุ่มของทั้งสองไดเรกทอรีเว็บไซต์เป็นกลุ่มอาปาเช่
นักบัญชี

คำตอบ:


22

สร้างกลุ่มใหม่

groupadd webadmin

เพิ่มผู้ใช้ของคุณในกลุ่ม

usermod -a -G webadmin user1
usermod -a -G webadmin user2

เปลี่ยนความเป็นเจ้าของของไดเรกทอรีเว็บไซต์

chown root:webadmin /var/www/html/

เปลี่ยนการอนุญาตของไดเรกทอรีเว็บไซต์

chmod 2775 /var/www/html/ -R

ตอนนี้ใคร ๆ ก็สามารถอ่านไฟล์ (รวมถึงผู้ใช้ apache) แต่มีเพียง root และ webadmin เท่านั้นที่สามารถแก้ไขเนื้อหาของพวกเขาได้


นั่นดูดี. แต่จะเกิดอะไรขึ้นหากผู้ใช้สร้างไฟล์ใหม่หรือคัดลอกไฟล์ที่อัพเดต สิทธิ์เหล่านั้นถูกนำไปใช้โดยอัตโนมัติหรือไม่? หรือเขาจะต้อง chown และ chmod ทุกครั้งหรือไม่
Marco

ไฟล์ที่คัดลอกจะรักษาสิทธิ์ / ความเป็นเจ้าของ สิทธิ์ของไฟล์เริ่มต้นสำหรับไฟล์ใหม่ได้รับการจัดการโดยumaskคำสั่ง ข้อมูลเพิ่มเติมที่นี่osr507doc.sco.com/th/OSUserG/_default_perms_new_file.html
Andy

3
คุณสามารถทำให้ webadmin setgid dir เพื่อช่วยให้มีไฟล์ใหม่
covener

1
^ +1 วิธีที่รวดเร็วจะเป็น: >> chmod 2775 -R / var / www / html /
James Broadhead

@James ta, ปรับปรุง
Andy

2

ฉันชอบติดพาร์ติชันด้วย -o acl สิ่งนี้อนุญาตให้คุณใช้คำสั่ง setfacl เพื่อให้สิทธิ์การใช้งานแบบละเอียดบนไฟล์และโฟลเดอร์แทนการระบุสิทธิ์ผู้ใช้กลุ่มอื่น ๆ เท่านั้น

ดังนั้นให้ใส่ acl ลงในพาร์ติชั่นของคุณใน / etc / fstab, หรือติดตั้งใหม่ด้วย mount -o remount, acl / mnt / xy, จากนั้นให้ความเป็นเจ้าของเว็บไดเรกทอรีของคุณกับ none: none Chmod ถึง 770 และใช้ setfacl เพื่อให้สิทธิ์การเขียนในโฟลเดอร์ที่ต้องการเท่านั้นเช่น ให้ข้อมูล www (หรือผู้ใช้เว็บเซิร์ฟเวอร์ของคุณทำงาน) เขียนสิทธิ์สำหรับโฟลเดอร์อัพโหลดและให้สิทธิ์เขียนให้กับผู้ใช้ของคุณสำหรับไดเรกทอรีทั้งหมด

mkdir dir
chown nobody:nobody dir
setfacl -m u:www-data:r-x,d:u:www-data:r-x dir
setfacl -m u:www-data:rwx,d:u:www-data:rwx dir/upload
setfacl -m u:youruser:rwx,d:u:youruser:rwx dir

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

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