ใครสามารถเปลี่ยนการอนุญาตของไฟล์ / ไดเรกทอรีได้บ้าง


14

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

คำตอบ:


19

เฉพาะเจ้าของและroot(ผู้ใช้ขั้นสูง) เท่านั้นที่ได้รับอนุญาตให้เปลี่ยนสิทธิ์ของไฟล์หรือไดเรกทอรี ซึ่งหมายความว่าเจ้าของและผู้ใช้ขั้นสูงสามารถตั้งค่าการอ่าน ( r) เขียน ( w) และเรียกใช้ ( x) ได้ แต่เปลี่ยนเป็นเจ้าของ (ผู้ใช้ / กลุ่ม) ของไฟล์และไดเรกทอรีที่มีคำสั่งchown/ ที่ได้รับอนุญาตเท่านั้นที่จะchgrproot


19
เจ้าของไฟล์อาจเปลี่ยนความเป็นเจ้าของกลุ่มของไฟล์นั้นหากผู้ใช้เป็นสมาชิกของกลุ่มใหม่
Kusalananda

7

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

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

ชอบมาก

14:14 mybox:~ mkdir mydir
14:14 mybox:~ cd mydir/
14:14 mybox:mydir echo foo | sudo tee yourfile
foo
14:14 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  3 me    staff  102 Apr 11 14:14 .
-rw-r--r--  1 root  staff    4 Apr 11 14:14 yourfile

เราสร้างไดเรกทอรีและเขียนไฟล์เป็นรูท เนื่องจาก root เป็นเจ้าของไฟล์เราไม่สามารถเขียนได้และไม่สามารถ chmod:

14:15 mybox:mydir echo bar > yourfile 
-bash: yourfile: Permission denied
14:15 mybox:mydir chmod a+x yourfile
chmod: Unable to change file mode on yourfile: Operation not permitted

อย่างไรก็ตามเรามีสิทธิ์เขียนไปยังไดเรกทอรีดังนั้นเราจึงสามารถแทนที่ไฟล์เพื่อให้ได้กรรมสิทธิ์:

14:15 mybox:mydir mv yourfile yourfile2
14:15 mybox:mydir cp yourfile2 yourfile
14:15 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  4 me   staff  136 Apr 11 14:15 .
-rw-r--r--  1 me   staff    4 Apr 11 14:15 yourfile

และตอนนี้เราเป็นเจ้าของเราสามารถทำสิ่งที่เราต้องการด้วยไฟล์นั้น:

14:15 mybox:mydir echo bar > yourfile 
14:15 mybox:mydir chmod a+x yourfile
14:16 mybox:mydir cat yourfile
bar

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

14:17 mybox:mydir ls -l yourfile2
-rw-r--r--  1 root  staff  4 Apr 11 14:14 yourfile2

คุณรู้หรือไม่ว่าการแจกจ่าย Linux รองรับคุณสมบัติความปลอดภัยเพิ่มเติมเช่น Windows หรือไม่ หากฉันอยู่ใน Windows ฉันสามารถตั้งค่าสิทธิ์การลบของไฟล์เป็นปฏิเสธเพื่อป้องกันการลบแม้ว่าไดเรกทอรีจะได้รับอนุญาต
Kevin Li

รสชาติลินุกซ์ปัจจุบัน (ส่วนใหญ่) สนับสนุนการควบคุมการเข้าถึงระดับไฟล์ ( getfacl / setfacl) ซึ่งให้ความยืดหยุ่นมากกว่าการอนุญาตไฟล์สไตล์ "คลาสสิค" การลบไฟล์ใน * nix ทำงานโดยการลบลิงค์ไปยังไฟล์ออกจากไดเรกทอรีดังนั้นการลบไฟล์จะถูกควบคุมโดยการอนุญาตของไดเรกทอรี; การอนุญาตไฟล์เองไม่มีบทบาทใด ๆ
เบส

เป็นจริงอย่างมากกับปรัชญา Unix ของ“ ทุกอย่างเป็นไฟล์” คุณกำลังบอกว่าสิ่งนี้ไม่สามารถทำได้ใน Linux?
Kevin Li

3
@KevinLi คำตอบนี้ยังไม่สมบูรณ์ คุณสามารถตั้งค่าsticky bitในไดเรกทอรีเพื่อจำกัดความสามารถของผู้ที่ไม่ใช่เจ้าของในการลบหรือเปลี่ยนชื่อไฟล์ ดูคำถามนี้และคำตอบ: unix.stackexchange.com/questions/79395/…ไม่จำเป็นต้องใช้ ACLs หรือโครงร่างอื่น ๆ
Andrew Henle

@KevinLi * ระบบไฟล์ nix นั้นแตกต่างจากระบบปฏิบัติการ Windows มาก ไฟล์มีอยู่แยกต่างหากจากลำดับชั้นไดเรกทอรีและพวกเขาสามารถมี "ฮาร์ดลิงก์" หลายตัวชี้ไปที่พวกเขาในไดเรกทอรี การลบไฟล์จริงๆแล้วหมายถึงการลบฮาร์ดลิงก์ซึ่งทำในไดเรกทอรี ไฟล์จะติดตามจำนวนฮาร์ดลิงก์ที่ชี้ไปที่นั้นและไฟล์จริงจะยังคงอยู่บนดิสก์ตราบใดที่มีฮาร์ดลิงก์อย่างน้อยหนึ่งลิงก์ชี้ไปที่มัน ดังนั้นการลบจะถูกควบคุมโดยสิทธิ์ directory ซึ่งทำมีตัวเลือกพิเศษให้มีเพียงการลบโดยเจ้าของไฟล์และรากเป็นแอนดรูกล่าวว่า
เบส

1

chmodคำสั่งอย่างเป็นธรรมโดยตรงเรียกเรียกระบบที่มีชื่อเดียวกัน; man page สำหรับการchmod(2)เรียกของระบบ (บน Linux 4.10) พูดว่า:

UID ที่มีประสิทธิภาพของกระบวนการที่เรียกจะต้องตรงกับเจ้าของไฟล์หรือกระบวนการนั้นต้องได้รับสิทธิพิเศษ (Linux: ต้องมีCAP_FOWNERความสามารถ)

หากกระบวนการเรียกไม่ได้รับสิทธิพิเศษ (Linux: ไม่มีCAP_FSETIDความสามารถ) และกลุ่มของไฟล์ไม่ตรงกับ ID กลุ่มที่มีประสิทธิภาพของกระบวนการหรือหนึ่งใน ID กลุ่มเสริมของมัน S_ISGIDบิตจะถูกปิด แต่สิ่งนี้ จะไม่ทำให้เกิดข้อผิดพลาดในการส่งคืน

ใช่กระบวนการที่ทำงานในฐานะรูทสามารถเปลี่ยนแปลงการอนุญาตของไฟล์ใด ๆ หากไม่ได้ลดCAP_FOWNERความสามารถลง


อีกอย่างที่น่าสนใจคือchown; หน้าคนสำหรับchown(2)พูดว่า:

เฉพาะกระบวนการที่ได้รับสิทธิพิเศษ (Linux: หนึ่งที่มีCAP_CHOWNความสามารถ) อาจเปลี่ยนเจ้าของไฟล์ เจ้าของไฟล์อาจเปลี่ยนกลุ่มของไฟล์เป็นกลุ่มใดก็ได้ที่เจ้าของนั้นเป็นสมาชิก กระบวนการพิเศษ (Linux: with CAP_CHOWN) อาจเปลี่ยนแปลงกลุ่มโดยพลการ

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