Sticky bit ทำงานอย่างไร


148

SUID

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

แต่ฉันไม่รู้ว่าสิ่งที่เก็บไว้ในหน่วยความจำ และฉันจะเห็นพวกเขาอย่างไรในกรณีนี้


นี่คือบทแนะนำที่ดีพร้อมตัวอย่างและคำอธิบายที่ใช้งานได้ กุญแจสำคัญในการทำความเข้าใจนี้เป็นระบบฐานแปดที่เกี่ยวข้อง ลินุกซ์ Bits Sticky สอนด้วยตัวอย่างการทำงาน
CMP

คำตอบ:


193

นี่อาจเป็นหนึ่งในสิ่งที่น่ารำคาญที่สุดของฉันที่ผู้คนสับสนตลอดเวลา บิต SUID / GUID และ sticky-bit เป็น 2 สิ่งที่แตกต่างอย่างสิ้นเชิง

ถ้าคุณทำman chmodคุณสามารถอ่านเกี่ยวกับ SUID และ sticky-bits หน้าคนสามารถใช้ได้ที่นี่เช่นกัน

พื้นหลัง

สิ่งที่สกัดมา

ตัวอักษรrwxXstเลือกบิตโหมดไฟล์สำหรับผู้ใช้ที่ได้รับผลกระทบ: อ่าน (r), เขียน (w), เรียกใช้ (หรือค้นหาไดเรกทอรี) (x), เรียกใช้ / ค้นหาเฉพาะในกรณีที่ไฟล์เป็นไดเรกทอรีหรือมีสิทธิ์ดำเนินการบางอย่างแล้ว ผู้ใช้ (X), การตั้งค่าผู้ใช้หรือกลุ่ม ID ในการดำเนินการ (s) , ถูก จำกัด ธงลบหรือ บิตเหนียว (t)

SUID / GUID

สิ่งที่หน้า man ด้านบนพยายามจะพูดคือตำแหน่งที่บิต x ใช้ใน rwxrwxrwx สำหรับ octal ผู้ใช้ (กลุ่มที่ 1 ของ rwx) และ octal กลุ่ม (กลุ่มที่ 2 ของ rwx) สามารถใช้สถานะเพิ่มเติมที่ x กลายเป็น เอส เมื่อสิ่งนี้เกิดขึ้นกับไฟล์นี้เมื่อดำเนินการ (หากเป็นโปรแกรมและไม่ใช่แค่เชลล์สคริปต์) จะทำงานโดยได้รับอนุญาตจากเจ้าของหรือกลุ่มของไฟล์

ดังนั้นหากไฟล์เป็นเจ้าของโดย root และเปิด SUID bit โปรแกรมจะทำงานในฐานะ root แม้ว่าคุณจะรันมันเป็นผู้ใช้ปกติ สิ่งเดียวกันนี้ใช้กับบิต GUID

สิ่งที่สกัดมา

SETUID และ SETGID BITS

chmod ล้างบิต set-group-ID ของไฟล์ปกติหาก ID กลุ่มของไฟล์ไม่ตรงกับ ID กลุ่มที่มีประสิทธิภาพของผู้ใช้หรือหนึ่งใน ID กลุ่มเสริมของผู้ใช้ยกเว้นว่าผู้ใช้มีสิทธิ์ที่เหมาะสม ข้อ จำกัด เพิ่มเติมอาจทำให้บิต set-user-ID และ set-group-ID บิตของ MODE หรือ RFILE ถูกละเว้น พฤติกรรมนี้ขึ้นอยู่กับนโยบายและการทำงานของการเรียกระบบ chmod เมื่อมีข้อสงสัยให้ตรวจสอบพฤติกรรมของระบบพื้นฐาน

chmod รักษาบิตของ set-user-ID และ set-group-ID บิตเว้นแต่คุณจะระบุเป็นอย่างอื่นอย่างชัดเจน คุณสามารถตั้งค่าหรือล้างบิตด้วยโหมดสัญลักษณ์เช่น u + s และ gs และคุณสามารถตั้งค่าบิต (แต่ไม่ชัดเจน) บิตด้วยโหมดตัวเลข

ตัวอย่าง SUID / GUID

ไม่มี SUID / GUID - เพียงแค่บิตrwxr-xr-xมีการตั้งค่า

$ ls -lt b.pl
-rwxr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid & ผู้ใช้ที่เปิดใช้งานบิตที่ใช้งานได้ (ตัวพิมพ์เล็ก) - บิตrwsr-xrxถูกตั้งค่า

$ chmod u+s b.pl 
$ ls -lt b.pl 
-rwsr-xr-x 1 root root 179 Jan  9 01:01 b.pl

SUID เปิดการใช้งานและบิตปฏิบัติการปิดการใช้งาน (พิมพ์ใหญ่ S) - บิตrwSr-xr-xมีการตั้งค่า

$ chmod u-x b.pl
$ ls -lt b.pl 
-rwSr-xr-x 1 root root 179 Jan  9 01:01 b.pl

GUID และกลุ่มของบิตปฏิบัติการเปิดการใช้งาน (ตัวพิมพ์เล็ก s) - บิตrwxr-SR-xมีการตั้งค่า

$ chmod g+s b.pl
$  ls -lt b.pl 
-rwxr-sr-x 1 root root 179 Jan  9 01:01 b.pl

GUID เปิดการใช้งานและบิตปฏิบัติการปิดการใช้งาน (พิมพ์ใหญ่ S) - บิตrwxr-SR-xมีการตั้งค่า

$ chmod g-x b.pl
$  ls -lt b.pl 
-rwxr-Sr-x 1 root root 179 Jan  9 01:01 b.pl

เหนียวเล็กน้อย

Sticky บิตในทางกลับกันแสดงเป็นtเช่นกับ/tmpไดเร็กทอรี:

$ ls -l /|grep tmp
drwxrwxrwt. 168 root root 28672 Jun 14 08:36 tmp

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

สิ่งที่สกัดมา

ธงลบที่ถูก จำกัด หรือ BIT เหนียว

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


43
ในความเป็นจริงแล้วสามารถนำบิตบิตไปใช้กับไฟล์ที่เรียกทำงานได้ซึ่งทำให้สิ่งเหล่านี้ยังคงอยู่ในการสลับหลังจากที่ถูกโหลดครั้งแรก สิ่งนี้สามารถบันทึกการใช้ดิสก์ / เครือข่าย (NFS) และ CPU ที่ไม่จำเป็นจำนวนมากสำหรับโปรแกรมที่ใช้งานมาก อย่างไรก็ตามทั้ง Linux และส่วนใหญ่ (ทั้งหมด) ระบบ Unix ไม่สนับสนุนสิ่งนี้อีกต่อไป (ถูกลบออกจากเคอร์เนล) มันเป็น "เหนียว" เพราะปฏิบัติการติดอยู่ในการแลกเปลี่ยน นอกจากนี้ยังใช้สำหรับไดเรกทอรีตามที่คุณอธิบาย
Baard Kopperud

4
ที่จริง "ใช้มากหรือใหญ่มาก" จะเป็นคำอธิบายที่ดีกว่า จำได้ว่าวิทยาลัยของฉันมีเว็บเบราว์เซอร์ Netscape เป็น "เหนียว" ในคอมพิวเตอร์ HP-UX ของพวกเขากลับมาในปี 1995 ดังนั้นโปรแกรมขนาดเล็กที่ใช้บ่อยมาก (เช่นคำสั่งของระบบทำงานบ่อยโดย cron) และโปรแกรมขนาดใหญ่ (เช่น Netscape) เป็นผู้สมัครที่สำคัญที่จะทำให้ "เหนียว" ในทั้งสองกรณีการโหลดซ้ำจากดิสก์ / NFS อย่างต่อเนื่องจะสิ้นเปลือง
Baard Kopperud

8
โปรแกรม Sticky-bit นั้นหมายถึงการอยู่ใน RAM ไม่ใช่การสลับ (การโหลดรูปภาพจากไฟล์ swap นั้นเร็วกว่าการโหลดจากดิสก์ระบบไฟล์) lsมันตั้งใจสำหรับคำสั่งปฏิบัติการระดับที่สำคัญเช่น เห็นได้ชัดว่ามีเพียง superuser เท่านั้นที่สามารถตั้งค่า bit bit ของไฟล์ได้ มันมีความสำคัญน้อยลงหลังจากมีการแนะนำหน่วยความจำเสมือนและไลบรารีที่แชร์และโดยเฉพาะอย่างยิ่งเมื่อเพจเจอร์เริ่มฉลาดขึ้นและสามารถตัดสินใจได้ว่าจะให้เพจใดอาศัยอยู่
อเล็กซิส

4
และเนื่องจากคุณสมบัติแบบติดหนึบไม่มีความหมายสำหรับไดเรกทอรีบิตของมาสก์สิทธิ์จะถูกตีความในภายหลังเพื่อแก้ไขความหมายการสร้างไฟล์ดั้งเดิมสำหรับไดเรกทอรี
alexis

5
@alexis: แต่เดิมโปรแกรมเหนียว ๆ ถูกเก็บไว้ในพื้นที่สวอป นี่เร็วกว่าการอ่านจากระบบไฟล์เพราะการอ่านอิมเมจไฟล์ swap นั้นเป็นส่วนที่ต่อเนื่องกันและสามารถอ่านได้แบบอะซิงโครนัสเป็นส่วนใหญ่ ด้วยระบบไฟล์ก่อนหน้านี้ไม่มีเซกเตอร์ "ความยาวรัน" และไดรเวอร์ระบบไฟล์ก่อนหน้าส่วนใหญ่อ่านหนึ่งเซกเตอร์ในเวลาแม้ว่าเซกเตอร์ที่เกิดขึ้นจะติดต่อกัน ผลที่ได้จาก PDP-40 คือโปรแกรมที่ดูเหมือนจะโหลดได้ทันทีในขณะที่โปรแกรมที่ไม่เหนียวเหนอะหนะใช้เวลาสองหรือสองวินาทีตามปกติ ฉันคิดว่าเราedเหนียวเท่านั้น
wallyk

8

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

ฉันคิดว่ามันเป็นข้อมูลที่ล้าสมัยไปแล้วในวันนี้ยูนิกซ์สมัยใหม่ส่วนใหญ่ไม่สนใจสิ่งนั้น ใน Linux บิตเหนียวนั้นเกี่ยวข้องกับไดเรกทอรีเท่านั้น ดูที่นี่และข้อมูลค่อนข้างบทความวิกิพีเดีย

อย่างไรก็ตามในภาพเก่านั้นภาพ (เฉพาะ "รหัส" ไม่ใช่ข้อมูล) ถูกเก็บไว้ในหน่วยความจำเสมือนเท่านั้น - เปลี่ยนเป็นปกติไม่ใช่ในหน่วยความจำจริงเพื่อให้ทำงานได้เร็วขึ้นในครั้งต่อไป


3

สิ่งที่เป็นบิตเหนียว?

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

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


1
ไม่ถูกต้อง: en.wikipedia.org/wiki/Sticky_bit
AB

7
@AB ดูเหมือนจะค่อนข้างแม่นยำสำหรับฉันเกือบจะถึงจุดที่จะต้องถอดความจุดเริ่มต้นของบทความ Wikpedia ที่คุณอ้างถึง มีอะไรผิดปกติกับมัน?
roaima

ฉันจะบอกว่าคำตอบไม่สมบูรณ์ "Sticky" ยังหมายถึงว่าการปฏิบัติการจะถูกเก็บไว้ในพื้นที่สว็อปเพื่อให้มันทำงานได้เร็วขึ้น ตอนนี้นี่คือประวัติศาสตร์โบราณ แต่ในไดรเวอร์ระบบไฟล์รุ่นเก่าที่ใช้ในการอ่านหนึ่งภาคส่วนในเวลาแม้ว่าภาคที่เกิดขึ้นจะติดต่อกัน สิ่งนี้ทำให้ไฟล์ปฏิบัติการที่ไม่ติดหนึบจะช้าความหนืดทำให้เกิดความรู้สึกทั้งหมดในเวลานั้น
GhostCode
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.