วิธีการตั้งค่าการอนุญาตไฟล์เพื่อให้ไฟล์ใหม่ได้รับการอนุญาตแบบเดียวกัน? [ซ้ำ]


35

คำถามนี้มีคำตอบอยู่ที่นี่แล้ว:

ฉันมีโฟลเดอร์ที่จะสร้างโฟลเดอร์ย่อยและไฟล์ใหม่โดยอัตโนมัติโดยสคริปต์

ฉันต้องการรักษาสิทธิ์ผู้ใช้และกลุ่มไว้ซ้ำสำหรับโฟลเดอร์และไฟล์ใหม่ทั้งหมดที่อยู่ในไดเรกทอรีหลัก ฉันรู้ว่าสิ่งนี้เกี่ยวข้องกับการตั้งค่าบิตเหนียว แต่ฉันไม่สามารถหาคำสั่งที่แสดงสิ่งที่ฉันต้องการ

นี่คือสิ่งที่ฉันทำไปแล้ว:

sudo mkdir -p /path/to/parent
sudo chmod -R 660 myself:somegroup /path/to/parent

หลังจากนั้นฉันต้องการสิทธิ์ที่ 660 ที่จะตั้งซ้ำไปยังโฟลเดอร์ใด ๆ /path/to/parentและวางไว้ในไฟล์

อย่างไรก็ตามทุกอย่างที่ฉันลองมามันล้มเหลว ใครช่วยได้บ้าง

ที่จริงแล้วค่าสถานะฐานแปด 660 นั้นอาจไม่ถูกต้องด้วยซ้ำ สิทธิ์ที่ฉันต้องการคือ:

  1. ไดเรกทอรีที่อยู่ภายใต้/path/to/parentนั้นสามารถใช้งานได้โดยผู้ใช้ที่มีสิทธิ์
  2. ไฟล์สามารถอ่าน / เขียนได้โดยผู้ใช้เองและสมาชิกของ somegroup
  3. ไฟล์และโฟลเดอร์ใน/path/to/parentไม่สามารถอ่านได้ทั่วโลก

ฉันกำลังใช้งาน Ubuntu 10.0.4 LTS

ใครช่วยได้บ้าง

คำตอบ:


10

Grawity ให้คำตอบที่ยอดเยี่ยม แต่ฉันสงสัยว่าคำถามที่แก้ไขอาจมีการเปลี่ยนแปลงเล็กน้อย

ฉันขอแนะนำให้ออกจากไดเรกทอรีของผู้ใช้ apache / กลุ่ม นี่อาจเป็นapacheหรือhttpdขึ้นอยู่กับการกระจายของคุณ

เช่น

chown -R apache:apache /path/to/parent

จากนั้นคุณสามารถทำอะไรเช่นhttps://serverfault.com/questions/164078/is-adding-users-to-the-group-www-data-safe-on-debianหรือเพิ่มตัวเองลงในกลุ่มอาปาเช่เพื่อให้แน่ใจว่าคุณ มีการเข้าถึงกลุ่มไปยังไดเรกทอรี (คล้าย ๆusermod -aG apache username)

ฉันจะไม่chmod -Rทำไดเรกทอรีทั้งหมดเพราะคุณไม่ต้องการให้สคริปต์ html หรือไฟล์ jpg หรือแบบสุ่มทำงานได้ คุณควรเปลี่ยนการอนุญาตตามที่ต้องการ (แม้ว่าการรีเซ็ตเป็น 660 อาจไม่ใช่ความคิดที่เลวร้ายที่สุด)

สิ่งที่คุณอาจต้องการลองคือ:

chmod o+w file

'o' หมายถึง 'อื่น ๆ ' & 'w' หมายถึง 'เขียน' คุณสามารถมี 'u' สำหรับ 'ผู้ใช้' & 'g' สำหรับ 'กลุ่ม' เช่นเดียวกับ 'r' & 'x' ซึ่งหวังว่าจะอธิบายด้วยตนเอง คุณสามารถลบการอนุญาตโดยใช้ '-' แทน '+'


ทางออกที่ง่ายที่สุดที่ฉันคิดคือเพิ่มตัวเองในกลุ่มผู้ใช้ apache ขอบคุณที่บอกว่า ฉันไม่รู้ว่าทำไมฉันไม่คิดอย่างนั้น!
oompahloompah

1
เป็นo+wทางเลือกที่ดีที่นี่? การเปลี่ยนแปลงไม่ควรถูก จำกัดuและg? มิฉะนั้นแล้วอะไรคือจุดที่พยายามรักษาความปลอดภัยในไดเรกทอรีและไดเรกทอรีย่อย
jww

61

บิตสิทธิ์ที่คุณต้องการคือ 0770 และ 0660

  • rw-สิทธิ์→ 110binary → 6octal

ความเป็นเจ้าของกลุ่มสามารถสืบทอดโดยไฟล์และโฟลเดอร์ใหม่ที่สร้างขึ้นในโฟลเดอร์ / path / to / parent ของคุณโดยการตั้งค่าบิต setgid โดยใช้chmod g+sดังนี้:

chmod g+s /path/to/parent

ตอนนี้ไฟล์และโฟลเดอร์ใหม่ทั้งหมดที่สร้างขึ้นภายใต้ / path / to / parent จะมีกลุ่มเดียวกับที่ได้รับการตั้งค่าไว้บน / path / to / parent


สิทธิ์ของไฟล์ POSIX ไม่ได้รับการสืบทอด พวกเขาได้รับจากกระบวนการสร้างและรวมกับค่า umask ปัจจุบัน

อย่างไรก็ตามคุณสามารถใช้POSIX ACLเพื่อทำสิ่งนี้ ตั้งค่า ACL เริ่มต้นในไดเรกทอรี:

setfacl -d -m u::rwX,g::rwX,o::- /path/to/parent

สิ่งนี้จะนำsetfaclไปใช้กับไดเร็กทอรี / path / to / parent โดยจะ-mระบุ-default ACL - ซึ่งจะใช้กับรายการที่สร้างขึ้นใหม่ (ตัวพิมพ์ใหญ่Xหมายถึงเฉพาะไดเรกทอรีที่จะได้รับ+xบิต)

(หากจำเป็นคุณสามารถเพิ่มu:someuser:rwXหรือg:someuser:rwX- กลุ่มที่ต้องการให้กับ ACL ได้)


หมายเหตุ: สำหรับระบบเก่าที่ใช้ ext3 / ext4 คุณต้องติดตั้งระบบไฟล์ด้วยaclตัวเลือกไม่เช่นนั้นจะไม่สนใจ ACL ทั้งหมดและไม่อนุญาตให้ตั้งค่าใหม่

mount -o remount,acl /

ในการตั้งค่านี้อย่างถาวรใช้หรือแก้ไขtune2fs -o acl <device>/etc/fstab


5
ขอบคุณที่สละเวลาตอบ น่าเสียดายที่ฉันค่อนข้างใหม่สำหรับสิ่งเหล่านี้และสิ่งที่คุณเขียนนั้นไม่สามารถแยกได้จากภาษากรีกถึงฉัน ฉันไม่เข้าใจสิ่งที่คุณเขียนส่วนใหญ่ ฉันมีกระบวนการทางเว็บและฉันต้องการให้ Apache สามารถสร้างโฟลเดอร์และไฟล์ในโฟลเดอร์แม่ที่มีเพียง Apache (เจ้าของ) และฉัน (กลุ่ม) เท่านั้นที่มีความสามารถในการแปลงไฟล์และเปลี่ยนเป็นไดเรกทอรี คนอื่นถูกแบน นั่นคือทั้งหมดที่ฉันพยายามทำ Apache จะต้องสามารถสร้างโฟลเดอร์ย่อยและเก็บไฟล์ไว้ในนั้นได้
oompahloompah

สิ่งนี้ใช้ไม่ได้unzipหรือ
datasn.io

2

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

ขั้นตอนเหล่านี้ควรทำสิ่งที่คุณต้องการ (แทนที่ไดเรกทอรีในคำสั่งด้วยไดเรกทอรีที่คุณต้องการใช้):

  • เพิ่มสคริปต์ค่าเริ่มต้นของumask 027 Apache /etc/default/apacheวิธีนี้จะป้องกันไม่ให้ผู้อื่นเข้าถึงไฟล์หรือสร้างไดเรกทอรี apache
  • ดำเนินการchown www-data:www-data directoryในไดเรกทอรีที่คุณต้องการให้ Apache สามารถเขียนถึง
  • ดำเนินการchmod 750 directoryในไดเรกทอรีที่คุณต้องการให้ Apache สามารถเขียนถึง

การอนุญาตให้ apache เขียนไปยังไดเรกทอรีจะเปิดความสามารถในการฉีดมัลแวร์ทุกประเภทไปยังเนื้อหาที่คุณให้บริการ ตรวจสอบเนื้อหาของแผนผังไดเรกทอรีนี้อย่างเหมาะสม

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