วิธีการอนุญาตให้ใช้ไฟล์ใหม่สืบทอดจากไดเรกทอรีแม่


85

dataฉันมีไดเรกทอรีที่เรียกว่า จากนั้นฉันก็เรียกใช้สคริปต์ภายใต้ id ผู้ใช้ 'หุ่นยนต์' โรบ็อตเขียนไปยังdataไดเรกทอรีและอัปเดตไฟล์ภายใน แนวคิดนี้dataเปิดให้ฉันและหุ่นยนต์อัปเดต

ดังนั้นฉันจึงตั้งค่าการอนุญาตและกลุ่มเจ้าของอย่างนี้

drwxrwxr-x  2 me robot-grp 4096 Jun 11 20:50 data

ที่ทั้งฉันและหุ่นยนต์เป็นของ 'robot-grp' ฉันเปลี่ยนการอนุญาตและกลุ่มเจ้าของซ้ำอย่างเช่นไดเรกทอรีหลัก

ฉันเป็นประจำอัปโหลดไฟล์ใหม่ลงในไดเรกทอรีใช้data rsyncน่าเสียดายที่ไฟล์ใหม่ที่อัปโหลดไม่ได้รับอนุญาตจากไดเรกทอรีหลักเนื่องจากฉันหวังว่า แต่ดูเหมือนว่านี้

-rw-r--r-- 1 me users       6 Jun 11 20:50 new-file.txt

เมื่อหุ่นยนต์พยายามที่จะอัพเดทnew-file.txtมันล้มเหลวเนื่องจากขาดการอนุญาตไฟล์

ฉันไม่แน่ใจว่าการตั้งค่า umask ช่วยได้หรือไม่ ในกรณีใด ๆ ไฟล์ใหม่ไม่ได้ติดตามมันจริงๆ

$ umask -S
u=rwx,g=rx,o=rx

ฉันมักจะสับสนเมื่อได้รับอนุญาตจาก Unix ฉันมีแผนที่ถูกต้องหรือไม่? ฉันใช้เดเบียนเลนนี่

คำตอบ:


53

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

ขั้นแรกตรวจสอบให้แน่ใจว่าได้เปิดใช้งาน ACL สำหรับไดรฟ์ข้อมูลที่เปิดอยู่ หากคุณมีtune2fsคุณสามารถดำเนินการดังต่อไปนี้:

# tune2fs -l /dev/sda1 | grep acl
Default mount options:    user_xattr acl

หากคุณไม่มีtune2fsให้ตรวจสอบfstabs:

# cat /etc/fstab 
/dev/system/root        /                       ext3    defaults        1 1
/dev/system/home        /home                   ext3    defaults        1 2
/dev/storage/data       /data                   ext3    defaults        1 2
LABEL=/boot             /boot                   ext3    defaults        1 2

คอลัมน์ที่ 4 ที่ระบุว่า "ค่าเริ่มต้น" หมายถึงในระบบของฉัน (CentOS 5.5) ACL เปิดอยู่ หากมีข้อสงสัยให้ทิ้งไว้เป็นค่าเริ่มต้น ถ้าคุณพยายามที่จะตั้ง ACL และข้อผิดพลาดมันออกมากลับไปและเพิ่มตัวเลือก acl เพื่อ etc / fstab / defaults,aclขวาหลังจากค่าเริ่มต้น:

จากสิ่งที่ฉันเข้าใจคุณต้องการให้ทุกคนในกลุ่มผู้ใช้มีสิทธิ์เข้าถึงเพื่อเขียนไปยังไดเรกทอรีข้อมูล ที่ทำได้โดยต่อไปนี้:

setfacl -Rm g:users:rwX,d:g:users:rwX data/

ฉันใช้คำสั่งนี้ แต่ไม่ได้แก้ปัญหาของฉันฉันจะยกเลิกคำสั่งนี้ได้อย่างไร
Itai Ganot

ทำเคล็ดลับในอูบุนตูด้วยsudo setfacl -Rm g:users:rwX,d:g:users:rwX /var/www/logs_or_somethingหรือไม่ มีปัญหากับการทดสอบ PHPUnit หลังจากสร้างไฟล์บันทึกจากการรันการทดสอบผู้ใช้ Apache www-dataไม่สามารถเขียน / อ่าน
s3m3n

2
@Itai Ganot - ตามsetfaclหน้าคน , -bหรือ--remove-allเอา ACL ของการขยาย
jww

ดังนั้นคุณจะผนวกsetfacl -Rm g:users:rwX,d:g:users:rwX data/ท้ายของ/etc/fstab?
425nesp

@ piña no เพียงการเปลี่ยนแปลงที่คุณทำกับ / etc / fstab คือการเปลี่ยนไป defaults เป็นคำสั่งที่คุณควรรันจากเทอร์มินัล ควรถูกแทนที่ด้วยพา ธ ไปยังไดเรกทอรีที่คุณต้องการเปลี่ยน defaults,aclsetfacldata/
Segfault

32

การทำเครื่องหมายไดเรกทอรี setgid ( g+s) จะทำให้ไฟล์ใหม่สืบทอดความเป็นเจ้าของกลุ่มของไดเรกทอรี แต่-gตัวเลือกของ rsync จะพยายามแทนที่สิ่งนี้


11
setgid bit ทำให้ไฟล์ที่สร้างเท่านั้นสืบทอดกลุ่ม / if / บุคคลที่สร้างไฟล์ใหม่เป็นสมาชิกของกลุ่มนั้น หากผู้ใช้ที่สร้างเป็นเจ้าของ แต่ไม่ใช่สมาชิกของกลุ่มหรือไดเรกทอรีสามารถเขียนได้ทั่วโลกบิต setgid จะไม่ทำอะไรเลย และ umask สำหรับผู้ใช้สร้างไฟล์ทั้งหมดยังคงต้องตั้งค่าเพื่อให้สามารถเข้าถึงกลุ่มที่เหมาะสม
dannysauer

1
@dannysauer "ถ้าผู้ใช้ที่สร้างเป็นเจ้าของ แต่ไม่ใช่สมาชิกของกลุ่ม ... บิต setgid จะไม่ทำอะไรเลย" - ขอบคุณ ทำให้รู้สึกตอนนี้ - แต่เมื่อไม่มีการตอบรับจาก rsync ก็สงสัยว่าทำไมมันไม่ทำงาน
user12345

4

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

สำหรับการเริ่มต้นการ-aตั้งค่าสถานะยอดนิยมทำให้สิทธิ์การคัดลอก rsync ใช้-ristead -aหรือเพิ่ม-no-p(สำหรับไม่มีการซิงค์สิทธิ์) และ-no-g(สำหรับกลุ่มที่ไม่ซิงค์) rsync ยังสนับสนุนการ--chmodตั้งค่าสถานะเพื่อเปลี่ยนแปลงการอนุญาตในไฟล์ที่สร้างขึ้นใหม่


3

umask ของคุณผิดสำหรับสิทธิ์ที่คุณต้องการ คุณต้องการ umask เป็น 002 ขณะนี้คุณมี umask เป็น 022 นอกจากนี้ความคิดเห็นเกี่ยวกับการสร้างไดเรกทอรี setgid นั้นถูกต้อง แต่ฉันไม่แน่ใจว่าการเป็นเจ้าของกลุ่มไฟล์นั้นเป็นสิ่งที่คุณต้องการเปลี่ยนแปลงหรือไม่

การอนุญาตให้ใช้ไฟล์ Unix นั้นเป็นแบบจำลองที่ง่ายมาก ฉันพบว่า ACLs สับสนอย่างสมบูรณ์ :-)


4
"การอนุญาตไฟล์ Unix เป็นรูปแบบที่ง่ายมากฉันพบว่า ACL ทำให้ฉันสับสนอย่างสิ้นเชิง" - ฉันรู้สึกตรงกันข้าม (แต่ +1 อะไรก็ได้) ACLs (และอนุญาต / ปฏิเสธ ACE) นั้นง่ายและสิทธิ์ Unix ไม่สมเหตุสมผล แต่นั่นมาจากคนที่ประสบปัญหาการติดตั้ง Postfix / Dovecot / Clam / SpamAssassin
jww
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.