สิทธิ์ของไฟล์ทำงานอย่างไรสำหรับผู้ใช้“ root”


28

ฉันมีไฟล์ต่อไปนี้:

---------- 1 Steve Steve 341 2017-12-21 01:51 myFile.txt

ฉันเปลี่ยนผู้ใช้rootเป็นเทอร์มินัลและฉันสังเกตเห็นพฤติกรรมดังต่อไปนี้:

  • ฉันสามารถอ่านไฟล์นี้และเขียนมันได้

  • ฉันไม่สามารถเรียกใช้ไฟล์นี้

  • หากฉันตั้งค่าxบิตในสิทธิ์ผู้ใช้ ( ---x------) หรือสิทธิ์กลุ่ม ( ------x---) หรือสิทธิ์อื่น ๆ ( ---------x) ของไฟล์ดังนั้นฉันจะสามารถเรียกใช้ไฟล์นี้ได้

ใครสามารถอธิบายให้ฉันหรือชี้ให้ฉันไปที่บทช่วยสอนที่อธิบายกฎทั้งหมดที่ใช้บังคับเมื่อrootผู้ใช้จัดการกับไฟล์และไดเรกทอรี?

คำตอบ:


38

สิทธิพิเศษในการเข้าถึงไฟล์และไดเรกทอรีนั้นขึ้นอยู่กับความสามารถไม่ใช่เพียงแค่ว่าเป็นrootหรือไม่ ในทางปฏิบัติrootมักจะมีความสามารถที่เป็นไปได้ทั้งหมด แต่มีบางสถานการณ์ที่ทุกคนอาจถูกดร็อปหรือบางคนมอบให้กับผู้ใช้คนอื่น ๆ (กระบวนการของพวกเขา)

โดยสังเขปคุณได้อธิบายวิธีการตรวจสอบการควบคุมการเข้าถึงการทำงานของกระบวนการพิเศษ นี่คือความสามารถที่แตกต่างกันจริง ๆ มีผลกระทบต่อมันอย่างไร:

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

ไม่ได้ใช้กับไฟล์ที่ไม่ได้ทำเครื่องหมายว่าสามารถเรียกใช้งานได้ ความคิดเห็นในgeneric_permission ( fs/namei.c) ก่อนที่จะตรวจสอบการเข้าถึงสำหรับแฟ้มกล่าวว่า

การอ่าน / เขียน DACs นั้นสามารถ overridable ได้เสมอ DAC ที่ทำงานได้นั้นสามารถ overridable ได้เมื่อมีชุดบิตอย่างน้อยหนึ่งชุด

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

อย่างไรก็ตามหากคุณสามารถแทนที่การอนุญาตคุณสามารถทำสำเนาที่ปฏิบัติการได้และเรียกใช้มัน (แม้ว่ามันอาจสร้างความแตกต่างในทางทฤษฎีสำหรับไฟล์ setuid ของกระบวนการก็สามารถเอาชนะการอนุญาตของไฟล์ ( CAP_DAC_OVERRIDE) แต่ไม่มีความสามารถอื่น ๆ ที่เกี่ยวข้อง ( CAP_FSETID/ CAP_FOWNER/ CAP_SETUID) แต่การCAP_DAC_OVERRIDEอนุญาตให้แก้ไข/etc/shadowและอะไรทำนองนั้น เพื่อให้มีสิทธิ์เข้าถึงแบบเต็มเท่านั้น)

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

การแทนที่บิตเหนียวในไดเรกทอรีจะกล่าวถึงเฉพาะภายใต้CAP_FOWNERดังนั้นดูเหมือนว่าCAP_DAC_OVERRIDEจะไม่เพียงพอที่จะเพิกเฉย (มันจะให้สิทธิ์คุณเขียน แต่โดยปกติแล้วจะอยู่ในไดเรกทอรีเหนียวที่คุณมีอยู่แล้วและ+tจำกัด ไว้)

(ฉันคิดว่าอุปกรณ์พิเศษนับเป็น "ไฟล์" ที่นี่อย่างน้อยgeneric_permission()มีเพียงการตรวจสอบประเภทของไดเรกทอรี แต่ฉันไม่ได้ตรวจสอบนอกเหนือจากนั้น)


แน่นอนว่ายังมีสถานการณ์ที่แม้ความสามารถจะไม่ช่วยให้คุณแก้ไขไฟล์ได้:

  • ไฟล์บางไฟล์ใน/procและ/sysเนื่องจากไฟล์เหล่านี้ไม่ใช่ไฟล์จริง
  • SELinux และโมดูลความปลอดภัยอื่น ๆ ที่อาจ จำกัด การรูท
  • chattrเปลี่ยนไม่ได้+iและผนวกเฉพาะ+aธงบน ext2 / ext3 / ext4 ซึ่งทั้งคู่หยุดรากแม้และป้องกันการเปลี่ยนชื่อไฟล์ ฯลฯ
  • ระบบไฟล์เครือข่ายที่เซิร์ฟเวอร์สามารถควบคุมการเข้าถึงของตัวเองเช่นroot_squashใน NFS แมปรากกับใคร
  • FUSE ซึ่งฉันคิดว่าสามารถทำได้ทุกอย่าง
  • การเมาท์แบบอ่านอย่างเดียว
  • อุปกรณ์แบบอ่านอย่างเดียว

น่าแปลกที่ความคิดเห็นของไฟล์ต้นฉบับดูเหมือนจะไม่ได้รับการสะท้อนในcapabilities(7)หน้าคน - พิจารณายื่นรายงานข้อผิดพลาด!
Toby Speight

@ilkkachu ตามที่แสดงให้เห็นว่าrootมีrw-สิทธิ์ในการ (เกือบ) ไฟล์ใด ๆ และได้รับxอนุญาตจากนั้นxบิตจะต้องตั้งค่าในการอนุญาตของผู้ใช้ / กลุ่ม / อื่น ๆ ในไฟล์ แต่สิ่งที่เกี่ยวกับไดเรกทอรีจะrootมีrwxสิทธิ์ในไดเรกทอรีใด ๆ (แม้ว่าไดเรกทอรีไม่มีสิทธิ์เลย ( ----------))?
โจเซฟ

@Joseph ใช่CAP_DAC_OVERRIDEอนุญาตให้แทนที่สิทธิ์การใช้งานไดเรกทอรีทั้งหมดดังนั้นคุณจะได้รับการอ่านเขียนและเข้าถึงไดเรกทอรี (เช่นรายการเนื้อหาสร้างและยกเลิกการเชื่อมโยงไฟล์) ความคิดเห็นที่ฉันยกมาเกี่ยวกับ exec bit อยู่ในบริบทของไฟล์ (เท่านั้น)
ilkkachu

11

เหมือนกับที่คุณสังเกตเห็นสำหรับการอนุญาตเริ่มต้น:

  • อ่านและเขียน:
    โดยค่าเริ่มต้นผู้ใช้รูทสามารถเข้าถึงไฟล์ใด ๆ ในระบบ คุณอาจจะเอาการเข้าถึงโดยการเปลี่ยนคุณลักษณะเช่นอธิบายที่นี่: chattr นี่คือการเชื่อมโยงกับความสามารถ

  • ดำเนินการ:
    ผู้ใช้รูทไม่ได้รับอนุญาตให้ดำเนินการเว้นแต่ว่าตั้งบิตการดำเนินการอย่างน้อยหนึ่ง


เป็นไปได้ที่จะมีไฟล์ที่รูทไม่สามารถเขียนหรือลบได้ ดังนั้น "ผู้ใช้รูทสามารถเข้าถึงไฟล์ใด ๆ ในระบบ" ไม่ถูกต้อง
Lukas Boersma

คุณหมายถึงต้องการระบบไฟล์แบบอ่านอย่างเดียว? หรือคุณมีอีกกรณี
Kevin Lemaire

1
ฉันกำลังพูดถึงกรณีเช่นนี้: ไฟล์ที่ไม่สามารถเขียนได้, ไฟล์ที่ไม่สามารถลบได้
Lukas Boersma

5

จะได้รับโดยmyFile.txtchmod 000 myFile.txt

0 no permission
1 execute
2 write
3 execute + write
4 read 
5 read + execute
6 read + write
7 all

--------- หมายถึงไม่ได้รับอนุญาตสำหรับผู้ใช้กลุ่มและอื่น ๆ

ผู้ใช้รูทมีความสามารถไม่ จำกัดในการแก้ไขไฟล์นี้ การอ่าน / เขียนได้รับอนุญาต ในการเรียกใช้ไฟล์นี้ผู้ใช้รูทต้องทำให้สามารถเรียกทำงานได้ (chmod 100, 010 หรือ 001)


2

โหมดดำเนินการจะถือว่าแตกต่างกันเล็กน้อยจากโหมดอื่น ๆ

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

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

BTW สคริปต์เป็นกรณีที่น่าสนใจในเรื่องนี้ สคริปต์เป็นไฟล์ข้อมูลสำหรับล่ามที่เกี่ยวข้อง หากสคริปต์มี#!บรรทัดคุณสามารถรันมันเป็นโปรแกรม - ล่ามที่มีชื่ออยู่ใน shebang จะถูกเรียกใช้โดยใช้ชื่อไฟล์สคริปต์เป็นอาร์กิวเมนต์ แต่สิ่งนี้จะทำได้ก็ต่อเมื่อมีการตั้งค่าการอนุญาตให้ใช้สิทธิ บนมืออื่น ๆ /bin/bash scriptnameคุณก็สามารถเรียกใช้ล่ามโดยตรงตัวอย่างเช่น ล่ามจะดูแลก็ต่อเมื่อพวกเขาสามารถอ่านไฟล์ได้พวกเขาจะไม่ตรวจสอบสิทธิ์ดำเนินการ


1

ให้ฉันอธิบายคุณตามหลักวิชา

ผู้ใช้รูทเป็นราชาของระบบปฏิบัติการ

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

โปรดจำไว้เสมอว่าในรูต Linux สามารถทำสิ่งใดก็ได้โดยไม่มีข้อ จำกัด ในการรูท


ไม่มีอะไร. หากไฟล์มีคุณสมบัติที่เปลี่ยนรูปไม่ได้เช่นนั้นแม้กระทั่ง root ไม่สามารถเปลี่ยนแปลงได้ (เว้นแต่เขาจะลบแอตทริบิวต์นั้นออกอย่างชัดเจน)
Ruslan

@ Ruslan ใช่ แต่มันเป็นกรณีพิเศษมากเกินไปที่เขาเป็นคนใหม่ดังนั้นฉันจึงอธิบายว่าเขาเป็นพื้นฐานโดยค่าเริ่มต้นคุณสมบัติเหล่านี้จะไม่เกิดขึ้น
Hassan Sohail
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.