ตัวอักษร“ t” ในผลลัพธ์ของ“ ls -ld / tmp” คืออะไร?


94

เมื่อรันคำสั่ง  ls -ld /tmpเอาต์พุตจะเป็น:

drwxrwxrwt 30 root root 20480 Mar 11 14:17 /tmp

ดังนั้นฉันมีสองคำถามหลัก:

  • ตัวอักษรคืออะไรtหลังจากการอนุญาต?
  • เท่าที่ฉันรู้/tmpจะใช้ในการสร้างไฟล์ชั่วคราวที่เกี่ยวข้องกับผู้ใช้ที่แตกต่างกันในระบบดังนั้นมันจึงมีสิทธิ์rwxrwxrwx(777)?

นี่มันผิดสำหรับฉัน ได้โปรดฉันต้องการความช่วยเหลือจากคุณเพื่อทำความเข้าใจกับสิ่งที่เกิดขึ้นที่นี่


8
อ่านบทความ Wikipediaมันค่อนข้างดีกว่าคำตอบที่นี่
Gilles

1
ดูเพิ่มเติมที่: unix.stackexchange.com/q/79395/4784
Martin Thoma

ตกลงเหตุใดเมื่อฉันติดตั้งการอัปเดตหรือแพคเกจรอบต่อนาทีใหม่จาก / tmp หมุดปักหมุดจะถูกลบหรือไม่

คำตอบ:


112

อะไรคือสิ่งที่เหนียว?

sticky bit เป็นบิตสิทธิ์ที่ตั้งค่าไว้ในไดเรกทอรีที่อนุญาตให้เฉพาะเจ้าของไฟล์ในไดเรกทอรีนั้นเจ้าของไดเรกทอรีหรือผู้ใช้รูทเพื่อลบหรือเปลี่ยนชื่อไฟล์ ไม่มีผู้ใช้รายอื่นที่มีสิทธิ์ที่จำเป็นในการลบไฟล์ที่สร้างโดยผู้ใช้รายอื่น

นี่เป็นมาตรการรักษาความปลอดภัยเพื่อหลีกเลี่ยงการลบโฟลเดอร์สำคัญและเนื้อหา (ไดเรกทอรีย่อยและไฟล์) แม้ว่าผู้ใช้รายอื่นจะได้รับอนุญาตอย่างเต็มที่

เหตุใดจึง/tmpมีtบิตเหนียว?

/tmpไดเรกทอรีสามารถนำมาใช้โดยผู้ใช้ลินุกซ์ที่แตกต่างกันในการสร้างไฟล์ชั่วคราว ตอนนี้จะเกิดอะไรขึ้นถ้าผู้ใช้ลบ / เปลี่ยนชื่อไฟล์ที่สร้างโดยผู้ใช้รายอื่นในไดเรกทอรีนี้

ดีเพื่อหลีกเลี่ยงปัญหาประเภทนี้แนวคิดของการใช้บิตเหนียว ดังนั้นสำหรับที่777ได้รับ แต่การรักษาความเหนียวไม่ได้เป็นความคิดที่ไม่ดี

ฉันจะติดตั้งบิตเหนียวสำหรับไดเรกทอรีได้อย่างไร

ฉันจะตั้งค่าบิตเหนียวบนไดเรกทอรีที่เรียกว่าtestบนเดสก์ทอปของฉัน

วิธีสัญลักษณ์ ( tหมายถึงบิตเหนียว):

chmod o+t ~/Desktop/test

หรือ

chmod +t ~/Desktop/test

วิธีตัวเลข / ฐานแปด (1 บิตบิตเหนียวเป็นค่า 1 ในตำแหน่งแรก)

chmod 1757 ~/Desktop/test

ตอนนี้ให้เราทดสอบผลลัพธ์:

ls -li ~/Desktop/test

1551793 drwxrwxrwt 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test

เพื่อลบ / ลบความเหนียว

chmod o-t ~/Desktop/test

ตอนนี้ให้เราทดสอบผลลัพธ์:

ls -li ~/Desktop/test

1551793 drwxrwxrwx 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test

ที่มา: “ Sticky บิตคืออะไรและตั้งค่าอย่างไรใน Linux” ที่ The Linux Juggernaut


13
การใช้ sticky bit นี้ใช้กับไดเรกทอรีเท่านั้นไม่ใช่ไฟล์ ในอดีตที่ผ่านมาความหมายของไฟล์ที่เรียกใช้งานได้คือการบันทึกเซ็กเมนต์ข้อความของโปรแกรมเพื่อสลับแทนที่การยกเลิกเพื่อให้การรันอีกครั้งจะเร็วขึ้น แต่วันนี้มันไม่มีความหมายในไฟล์ปกติ
psusi

ส่วนข้อความของโปรแกรมคืออะไรและจะทำให้มันเร็วขึ้นได้อย่างไร
BluePython

@BluePython ส่วน 'text' ของไฟล์เรียกทำงานเป็นส่วนที่มีรหัสเครื่องทั้งหมด: บิตที่เรียกใช้งานจริง ส่วนอื่น ๆ ที่พบบ่อยคือ 'ข้อมูล' สำหรับข้อมูลคงที่และ 'bss' สำหรับข้อมูลที่เป็นศูนย์ทั้งหมด (และไม่จำเป็นต้องจัดเก็บไว้ในแฟ้มที่ปฏิบัติการได้)
Miles Rout

1
มีความแตกต่างระหว่าง 't' และ 'T' เพื่อขออนุญาตไดเรกทอรีหรือไม่ @ psusi
Afshin

1
@Ashshin: เนื่องจากการtซ่อนการxระบุว่าผู้ใช้ทุกคนสามารถเรียกใช้ไฟล์ / ไดเรกทอรีได้หรือไม่เราต้องการวิธีอื่นในการระบุสิ่งนี้ สิ่งปกติคือทุกคนสามารถดำเนินการได้ในกรณีนี้คุณจะได้รับปกติt(แทนที่จะเป็นx) แต่ถ้าไม่เช่นนั้นคุณจะได้รับตัวพิมพ์ใหญ่T(แทน a -) ที่มา: Wikipedia
Toby Bartels

25

Sticky bit เป็นบิตสิทธิ์ที่ตั้งอยู่บนไฟล์หรือไดเรกทอรีที่ให้เจ้าของไฟล์ / ไดเรกทอรีหรือผู้ใช้รูทเท่านั้นที่จะลบหรือเปลี่ยนชื่อไฟล์ ไม่มีผู้ใช้รายอื่นที่ได้รับสิทธิ์ในการลบไฟล์ที่สร้างโดยผู้ใช้รายอื่น

บางครั้งมันเกิดขึ้นที่คุณต้องการไดเรกทอรี Linux ที่สามารถใช้งานโดยผู้ใช้ทุกคนของระบบ Linux สำหรับการสร้างไฟล์ ผู้ใช้สามารถสร้างลบหรือเปลี่ยนชื่อไฟล์ตามความสะดวกในไดเรกทอรีนี้

ทีนี้จะเกิดอะไรขึ้นถ้าผู้ใช้ตั้งใจหรือลบ (หรือเปลี่ยนชื่อ) ไฟล์ที่สร้างโดยผู้ใช้รายอื่นในไดเรกทอรีนี้?

ดีเพื่อหลีกเลี่ยงปัญหาประเภทนี้แนวคิดของการใช้บิตเหนียว เนื่องจาก/ tmpถูกใช้เพื่อจุดประสงค์นี้ ดังนั้นเพื่อหลีกเลี่ยงสถานการณ์ข้างต้น/ tmpใช้ sticky bit

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

mkdir demo
chmod 777 demo

ฉันสร้างไฟล์สองไฟล์โดยมีผู้ใช้ต่างกันในโฟลเดอร์นี้ที่มีสิทธิ์ 777

ls -ld demo
drwxrwxrwx 2 guru guru 4096 Mar 11 18:17 demo

ls -l demo
-rwxrwxrwx 1 abhi abhi    0 Mar 11 17:11 file1
-rwxrwxrwx 1 anshu anshu   0 Mar 11 18:15 file2

ตอนนี้เปิดบิตเหนียวบนนี้

 chmod +t demo/
 ls -ld demo
 drwxrwxrwt 2 guru guru 4096 Mar 11 18:17 demo

ตอนนี้จะเกิดอะไรขึ้นถ้าผู้ใช้หนึ่งคน (abhi) ต้องการเปลี่ยนชื่อผู้ใช้คนที่สอง (anshu)

mv /home/guru/demo/file2  /home/guru/demo/file3
mv: cannot move '/home/guru/demo/file2' to  '/home/guru/demo/file3': Operation not   permitted  

ต้นกำเนิดของความเหนียว

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

เมื่อเรียกใช้งานโปรแกรมจะต้องใช้เวลาในการโหลดโปรแกรมลงในหน่วยความจำก่อนที่ผู้ใช้จะสามารถเริ่มใช้งานได้จริง หากโปรแกรมตัวอย่างเช่นโปรแกรมแก้ไขถูกใช้บ่อยโดยผู้ใช้การหน่วงเวลาการเริ่มต้นใช้งานเป็นค่าใช้จ่ายในตอนนั้น

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

ระบบที่ทันสมัยเช่น Linux จัดการแคชของไฟล์เรียกทำงานและไฟล์อื่น ๆ โดยอัตโนมัติและไม่จำเป็นต้องมีความเหนียวสำหรับสิ่งนั้น

ที่มา: “ แนวคิด Linux Sticky Bit อธิบายด้วยตัวอย่าง” ที่ The Geek Stuff


2

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

/tmpเป็นไดเรกทอรีที่ใช้ร่วมกันมากที่สุดระหว่างกระบวนการและผู้ใช้และมันมี stickybit เพื่อให้แน่ใจว่าไม่มีผู้ใช้สามารถลบไดเรกทอรีแม้จะได้รับอนุญาต777และจะต้องเป็นเช่นนั้นเพื่อให้ความสามารถกับผู้ใช้และกระบวนการในการใช้ไดเรกทอรี ไม่มีความขัดแย้งในสิทธิ์

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