การอนุญาตของไฟล์มีผลกับไฟล์ที่สร้างใหม่อย่างไร


12

ฉันมีไดเรกทอรีที่มีการอนุญาตดังต่อไปนี้:

drwxr-s---. user group folder

foo.txtบนเดสก์ทอปผมเข้าถึงโฟลเดอร์นี้และคลิกขวาเพื่อสร้างการเรียกไฟล์ใหม่ แล้วใช้ terminal, $ touch bar.txtฉันสร้างไฟล์อื่นโดยใช้คำสั่ง

เมื่อฉันตรวจสอบการอนุญาตสำหรับไฟล์เหล่านี้ฉันมี:

-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt

-rw-r-----. user groupผมคาดหวังว่า สิทธิ์ในการเขียนพิเศษสำหรับกลุ่มและการอนุญาตให้อ่านสำหรับผู้อื่นเกิดขึ้นได้อย่างไร

คำตอบ:


16

setguid

ที่ทำงานมี 2 กองกำลังที่นี่ สิ่งแรกคือบิต setgid ที่เปิดใช้งานในโฟลเดอร์, folder.

drwxr-s---. user group folder

นั่นคือจำนวนsแพ็คของตัวละครที่จุดเริ่มต้นของบรรทัดนี้ พวกเขากำลังจัดกลุ่มดังนั้น:

d - directory
rwx - read/write/execute bits for user
r-s - read/execute/setuid bits for group
--- - nothing for other users

r-sหมายความว่าไฟล์หรือไดเรกทอรีใด ๆ groupที่สร้างในโฟลเดอร์นี้จะมีกลุ่มที่ตั้งค่าโดยอัตโนมัติไปยังกลุ่ม

นั่นคือสิ่งที่ทำให้ไฟล์foo.txtและbar.txtถูกสร้างเช่น:

-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt

สิทธิ์ & umask

สิทธิ์ที่คุณเห็นเป็นเรื่องอื่น umaskเหล่านี้จะถูกควบคุมโดยการตั้งค่าสำหรับคุณ คุณสามารถดูสิ่งที่umaskตั้งค่าของคุณด้วยคำสั่งumask:

$ umask
0002

หมายเหตุ:บิตเหล่านี้เรียกอีกอย่างว่า "โหมด" บิต

มันเป็นมาสก์ดังนั้นจึงจะปิดใช้งานบิตใด ๆ ที่เกี่ยวข้องกับสิทธิ์ที่เปิดใช้งาน ในตัวอย่างนี้บิตเดียวที่ฉันต้องการปิดคือสิทธิ์การเขียนสำหรับอื่น ๆ

0 - skipping for this conversation
0 - value of user bits
0 - value of group bits
2 - value of other bits

การเป็นตัวแทนของ "บิต" ในคำสั่งนี้อยู่ในรูปแบบทศนิยม 2 เท่ากับ 010 ในรูปแบบไบนารีซึ่งก็คือบิตการเขียน 4 (100) หมายถึงคุณต้องการปิดการอ่าน 7 (111) หมายถึงคุณต้องการอ่าน / เขียน / ดำเนินการปิดการใช้งานทั้งหมด สร้างขึ้นจากที่นี่:

$ umask 007

จะปิดการใช้งานบิตอ่าน / เขียน / ดำเนินการสำหรับผู้ใช้รายอื่น

งั้นไฟล์ของคุณล่ะ

ดีumaskควบคุมสิทธิ์ที่จะได้รับชุดเมื่อไฟล์ใหม่จะถูกสร้างขึ้น ดังนั้นถ้าเรามีumaskชุดต่อไปนี้:

$ umask 007

และเริ่มแตะไฟล์ใหม่เราจะเห็นไฟล์ที่สร้างขึ้นดังนี้:

$ touch newfile1.txt newfile2.txt
$ ls -l |grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:34 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:34 newfile2.txt

หากเราเปลี่ยนเป็นอย่างอื่นให้พูดสิ่งนี้:

$ umask 037
$ ls -l |grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:36 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:36 newfile2.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile3.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile4.txt

มันจะไม่ส่งผลกระทบใด ๆ ต่อไฟล์ที่เราสร้างขึ้นมา ดูที่นี่:

$ umask
0037
$ touch newfile1.txt newfile2.txt
$ ls -l | grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:37 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:37 newfile2.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile3.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile4.txt

แล้วเบราว์เซอร์ไฟล์เกิดอะไรขึ้น

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

ใช้mkdirตัวอย่างเช่น:

$ umask
0037

$ mkdir -m 777 somedir1
$

$ ls -ld somedir1
drwxrwxrwx 2 saml saml 4096 Nov  3 22:44 somedir1

ด้วยสวิทช์ที่เราสามารถแทนที่-m คำสั่งไม่ได้มีสถานที่นี้เพื่อให้คุณได้รับความคิดสร้างสรรค์ ดูคำถาม & คำตอบ U & L นี้: สามารถสร้างไฟล์โดยกำหนดสิทธิ์ในบรรทัดคำสั่งได้หรือไม่? สำหรับวิธีการเช่นนั้นumasktouch

ทางอื่น? umaskเพียงแทนที่ เบราว์เซอร์ไฟล์มีแนวโน้มที่จะทำสิ่งนี้หรือเพียงแค่เพิกเฉยumaskและวางไฟล์โดยใช้สิทธิ์ที่กำหนดค่าให้ทำ


ฉันคิดว่า umask ควรจะลบสิทธิ์ไม่ใช่เพิ่ม หรือฉันกำลังพลาดอะไรอยู่?
คำถามล้น

@QuestionOverflow - คุณปิดบังควบคุมการอนุญาตที่อนุญาตเมื่อไฟล์และไดเรกทอรีถูกสร้างขึ้น ดังนั้นชื่อของมัน มันปิดบังการใช้งานบิตในระหว่างกระบวนการสร้าง
slm

umask 0002ของฉันอ่าน หาก umask ตั้งค่าการอนุญาตแทนการลบการอนุญาตบิตการดำเนินการจะถูกตั้งค่าสำหรับผู้ใช้และกลุ่มเมื่อฉันtouchแต่มันไม่
คำถามล้น

@QuestionOverflow - นั่นเป็นข้อ จำกัด ของtouchคำสั่ง ดูลิงค์ที่ฉันรวมอยู่ใน A ของฉันลิงค์นี้: unix.stackexchange.com/questions/47178/…
slm

เพียงชี้แจงจุดสองสามข้อตามความคิดเห็น: 1) สิทธิ์ของไฟล์ใหม่จะถูกกำหนดโดย umask + โปรแกรมที่ใช้ในการสร้างไฟล์ 2) การอนุญาตจะไม่ถูกสืบทอดจากไดเรกทอรีหลัก
คำถามล้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.