umask มีผลต่อ ACL อย่างไร


12

บางคนสามารถอธิบายให้ฉันทราบได้อย่างไรว่าumaskมีผลกระทบกับมาสก์เริ่มต้นของไฟล์ที่สร้างขึ้นใหม่หากเปิดใช้งาน ACL มีเอกสารเกี่ยวกับเรื่องนี้บ้างไหม?

ตัวอย่าง:

$ mkdir test_dir && cd test_dir
$ setfacl -m d:someuser:rwx -m u:someuser:rwx .  # give access to some user
$ getfacl .
# file: .
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:someuser:rwx
default:group::---
default:mask::rwx
default:other::---
$ umask # show my umask
077
$ echo "main(){}" > x.c # minimal C program
$ make x # build it
cc     x.c   -o x
$ getfacl x
# file: x
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx           #effective:rw-
group::---
mask::rw-
other::---

mask:rwxผมจะคาดหวัง ที่จริงหลังจากตั้งค่าumaskเช่น027ฉันได้รับพฤติกรรมที่คาดหวัง


ด้วย umask ของ 077 mask::rw-คุณจะได้รับ แต่นั่นไม่ใช่คำถามของคุณใช่ไหม
slm

@slm นี่เป็นส่วนหนึ่งของคำถามของฉัน ฉันต้องการทราบว่ามาสก์ของไฟล์ใหม่ขึ้นอยู่กับ umask อย่างไร ฉันค่อนข้างประหลาดใจที่มี 077 ฉันได้รับmask::rw-และไม่mask::rwxซึ่งเป็นหน้ากากเริ่มต้นของไดเรกทอรี
jofel

ตกลงฉันกำลังอัปเดตคำตอบของฉันตอนนี้ด้วยตัวอย่างที่น่าจะช่วยแก้ปัญหานี้ได้ ให้ฉันสองสามนาที
slm

นี้คำถามที่เกี่ยวข้องอย่างใกล้ชิด
jofel

คำตอบ:


10

ผมพบว่าตัวอย่างนี้ชื่อ: ACL และหน้ากากในลินุกซ์ ในบทความนี้ตัวอย่างต่อไปนี้แสดงให้เห็นซึ่งฉันคิดว่าช่วยให้เข้าใจว่า ACL และumaskการโต้ตอบซึ่งกันและกัน

พื้นหลัง

เมื่อไฟล์ถูกสร้างขึ้นบนระบบลินุกซ์สิทธิ์เริ่มต้น0666ถูกนำมาใช้ในขณะที่เมื่อไดเรกทอรีถูกสร้างสิทธิ์เริ่มต้น0777ถูกนำมาใช้

ตัวอย่างที่ 1 - ไฟล์

สมมติว่าเราตั้งค่า umask เป็น 077 และแตะไฟล์ เราสามารถใช้straceเพื่อดูสิ่งที่เกิดขึ้นจริงเมื่อเราทำสิ่งนี้:

$ umask 077; strace -eopen touch testfile 2>&1 | tail -1; ls -l testfile
open("testfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
-rw-------. 1 root root 0 Sep 4 15:25 testfile

ในตัวอย่างนี้เราจะเห็นว่าการเรียกของระบบopen()นั้นได้รับการอนุญาต 0666 แต่เมื่อumask 077เคอร์เนลถูกนำไปใช้แล้วการอนุญาตต่อไปนี้จะถูกลบออก ( ---rwxrwx) และเราจะเหลือด้วยrw-------aka 0600

ตัวอย่าง - 2 ไดเรกทอรี

แนวคิดเดียวกันนี้สามารถนำไปใช้กับไดเรกทอรีได้ยกเว้นว่าแทนที่จะได้รับอนุญาตเริ่มต้นคือ 0666 พวกเขาจะเป็น 0777

$ umask 022; strace -emkdir mkdir testdir; ls -ld testdir
mkdir("testdir", 0777)                  = 0
drwxr-xr-x 2 saml saml 4096 Jul  9 10:55 testdir

คราวนี้เรากำลังใช้mkdirคำสั่ง คำสั่งเรียกแล้วโทรระบบmkdir mkdir()ในตัวอย่างข้างต้นเราจะเห็นว่าmkdirคำสั่งที่เรียกว่าการเรียกmkdir()ระบบด้วยสิทธิ์ defaul 0777( rwxrwxrwx) เวลานี้ที่มี umask ของ022การอนุญาตต่อไปนี้จะถูกลบ ( ----w--w-) ดังนั้นเราจึงเหลือ 0755 ( rwxr-xr-x) เมื่อสร้างไดเรกทอรี

ตัวอย่างที่ 3 (การใช้ ACL เริ่มต้น)

ตอนนี้เรามาสร้างไดเรกทอรีและสาธิตสิ่งที่เกิดขึ้นเมื่อมีการใช้ ACL เริ่มต้นพร้อมกับไฟล์ข้างใน

$ mkdir acldir
$ sudo strace -s 128 -fvTttto luv setfacl -m d:u:nginx:rwx,u:nginx:rwx acldir

$ getfacl --all-effective acldir
# file: acldir
# owner: saml
# group: saml
user::rwx
user:nginx:rwx          #effective:rwx
group::r-x          #effective:r-x
mask::rwx
other::r-x
default:user::rwx
default:user:nginx:rwx      #effective:rwx
default:group::r-x      #effective:r-x
default:mask::rwx
default:other::r-x

ตอนนี้มาสร้างไฟล์aclfileกัน:

$ strace -s 128 -fvTttto luvly touch acldir/aclfile

# view the results of this command in the log file "luvly"
$ less luvly

ตอนนี้รับสิทธิ์ของไฟล์ที่สร้างขึ้นใหม่:

$ getfacl --all-effective acldir/aclfile 
# file: acldir/aclfile
# owner: saml
# group: saml
user::rw-
user:nginx:rwx          #effective:rw-
group::r-x          #effective:r--
mask::rw-
other::r--

mask::rw-ขอให้สังเกตหน้ากาก เหตุใดจึงไม่mask::rwxเหมือนเมื่อสร้างไดเรกทอรี

ตรวจสอบluvlyล็อกไฟล์เพื่อดูว่ามีการใช้การอนุญาตเริ่มต้นใดในการสร้างไฟล์:

$ less luvly |grep open |tail -1
10006 1373382808.176797 open("acldir/aclfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3 <0.000060>

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

เพื่อสรุป

  • ไฟล์จะไม่ได้รับอนุญาตให้ดำเนินการ (ปิดบังหรือมีประสิทธิภาพ) ไม่สำคัญว่าเราใช้วิธีใด: ACL, umask หรือ mask & ACL
  • ไดเรกทอรีสามารถได้รับอนุญาตดำเนินการ แต่ขึ้นอยู่กับวิธีการตั้งค่าเขตข้อมูลการหลอกลวง
  • วิธีเดียวที่จะดำเนินการชุดสิทธิ์สำหรับไฟล์ที่อยู่ภายใต้การอนุญาตของ ACL chmodคือการตั้งค่าด้วยตนเองโดยใช้

อ้างอิง


@jofel - แจ้งให้เราทราบหากเหมาะสม
slm

@ ฉันขอบคุณมากสำหรับคำตอบโดยละเอียดของคุณ มันทำให้ฉันใกล้ชิดกับปัญหาจริงของฉัน: การอนุญาตกลุ่มใน chmod syscall มีผลกับรูปแบบของไฟล์ ( chmod("file",0760)-> mask:rw, chmod("file",0770)-> mask:rwx) บางทีฉันควรจะเริ่มต้นคำถามใหม่เกี่ยวกับเรื่องนี้ ...
jofel

@jofel - ใช่ว่าดูเหมือนคำถามอื่น
slm

@sIm และมันก็ตอบอยู่แล้วนี่
jofel

"เมื่อไฟล์ถูกสร้างขึ้นบนระบบ Linux การอนุญาตเริ่มต้นจะถูกนำมาใช้ 0666 ... " - ซึ่งไม่ถูกต้องเนื่องจากขึ้นอยู่กับแอปพลิเคชั่นการสร้าง
ilkkachu

2

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

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