การตั้งค่าชื่อผู้ใช้และกลุ่มเริ่มต้นสำหรับไฟล์ในไดเรกทอรี


13

ใช้โพสต์ที่เป็นประโยชน์นี้ฉันสามารถตั้งค่ากลุ่มเริ่มต้นและการอนุญาตไฟล์ในโฟลเดอร์

ฉันมีปัญหาในการตั้งค่าเจ้าของเริ่มต้น (ทีม uid 1234)

setfacl -d -m g::rwx /my/test/folder
setfacl -d -m o::rx /my/test/folder

getfacl /my/test/folder

# file: /my/test/folder
# owner: teamlead
# group: web_prod
# flags: -s-
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

ด้วยที่:

[mary@boxen]# touch /my/test/folder/somefile
[mary@boxen]# ll /my/test/folder/somefile
-rw-rw-r--. 1 mary web_prod 0 Nov  6 08:58 somefile

ดังนั้นกลุ่มที่ถูกต้องจะถูกกำหนด แต่ไฟล์ใหม่มีความเป็นเจ้าของของผู้ใช้ที่สร้างไฟล์ ฉันต้องการให้ไฟล์ที่สร้างขึ้นใหม่มี teamlead: web_prod เจ้าของ / กลุ่ม

ปรากฏว่าsetfaclสามารถใช้ตั้งค่าผู้ใช้เริ่มต้นได้เช่นกัน ด้วยโฟลเดอร์ acl config ที่มีอยู่ (ด้านบน):

[mary@boxen]# setfacl -d -m u:1234:rwx /my/test/folder

ตอนนี้เพื่อสร้างไฟล์เป็นผู้ใช้อื่น ฉันคาดหวังว่าจะมีการเป็นผู้นำทีม: ความเป็นเจ้าของ web_prod

[mary@boxen]# touch /my/test/folder/anotherfile
[mary@boxen]# ll /my/test/folder/anotherfile
-rw-rw-r--+ 1 mary web_prod 0 Nov  6 08:58 somefile

ไฟล์ใหม่ยังคงมีความเป็นเจ้าของในการสร้างไฟล์ไม่ใช่ uid 1234 (นำทีม)

สิ่งที่ฉันเป็นไปได้แม้หลังจากหรือเป็นวิธีที่ฉันจะผิดเกี่ยวกับเรื่องนี้?

คำตอบ:


18

ด้วย setfacl คุณสามารถตั้งค่าการอนุญาตเริ่มต้น แต่ไม่ใช่เจ้าของ / กลุ่มเริ่มต้นสำหรับไฟล์ที่สร้างขึ้นใหม่

ในการรับไฟล์ใหม่ให้เป็นของผู้ใช้เฉพาะคุณต้องมีบิต setuid ที่ใช้งานได้เช่นบิต setgid ในไดเรกทอรี น่าเสียดายที่ไม่มีการใช้งาน

ด้วย setfacl คุณสามารถทำบางสิ่งบางอย่างซึ่งเป็นเกือบเทียบเท่าในสถานการณ์ที่สุด: คุณสามารถตั้งค่า ACL default:user:teamlead:rwxเช่น ด้วยวิธีนี้ผู้ใช้ที่มีชื่อสามารถเขียนไฟล์ใหม่แม้ว่าคนอื่นจะเป็นเจ้าของไฟล์ก็ตาม


โปรดอัปเดตคำตอบนี้ด้วยคำสั่งเพื่อใช้ 'ค่าเริ่มต้น: ผู้ใช้: teamlead: rwx' ไปยังไดเรกทอรี '/ foo'
user319862

10

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

ไม่ว่าคุณจะพยายามทำอะไรคุณไม่จำเป็นต้องทำเช่นนี้ ACL เพียงพอสำหรับการรับรองว่าอะไรก็ตามที่จะต้องอ่านไฟล์ในภายหลังจะมีสิทธิ์เพียงพอ ปล่อยให้ไฟล์เป็นของผู้ใช้ที่สร้างขึ้น


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

@bviktor คุณสามารถบรรลุผลเช่นเดียวกันกับ ACL
Gilles 'หยุดความชั่วร้าย'

คุณจะระบุเจ้าของและกลุ่มสำหรับไฟล์ใหม่ด้วย ACL ได้อย่างไร?
bviktor

@bviktor เจ้าของคือใครก็ตามที่สร้างไฟล์ที่ไม่เปลี่ยนแปลง กลุ่มที่เป็นเจ้าของไฟล์ในการอนุญาตแบบดั้งเดิมนั้นไม่เกี่ยวข้อง ACL ในไฟล์ใหม่เป็น ACL เริ่มต้นของไดเรกทอรีในลักษณะเดียวกับที่กลุ่มที่เป็นเจ้าของในไฟล์ใหม่คือกลุ่มที่เป็นเจ้าของไดเรกทอรีด้วย BSD semantics ( g+s)
Gilles 'หยุดชั่วร้าย'

@Gilles ไม่ กลุ่มของไฟล์ใหม่จะเป็น "กลุ่มเข้าสู่ระบบเริ่มต้น" ของผู้สร้างไม่ใช่กลุ่มของโฟลเดอร์หลัก พฤติกรรมที่คุณอธิบาย (เช่นไฟล์ใหม่ได้รับกลุ่ม dir ของผู้ปกครอง) ต้องการ setgid ที่จะตั้งค่าบนแม่ และกลุ่มมีความเกี่ยวข้องมากเพราะเมื่อผู้ใช้ทำงานร่วมกันพวกเขาไม่สามารถเข้าถึงไฟล์ของกันและกันได้หากกลุ่มนั้นแตกต่างกัน เว้นแต่ไฟล์ของคุณจะสามารถเข้าถึงได้ทั่วโลกซึ่งไม่ใช่ความคิดที่ดี
bviktor

1

ถ้าคุณต้องการที่จะสร้างไฟล์ใหม่ด้วยกลุ่มใหม่คุณต้องเปลี่ยนกลุ่มหลัก

สำหรับสิ่งนี้คุณสามารถใช้usermodและพารามิเตอร์ -g

   -g, --gid GROUP
       The group name or number of the user's new initial login group. The group must exist.
       Any file from the user's home directory owned by the previous primary group of the user will be owned by this new group.
       The group ownership of files outside of the user's home directory must be fixed manually.

เช่น

test2@kinakuta:/tmp$ id
uid=1002(test2) gid=1002(test2) grupos=1002(test2),1003(testgroup)
test2@kinakuta:/tmp$ touch test2
test2@kinakuta:/tmp$ ls -la test2
-rw-r--r-- 1 test2 test2 0 nov 23 22:26 test2
root@kinakuta:/tmp# usermod -g testgroup test2
root@kinakuta:/tmp# su test2
test2@kinakuta:/tmp$ touch test2_1
test2@kinakuta:/tmp$ ls -la test2_1 
-rw-r--r-- 1 test2 testgroup 0 nov 23 22:27 test2_1

0

บน Linux คุณต้องมี sgid บนพาเรนต์หลักเพื่อรับกลุ่มสำหรับไฟล์ (แม้ว่าคุณไม่จำเป็นต้องใช้ sgid ในไดเรกทอรีบนระบบ BSD)


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