วิธีตั้งค่าการอนุญาตเริ่มต้นสำหรับไฟล์ที่ย้ายหรือคัดลอกไปยังไดเรกทอรี?


8

คำถามของฉันคล้ายกับ วิธีการตั้งค่าการอนุญาตไฟล์เริ่มต้นในไฟล์ที่สร้างขึ้นใหม่ทั้งหมดใน linux - แต่แตกต่างกันในวิธีสำคัญ:

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

เหตุผล: ไดเรกทอรีที่เป็นปัญหาคือ "ช่องป้อนข้อมูล" สำหรับแอปพลิเคชัน ผู้ใช้ในไฟล์สถานที่กลุ่มในไดเรกทอรีและแอป (ทำงานภายใต้รหัสผู้ใช้อื่นในกลุ่มเดียวกัน) นำพวกเขาและประมวลผลพวกเขา ปัญหาคือเจ้าของไฟล์แต่ละไฟล์ที่วางในไดเรกทอรีคือผู้ใช้ที่วางไว้ที่นั่นและการอนุญาตจะเริ่มต้นเป็น "rw-r - r--" ฉันต้องการเปลี่ยนเป็น "rw-rw ----" แอปที่ใช้งานไอดีไม่สามารถทำได้อย่างชัดเจนเพราะ ID ผู้ใช้ที่แอพกำลังทำงานอยู่ไม่ได้เป็นเจ้าของไฟล์ที่เป็นปัญหาและการอนุญาตเริ่มต้นไม่อนุญาตให้แอป chmod บนไฟล์! เห็นได้ชัดว่าผู้ใช้สามารถทำ chmod หลังจากวางไฟล์ที่นั่น - แต่ฉันต้องการที่จะให้ "ลดลง" โดยผู้ใช้ที่ง่ายที่สุด (ผู้คนเหล่านี้ไม่ได้รู้ลินุกซ์พวกเขาเพียงแค่ลากและวางไฟล์จากเดสก์ท็อป windows ของพวกเขาไปยังเครือข่าย (Samba) เครือข่าย - นั่นคือพวกเขาไม่รู้ด้วยซ้ำว่าพวกเขากำลังโต้ตอบกับระบบ Linux

umask ดูเหมือนว่าทรงพลังเกินไป: ฉันไม่ต้องการตั้งค่าการอนุญาตเริ่มต้นสำหรับทุกไฟล์ที่สร้างโดยผู้ใช้เหล่านี้ - เฉพาะที่สร้างใน (หรือวางไว้ใน) ไดเรกทอรีนี้

กรุณาแนะนำ ... ขอบคุณ!

คำตอบ:


5

คุณสามารถใช้ ACL (รายการควบคุมการเข้าถึง) เพื่อตั้งค่าการอนุญาตเริ่มต้นสำหรับไฟล์ในไดเรกทอรี

จาก man 5 acl:

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

  1. วัตถุใหม่สืบทอด ACL เริ่มต้นของไดเรกทอรีที่มี         เป็นการเข้าถึง ACL

  2. รายการ ACL การเข้าถึงที่สอดคล้องกับบิตสิทธิ์ของไฟล์คือ         แก้ไขเพื่อไม่ให้มีการอนุญาตที่ไม่มีอยู่         ในการอนุญาตที่ระบุโดยพารามิเตอร์ mode

หากต้องการตั้งค่า (เปลี่ยนอุปกรณ์ไดเรกทอรี ฯลฯ ):

แก้ไขของคุณ /etc/fstab ไฟล์และเพิ่ม acl ตัวเลือกการเมานต์

/dev/mapper/star-home /home ext3  defaults,acl 0 2

remount ( แซมบ้า mount.cifs หน้าคน ) ระบบไฟล์ของคุณโดยการรีบูตหรือใช้:

mount -o remount,acl /home

ตรวจสอบให้แน่ใจว่าคุณมี setfacl และ getfacl สาธารณูปโภค

ตั้งค่า ACL เริ่มต้นในไดเรกทอรี (คุณอาจต้องตั้งค่า ACL ในไฟล์ที่มีอยู่):

$ setfacl -m d:user:george:rwx,d:group:sales-g:rwx,d:group:marketing-g:rwx projections

ดูบทช่วยสอนที่เชื่อมโยงสำหรับข้อมูลเพิ่มเติม

ที่มา: การสอน ส่วนที่ 1 และ ส่วนที่ 2

อ้างอิง: รายการควบคุมการเข้าถึง POSIX บน Linux


ฉันไม่คิดว่าคุณควรเพิ่ม acl เป็นตัวเลือกใน mount คำสั่งเมื่อคุณมีมันเข้ามา /etc/fstab. มันจะซ้ำซ้อนและเมื่อคุณเรียกใช้ mount คำสั่งในคำตอบของคุณคุณจะได้ผลลัพธ์เช่นนี้ /dev/vda1 on / type ext4 (rw,errors=remount-ro,acl,acl) (ดู acl,acl ในที่สุด) โปรดแก้ไขให้ถูกถ้าฉันไม่ผิด
its_me

1

ฉันสามารถเสนอวิธีแก้ปัญหา: สร้างไดเรกทอรี "ปล่อย" แยกต่างหากเรียกใช้ minijob แยกที่นั่นเพื่อแก้ไขการอนุญาตแล้วย้ายไฟล์ไปยังไดเรกทอรีข้อมูลของแอปพลิเคชัน คุณสามารถใช้ incron เพื่อที่จะไม่มีการหน่วงเวลาที่สังเกตเห็นได้


1

ฉันสามารถคิดถึงวิธีที่เป็นไปได้สี่วิธีในการทำสิ่งนี้:

  • umask ซึ่งคุณไม่ต้องการใช้
  • โปรแกรม wrapper ซึ่งตั้งค่า umask ของแอปพลิเคชันนั้นไม่ใช่ของผู้ใช้
  • cron ตามที่ @Peter Eisentraut อธิบายไว้; find $HOME/intake -type f -exec chmod 660 {} \;ระบบที่ต่างกันมีการปรับปรุงประสิทธิภาพในเรื่องนี้ (เช่น -exec+ ตัวเลือก)
  • การตั้งค่าพื้นฐานของไดเรกทอรีซึ่งจำเป็นต้องมีการเขียนโปรแกรมเชลล์นิดหน่อย แต่โดยทั่วไปแล้วเชลล์ในการตั้งค่าพรอมต์หรือการเรียก cd จะเปลี่ยน umask ถ้ามีจุดไฟล์อยู่ในไดเรกทอรีนั้น สำหรับทุบตี PROMPT_COMMAND='test -s $PWD/.umask && umask $(cat $PWD/.umask)'";$PROMPT_COMMAND" จะง่ายที่สุด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.