Score:0

บน CentOS 6 จะให้ไฟล์ที่ผู้ใช้สร้างสืบทอดสิทธิ์จากไดเร็กทอรีหลักได้อย่างไร

ธง bh

ดังนั้นเซิร์ฟเวอร์ของเราจึงมีการตั้งค่าดังนี้:
โครงสร้างโฟลเดอร์

/แอสซิค เป็นโฟลเดอร์โครงการใหญ่ของเรา /200T เป็นโครงการย่อยของโครงการใหญ่นั้น และโฟลเดอร์ต่างๆ ที่อยู่ภายใต้ /200T เช่น /ปอนด์ เป็นไดเร็กทอรีส่วนบุคคลของพนักงานแต่ละคนที่กำลังทำงานในโครงการย่อย /แอสซิค, /200T, /ปอนด์ ล้วนถูกสร้างขึ้นโดย ราก จากนั้นมีการกำหนดค่าคุณสมบัติใหม่โดยรูทผ่าน chmod -R และ chown -R. /แอสซิค และ /200T เป็นของ ราก และอยู่ในกลุ่ม แอซิค และ 200T ตามลำดับในขณะที่ /ปอนด์ เป็นของบัญชีผู้ใช้ของผู้ปฏิบัติงาน ปอนด์ และอยู่ในกลุ่ม แอซิค.

ความคิดคือเนื้อหาที่อยู่ภายใน /แอสซิค และ /200T สามารถมองเห็นได้โดยบุคลากรทุกคนที่ทำงานอยู่ แอซิค และ 200T แต่พวกเขาไม่สามารถเข้าถึงการเขียนไดเร็กทอรีทั้ง 2 ไดเร็กทอรีนี้ หากต้องการสร้างบางสิ่ง พวกเขาจะต้องทำภายในไดเร็กทอรีของตนเอง (/ปอนด์ และอื่นๆ) เมื่อผู้ปฏิบัติงานสร้างบางสิ่งในไดเร็กทอรีของตนเอง เราต้องการให้ผู้ปฏิบัติงานคนอื่นๆ ในโครงการย่อยเดียวกันสามารถอ่านสิ่งใหม่นั้นได้ แต่ไม่สามารถแก้ไขได้โดยบังเอิญ ตัวอย่างเช่น, ปอนด์ เพิ่งสร้างไฟล์ testbench.v และโฟลเดอร์ /ผล ภายใต้ /asic/200T/ปอนด์. บุคคลอื่น (กลจ) บน 200T โครงการย่อยควรจะอ่านได้ /asic/200T/lbh/testbench.v และ /asic/200T/lbh/ผลลัพธ์ แต่ไม่ได้เขียนลงไป ถ้า กลจ ต้องการแก้ไข เขาจะต้องคัดลอกไปยังไดเร็กทอรีของเขาเอง /asic/200T/glj แล้วทำเช่นนั้น

เพื่อให้บรรลุเป้าหมายข้างต้น เราต้องได้รับอนุญาตจากไดเร็กทอรีที่สร้างโดย ปอนด์ เป็น drwxr-s--- และไฟล์ที่จะเป็น rwxr-s--- ตามค่าเริ่มต้น แต่ความเป็นจริงจะมีลักษณะดังนี้:
ไฟล์และโฟลเดอร์ที่สร้างโดย lbh และ root

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

คำถามของฉัน:

  1. เหตุใดผู้ใช้จึงสร้างไฟล์ (เช่น /ปอนด์) ภายใต้ไดเร็กทอรีส่วนบุคคล (เช่น ปอนด์) ละเว้น drwxr-s--- สิทธิ์ของโฟลเดอร์ส่วนบุคคลและค่าเริ่มต้นเป็น (ง)rwxrwsr-x?
  2. มีวิธีการที่ปลอดภัยหรือไม่ในการให้ผู้ปฏิบัติงานสร้างไฟล์และโฟลเดอร์ ด้วย (d)rwxr-s--- โดยค่าเริ่มต้น? ขอให้ผู้ใช้ทุกคนด้วยตนเอง chmod ทุกอย่างทุกครั้งเป็นเรื่องยุ่งยากมากเกินไป และฉัน กังวลว่าการเปลี่ยนค่าเริ่มต้น อุมาสก์ มูลค่าสามารถนำไปสู่สิ่งใหม่ ปัญหาที่น่าประหลาดใจในบรรทัด

ขอบคุณมาก!


แก้ไข: โครงสร้างโฟลเดอร์และการอนุญาตไฟล์ที่สร้างโดย lbh และ root มีลักษณะดังนี้:

[lbh@<เครื่อง> lbh]$ ls -al
รวม 16
drwxr-s---. 4 ปอนด์ 200T 4096 1 ต.ค. 02:40 น.
drwxr-sr-x. 4 รูท 200T 4096 1 ต.ค. 02:18 ..
drwxrwsr-x. 2 ปอนด์ 200T 4096 1 ต.ค. 02:26 น. aaa_lbh
drwxr-sr-x.2 รูท 200T 4096 1 ต.ค. 02:26 น. aaa_root
-rw-rw-r--. 1 ปอนด์ 200T 0 1 ต.ค. 02:38 file_lbh.txt
-rw-r--r--. 1 รูท 200T 0 1 ต.ค. 02:40 file_root.txt
[lbh@<เครื่อง> lbh]$ pwd
/asic/200T/ปอนด์
[lbh@<เครื่อง> lbh]$ cd ..
[lbh@<เครื่อง> 200T]$ ls -al
รวม 16
drwxr-sr-x. 4 รูท 200T 4096 1 ต.ค. 02:18 .
drwxr-x---. 3 root asic 4096 1 ต.ค. 02:16 ..
drwxr-sr-x. 2 รูท 200T 4096 1 ต.ค. 02:18 น
drwxr-s---. 4 ปอนด์ 200T 4096 1 ต.ค. 02:40 ปอนด์
[lbh@<เครื่อง> 200T]$ pwd
/asic/200T
[lbh@<เครื่อง> 200T]$ 

และ getfaclผลลัพธ์ของไดเร็กทอรีและไฟล์มีดังนี้:

[lbh@<เครื่อง> เดสก์ท็อป]$ getfacl /asic
getfacl: การลบ '/' นำหน้าออกจากชื่อพาธสัมบูรณ์
#ไฟล์ asic
# เจ้าของ: root
#กลุ่ม: asic
ผู้ใช้::rwx
กลุ่ม::r-x
อื่นๆ::---

[lbh@<เครื่อง> เดสก์ท็อป]$ getfacl /asic/200T/
getfacl: การลบ '/' นำหน้าออกจากชื่อพาธสัมบูรณ์
# ไฟล์: asic/200T/
# เจ้าของ: root
# กลุ่ม: 200T
# ธง: -s-
ผู้ใช้::rwx
กลุ่ม::r-x
อื่นๆ::r-x

[lbh@<เครื่อง> เดสก์ท็อป]$ getfacl /asic/200T/lbh
getfacl: การลบ '/' นำหน้าออกจากชื่อพาธสัมบูรณ์
# ไฟล์: asic/200T/lbh
#เจ้าของ:ปอนด์
# กลุ่ม: 200T
# ธง: -s-
ผู้ใช้::rwx
กลุ่ม::r-x
อื่นๆ::---

[lbh@<เครื่อง> เดสก์ท็อป]$ getfacl /asic/200T/lbh/aaa_lbh/
getfacl: การลบ '/' นำหน้าออกจากชื่อพาธสัมบูรณ์
# ไฟล์: asic/200T/lbh/aaa_lbh/
#เจ้าของ:ปอนด์
# กลุ่ม: 200T
# ธง: -s-
ผู้ใช้::rwx
กลุ่ม::rwx
อื่นๆ::r-x

[lbh@<เครื่อง> เดสก์ท็อป]$ getfacl /asic/200T/lbh/aaa_root/
getfacl: การลบ '/' นำหน้าออกจากชื่อพาธสัมบูรณ์
# ไฟล์: asic/200T/lbh/aaa_root/
# เจ้าของ: root
# กลุ่ม: 200T
# ธง: -s-
ผู้ใช้::rwx
กลุ่ม::r-x
อื่นๆ::r-x

[lbh@<เครื่อง> เดสก์ท็อป]$ getfacl /asic/200T/lbh/file_lbh.txt 
getfacl: การลบ '/' นำหน้าออกจากชื่อพาธสัมบูรณ์
# ไฟล์: asic/200T/lbh/file_lbh.txt
#เจ้าของ:ปอนด์
# กลุ่ม: 200T
ผู้ใช้::rw-
กลุ่ม::rw-
อื่นๆ::r--

[lbh@<เครื่อง> เดสก์ท็อป]$ getfacl /asic/200T/lbh/file_root.txt 
getfacl: การลบ '/' นำหน้าออกจากชื่อพาธสัมบูรณ์
# ไฟล์: asic/200T/lbh/file_root.txt
# เจ้าของ: root
# กลุ่ม: 200T
ผู้ใช้::rw-
กลุ่ม::r--
อื่นๆ::r--

[lbh@<เครื่อง> เดสก์ท็อป]$ แตะ hello.txt
[lbh@<เครื่อง> เดสก์ท็อป]$ mkdir สวัสดี 
[lbh@<เครื่อง> เดสก์ท็อป]$ ls -al
รวม 12
drwxr-xr-x. 3 ปอนด์ lbh 4096 9 ต.ค. 17:28 .
drwx------. 36 lbh lbh 4096 9 ต.ค. 17:21 ..
-rw-rw-r--. 1 ปอนด์ ปอนด์ 0 9 ต.ค. 17:27 สวัสดี.txt
drwxrwxr-x. 2 lbh lbh 4096 9 ต.ค. 17:28 สวัสดี
[lbh@<เครื่อง> เดสก์ท็อป]$ getfacl สวัสดี
# ไฟล์: สวัสดี
#เจ้าของ:ปอนด์
#กลุ่ม:lbh
ผู้ใช้::rwx
กลุ่ม::rwx
อื่นๆ::r-x

[lbh@<เครื่อง> เดสก์ท็อป]$ getfacl hello.txt 
# ไฟล์: hello.txt
#เจ้าของ:ปอนด์
#กลุ่ม:lbh
ผู้ใช้::rw-
กลุ่ม::rw-
อื่นๆ::r--

[lbh@<เครื่อง> เดสก์ท็อป]$ 
Score:0
ธง za

Linux ไม่รองรับการสืบทอดสิทธิ์ ดังนั้นคุณจึงไม่สามารถทำในสิ่งที่คุณถามในหัวข้อคำถามได้

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

setfacl -m ค่าเริ่มต้น:ผู้ใช้:<ชื่อผู้ใช้>:rwx <dir>
setfacl -m เริ่มต้น:group:<groupname>:rwx <dir>

หลังจากนี้ ถ้าใครสร้างไฟล์หรือไดเรกทอรีใน (ถ้าพวกเขาได้รับอนุญาตให้สร้างวัตถุที่นั่น แน่นอน) วัตถุนั้นจะได้รับ ACL เพิ่มเติม ผู้ใช้:<ชื่อผู้ใช้>:rwx และ กลุ่ม:<ชื่อกลุ่ม>:rwx. คุณสามารถตั้งค่าการอนุญาตเริ่มต้นสำหรับเจ้าของและเจ้าของกลุ่มได้โดยการตั้งค่า <username> และ <groupname> ว่างเปล่า.

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

ตรวจสอบบช.ด้วย getfacl <dir>. แน่นอน อาจมีค่าเริ่มต้นหลายอย่าง (และดูเหมือนว่าคุณต้องลงเอยด้วยกฎหลายข้อ) อย่างน้อยข้อกำหนดที่ฉันพบกำหนดให้มี ACL กลุ่มเริ่มต้นอย่างน้อยสองรายการเสมอ)


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

    chmod g+s <dir>

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

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


ฉันต้องการทราบอีกครั้งอย่างชัดเจนนี่คือ ไม่ การสืบทอด นี่คือการตั้งค่าเริ่มต้นที่ไม่เหมือนกันทุกประการ หากคุณเปลี่ยนแปลงบางสิ่งบนออบเจกต์หลักหลังจากนั้น ออบเจ็กต์ที่สร้างไว้แล้วจะยังคงสิทธิ์ใน Linux เสมอ

ตัวอย่างเช่น ใน Windows เมื่อคุณตั้งค่า ACL ของอ็อบเจ็กต์ย่อยเป็น "สืบทอด" การเปลี่ยน ACL พาเรนต์จะส่งผลต่อลูกหลาน ซึ่งเป็นการสืบทอดที่เหมาะสม

NoobAdmin avatar
bh flag
ขอบคุณมาก! ฉันจะลองดูว่าวิธีนี้ใช้ได้ดีพอสำหรับเราไหม แม้ว่าฉันยังคงสับสนว่าทำไมโฟลเดอร์ที่ผู้ใช้สร้างขึ้นจึงเป็น drwxrwsr-x ค่า umask ที่ 0022 ควรทำให้เป็น drwxrwxr-x ใช่ไหม ดังนั้นบิต gid จึงสืบทอดมา?
NoobAdmin avatar
bh flag
การแก้ไข: ขอโทษ ฉันหมายถึงค่า umask เป็น 0002 (ผู้ใช้ทั่วไป) ไม่ใช่ 0022 (รูท)
Nikita Kipriyanov avatar
za flag
*ไม่มีอะไร* สืบทอดมา ACL เริ่มต้นจะถูกบันทึกเป็น ACL, umask ถูกตั้งค่าเป็นโหมดไฟล์ และจากนั้นหากมีคนเข้าถึงไฟล์ Linux จะอ่านทั้งสองและ AND จะคำนวณการอนุญาตตามจริง
NoobAdmin avatar
bh flag
ดังนั้นในภาพหน้าจอที่สองของฉัน ("ไฟล์และโฟลเดอร์ที่สร้างโดย lbh และ root") โฟลเดอร์ "aaa_lbh" ที่สร้างโดย lbh คือ drwxrwsr-x แทนที่จะเป็น drwxrwxr-x และ "s" อยู่ที่นั่นเพราะ Linux คำนวณทั้ง umask ของ lbh และ ACL ของโฟลเดอร์หลัก (/asic/200T/lbh)
Nikita Kipriyanov avatar
za flag
"s" หมายถึง "setgid" ไม่ใช่หรือ ไม่มีอะไรเหมือนกันกับหน้ากากเหล่านี้ แต่ฉันต้องยอมรับว่าฉันลืมเกี่ยวกับความเป็นไปได้นี้ ช่วยให้ผู้สืบทอดได้รับกลุ่มเจ้าของจากไดเร็กทอรีแทน gid กระบวนการ หากคุณต้องการสำรวจ ACL ให้ใช้ `getfacl` ซึ่งจะคำนวณการอนุญาตที่มีประสิทธิภาพด้วย และสุดท้าย ทั้งหมดนี้เป็นข้อมูล *ข้อความ* โปรดอย่าถ่ายภาพหน้าจอ ให้คัดลอกและวางเอาต์พุตคอนโซลแทน
NoobAdmin avatar
bh flag
ขอบคุณ ฉันเพิ่งอัปเดตโพสต์ต้นฉบับด้วยเอาต์พุตเทอร์มินัล ไฟล์ใหม่ที่สร้างโดย ```lbh``` บน ```Desktop``` ไม่มีบิต ```setgid``` ดังนั้นดูเหมือนว่าไฟล์ใหม่ที่สร้างขึ้นภายใต้ ```/asic/200T/lbh`` ` มีแฟล็ก ```s``` เนื่องจากไดเร็กทอรีหลักมี

โพสต์คำตอบ

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