umask คำนวณใน Linux อย่างไร?


15

ดังนั้นฉันรู้ว่าumaskสามารถ จำกัด ผู้ใช้ที่มีสิทธิ์ใช้รูปแบบumask ugoนี้

ผมเข้าใจว่าการอ่าน = 4, เขียน = 2 และ exec = 1 อย่างไรก็ตามเมื่อฉันพิมพ์umaskก็จะส่งกลับ 4 หลักซึ่งเป็นหรือ0022 0073ฉันไม่เข้าใจว่าตอนนี้ทำงานอย่างไรเพราะมีตัวเลขพิเศษ ตัวเลขพิเศษนั้นคืออะไรและ0022หมายความว่าอย่างไร

คำตอบ:


18

สมมติว่ามาสก์เริ่มต้นเป็น 0666 umask0022 จะสร้างมาสก์ใหม่ 0644 (0666-0022 = 0644) ซึ่งหมายความว่ากลุ่มและผู้อื่นมีสิทธิ์ในการอ่าน (ไม่มีการเขียนหรือดำเนินการ)

ตัวเลข "พิเศษ" (หมายเลขแรก = 0) ระบุว่าไม่มีโหมดพิเศษ

หากโหมดเริ่มต้นด้วยตัวเลขมันจะถูกตีความว่าเป็นฐานแปดมิฉะนั้นมันหมายถึงเป็นสัญลักษณ์

0 คือตัวเลขตามที่เป็น 1 (สำหรับบิตเหนียว) หรือ 6 (สำหรับ SGID) คำสั่งเช่นchmodสามารถเรียกใช้โดยวิธีอื่นเช่นchmod ug+rw mydirที่คุณจะเพิ่มสิทธิ์การอ่านและเขียนให้กับผู้ใช้และกลุ่ม โปรดทราบว่าโหมดในกรณีนี้ (ug + rw) ไม่ได้เริ่มต้นด้วยหลักดังนั้นจะไม่ถูกตีความว่าเป็นฐานแปด แต่เป็นสัญลักษณ์แทน

ดูen.wikipedia.org/wiki/Chmod#Symbolic_examplesสำหรับสัญลักษณ์เช่นเดียวกับwww.lifeaftercoffee.com/2007/03/20/special-permission-modes-in-linux-and-unix/สำหรับโหมดพิเศษ

ฉันไม่รู้ว่าคุณจะเปิดโปงบิตแรกด้วยumaskแต่ในทางเทคนิคคุณสามารถทำได้ มันจะอธิบายว่าทำไมคุณมักจะเห็นว่ามันเป็นศูนย์

มอบเครดิตให้pinkfloydx33

ตัวเลขแรกของหน้ากากนั้นเกี่ยวข้องกับการอนุญาตพิเศษที่ไม่พอดีกับเจ้าของ / กลุ่ม / รุ่นอื่น ๆ เมื่อมีการระบุสี่หลักสำหรับการอนุญาตไฟล์แรกหมายถึงค่าพิเศษเหล่านั้น

4000 = SUID
2000 = SGID
1000 = sticky bit

บิต SUID ย่อมาจาก set-user-ID ทำให้โปรแกรมที่เรียกใช้งานทำงานได้โดยใช้ user id (uid) ที่มีประสิทธิภาพของเจ้าของ - กล่าวอีกนัยหนึ่งไม่ว่าใครจะเรียกใช้งานก็ตามโปรแกรมจะทำงานโดยมีสิทธิ์ของเจ้าของ สิ่งนี้มักพบได้ในโปรแกรมที่ทำสิ่งต่าง ๆ ที่ต้องการสิทธิ์รูท แต่ผู้ใช้ปกติจะต้องดำเนินการดังนี้: passwdเป็นตัวอย่างหนึ่ง

SGID บิตย่อมาจาก set-group-ID คล้ายกันมาก แต่ทำงานด้วยid กลุ่มที่มีประสิทธิภาพ(gid) ของเจ้าของ

บิตเหนียวนั้นซับซ้อนกว่าเล็กน้อยหากคุณต้องการข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนั้นคุณสามารถอ่าน manpage stickyได้

บิตเหล่านี้สามารถใช้กับไดเรกทอรีได้ แต่ความหมายเปลี่ยนไป

ฉันไม่เชื่อว่าคุณสามารถตั้งค่าumaskให้อนุญาตให้คุณเปิดใช้งานบิตพิเศษเหล่านี้ได้ตามค่าเริ่มต้น แต่คุณอาจไม่ต้องการทำสิ่งนั้นเลย

มอบเครดิตแก่ผู้ใช้470379


1
ที่จริงแล้วคุณไม่สามารถระบุค่าที่ไม่เป็นศูนย์นอกเหนือจาก 3 หลักสุดท้าย อ้างอิงจาก Posix: "การตีความค่าโหมดที่ระบุบิตโหมดไฟล์นอกเหนือจากบิตสิทธิ์การใช้ไฟล์จะไม่ได้รับการระบุ" ตามman 2 umask(การเรียกระบบที่สอดคล้องกัน) "มีการใช้เฉพาะบิตสิทธิ์การใช้ไฟล์ของmask" ในbashumask 1000 สร้างข้อผิดพลาด: "หมายเลขฐานแปดอยู่นอกช่วง" แล้วทำไม 0 พิเศษ? ฉันคิดว่ามันแค่แสดงให้เห็นว่าจำนวนนั้นเป็นเลขฐานแปด
rici

Pastebin นั้นไม่มีการอ้างอิงใด ๆ ต่อ umask ดังนั้นฉันจึงไม่เห็นว่ามันเกี่ยวข้องกันอย่างไร chmod อนุญาตการตั้งค่าสามบิตแรก แต่ umask ไม่อนุญาตให้ทำการหลอกลวง (เช่นคุณสามารถเขียนchmod 6777 dropboxและโดยวิธีการที่ยัง. chmod ug+s.)
RICI

ใช่คุณพูดถูกฉันไม่รู้
Braiam

@Braiam: สูตรการคำนวณรูปแบบใหม่ของคุณนั้นผิด0666-0022ใช่0666 & ~0022ไหม
cuonglm

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