ทำไม chmod + w ไม่ให้สิทธิ์การเขียนแก่ผู้อื่น (o)


18

เมื่อฉันเรียกchmod +w filenameมันไม่ได้ให้สิทธิ์ในการเขียนไปotherมันก็จะช่วยให้เขียนได้รับอนุญาตไปและusergroup

หลังจากรันคำสั่งนี้

chmod +w testfile.txt

วิ่งls -l testfile.txtพิมพ์

-rw-rw-r-- 1 ravi ravi 20 Mar 10 18:09 testfile.txt

แต่ในกรณีของ+rและ+xมันทำงานอย่างถูกต้อง

chmod ugo+w filenameฉันไม่ต้องการที่จะใช้



1
หากคุณไม่ต้องการที่จะใช้การใช้งานugo a
muru

ใช่ แต่ฉันแค่อยากรู้ว่าทำไม+wไม่ทำงาน
Ravi Sevta

นั่นเป็นเหตุผลที่ฉันทิ้งความคิดเห็นไว้สองข้อ
muru

@muru คุณอ้างสิทธิ์ในaskubuntuคำตอบที่คุณอ้างถึงข้างต้นว่า "พฤติกรรมนี้ได้รับคำสั่งจาก POSIX ดังนั้นไม่ใช่ข้อผิดพลาด" โปรดทราบว่าข้อความการใช้งานแอปพลิเคชัน POSIX นั้นไม่เป็นบรรทัดฐานดังนั้นจึงไม่ได้รับคำสั่งจาก POSIX
fpmurphy

คำตอบ:


26

สถานการณ์เฉพาะของคุณ

ในสถานการณ์เฉพาะของคุณเราสามารถเดาได้ว่าปัจจุบันของคุณumaskคือ002(นี่คือค่าเริ่มต้นทั่วไป) และสิ่งนี้จะอธิบายความประหลาดใจของคุณ

ในสถานการณ์เฉพาะนั้นโดยที่umaskค่าคือ002 (ตัวเลขฐานแปดทั้งหมด)

  • +rหมายความว่าugo+rเพราะ002 & 444เป็น000ซึ่งจะช่วยให้บิตทั้งหมดที่จะตั้ง
  • +xหมายความว่าugo+xเพราะ002 & 111เป็น000ซึ่งจะช่วยให้บิตทั้งหมดที่จะตั้ง
  • แต่+wหมายความว่าug+wเพราะ002 & 222เป็น002ซึ่งป้องกันบิต "o" ที่จะตั้ง

ตัวอย่างอื่น ๆ

  • ด้วยจะหมายถึงumask 022 +wu+w
  • ด้วยจะหมายถึงumask 007 +rwxug+rwx
  • ด้วยจะหมายถึงumask 077 +rwxu+rwx

สิ่งที่จะตรงกับความคาดหวังของคุณ

เมื่อคุณเปลี่ยนumaskเป็น000โดยการดำเนินการ

umask 000

ใน terminal ของคุณแล้ว

chmod +w file

จะตั้งค่าการอนุญาตเป็น ugo + w

ข้อความด้านข้าง

ตามที่แนะนำโดย ilkkachu โปรดทราบumask 000ว่าไม่ได้หมายความว่าทุกคนสามารถอ่านและเขียนไฟล์ทั้งหมดของคุณได้

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


4
umask 000 หมายถึงทุกคนที่มีสิทธิ์เข้าถึงบัญชีผู้ใช้บนเครื่องของคุณ (ซึ่งอาจรวมถึงโปรแกรมที่รันบริการเซิร์ฟเวอร์ ofc) สามารถอ่านและเขียนไฟล์ทั้งหมดที่คุณทำด้วยหน้ากากที่ใช้งานอยู่และไม่เปลี่ยนแปลงเพื่อให้ชัดเจน
StarWeaver

4
"+ r หมายถึง ugo = r" - ไม่มันไม่ได้หมายความว่าการตั้งค่าrบิตสำหรับปาร์ตี้เหล่านั้นที่ umask อนุญาต มีการระบุไว้อย่างชัดเจนในคู่มือของ GNU chmod และ FreeBSD chmod รวมถึงมาตรฐาน +xสำหรับเดียวกัน สำหรับ+wคุณที่ถูกต้องสำหรับกรณีของ umask นั้น
ilkkachu

4
นอกจากนี้การตั้งค่า umask เป็น0 ไม่ได้หมายความว่าทุกคนสามารถอ่านและเขียนไฟล์ทั้งหมดของคุณได้เนื่องจากแอปพลิเคชันจำนวนมากสร้างไฟล์ที่มีความเป็นส่วนตัวโดยเฉพาะกับโหมด0600ซึ่งหมายความว่ากลุ่มและคนอื่น ๆ ไม่สามารถเข้าถึงได้
ilkkachu

@ilkkachu + r หมายถึง ugo = r สิ่งนี้เกี่ยวข้องกับสถานการณ์ที่อธิบายไว้ในคำถาม นั่นไม่ใช่เรื่องทั่วไป
Prvt_Yadav

2
@Debian_yadav นั่นคือประเด็น: umaskเป็นส่วนสำคัญของ+rพฤติกรรมไม่ใช่ sidenote นอกจากนี้แม้สมมติ umask 002, chmod +rไม่ได้หมายความว่าchmod ugo=rมันหมายความว่าchmod ugo+r
ilkkachu

24

ด้วย:

chmod +<perms>

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

หากคุณต้องการที่จะเพิ่ม perms เพื่อผู้ใช้ , กลุ่มและอื่น ๆโดยไม่คำนึงถึง umask การใช้

chmod a+<perms>

ซึ่งสั้นสำหรับ

chmod ugo+<perms>

หมายความว่า + x และ + x ไม่เท่ากัน
Prvt_Yadav

1
ฉันชอบที่จะมีลิงค์: man7.org/linux/man-pages/man1/chmod.1.html „ หากไม่มีสิ่งเหล่านี้จะได้รับผลกระทบจะเป็นถ้า (a) ได้รับ แต่บิตที่ตั้งอยู่ใน umask จะไม่ได้รับผลกระทบ "
tehnicaorg

0

คุณต้องระบุผู้ที่คุณให้สิทธิ์เช่นotherโดยใช้chmod o+w testfile.txt


1
ใช่ แต่ฉันคิดว่า+wให้สิทธิ์ทั้งหมด (ผู้ใช้กลุ่มและอื่น ๆ )
Ravi Sevta

chmod a+w testfile.txtเพื่อให้สิทธิ์กับผู้ใช้ทุกคนใช้ ใช้uสำหรับผู้ใช้gสำหรับกลุ่มoอื่น ๆ และaทั้งหมด
Jaken551

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