ทำไม chmod 777 -R / ออกจากระบบใช้ไม่ได้?


52

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


12
ที่เกี่ยวข้อง: serverfault.com/questions/364677/why-is-chmod-r-777-destructive
Glen

2
ฉันคิดว่ามันไม่ได้หยุดทำงาน แต่เพียงยกเลิกกระบวนการบูตในบางจุด หากคุณดู/var/log/syslogคุณจะเข้าใจเหตุผลด้วยซ้ำ
Hi-Angel

7
สิ่งสำคัญคือต้องรู้ว่าแม้ว่าสิ่งนี้จะไม่ทำลายสิ่งใดก็ตาม แต่ก็จะไม่ "อนุญาตให้ทุกคนทำอะไร" จะยังคงมีการดำเนินการจำนวนมากที่ "รูท" เท่านั้น (แม่นยำยิ่งกว่ากระบวนการที่มี UID ที่มีประสิทธิภาพ) สามารถทำได้
zwol

6
@Glen ถ้าโดย "ที่เกี่ยวข้อง" คุณหมายถึง "ซ้ำกันอย่างแน่นอนที่แสดงว่าทำไมเราควรจะสามารถตั้งค่าสถานะเป็นคู่หูข้ามไซต์" จากนั้นแน่นอน! ลิงค์ที่ดี ;)
underscore_d

4
ฉันชอบที่จะได้ยินเรื่องราวเกี่ยวกับคุณที่มาถามคำถามนี้
Dewi มอร์แกน

คำตอบ:


104

มีเหตุผลสองสามข้อ

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

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


41

คำตอบสั้น ๆ

ระบบ Linux ต้องการสิทธิ์เฉพาะสำหรับบางโปรแกรมเช่นsudoอื่น ๆ

เมื่อคุณเรียกคุณเช็ดสิทธิ์ทั้งหมดและแทนที่ด้วยchmod 777 -R / 777สิ่งนี้ทำให้ระบบใช้ไม่ได้เว้นแต่คุณจะกู้คืนสิทธิ์ทั้งหมดด้วยตนเอง

ในทางปฏิบัติมันเร็วกว่าและง่ายกว่าในการติดตั้งอีกครั้ง

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

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

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

อีกวิธีหนึ่ง (ที่แย่มาก) คือการเปิดใช้งานบัญชีรูทและอนุญาตให้ทุกคนเข้าสู่ระบบในฐานะรูท


11
อาจจะมีคนจะใช้เวลาและให้คำตอบที่รายละเอียด ;-)
Pilot6

1
ฉันสามารถชี้ไปที่วิธีที่ดีกว่าในการอนุญาตให้ทุกคนทำทุกอย่างในระบบนี้ - แต่การเขียนบทความเชิงลึกเกี่ยวกับสาเหตุที่ไบนารีแต่ละรายการต้องการการอนุญาตเฉพาะการตั้งค่าและการตั้งค่าสถานะนั้นค่อนข้างมากเกินไป ;-)
Phillip -Zyan K Lee- Stockmann

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

9
ดังนั้นPilot6คุณต้องบอกว่าโปรแกรมระบบได้รับการออกแบบในลักษณะที่ว่าหากการอนุญาตผิดไปพวกเขาจะไม่ได้รับอนุญาต / สามารถทำงานได้อย่างถูกต้อง? และโปรดPilot6ถ้าเป็นไปได้โปรดให้คำตอบที่ลึกกว่าพร้อมตัวอย่างและคำอธิบายว่าทำไมแอปพลิเคชั่นบางอย่างต้องได้รับการอนุญาต จำกัด ขอบคุณ
Brij Raj Kishore

13
@Goldname ความผิดพลาดเป็นข้อผิดพลาด - เป็นโปรแกรมจำนวนมากที่บอกว่า "ฉันไม่สามารถทำงานที่สำคัญกับระบบในสถานะนี้ดังนั้นฉันจึงยกเลิก"
Shadur

32

chmod มีความแตกต่างเล็กน้อย

chmod 0777พฤติกรรมที่แตกต่างจากchmod u+rwx,g+rwx,o+rwxที่setuidและsetgidเป็นศูนย์โดยแรกและเก็บรักษาไว้โดยหลัง

นั่นคือสาเหตุที่ระบบไม่สามารถใช้งานได้ คุณลบsetuid ที่จำเป็นออกจากโปรแกรมไม่กี่โปรแกรม

นี่คือรายการไฟล์ setuid หรือ setgid บนแล็ปท็อป Linux Fedora 23 ของฉัน:

[root@fedora23lnvr61]# find / -perm /g+s,u+s
/var/log/journal
/var/log/journal/75e870eb13c74fbf97556a32ecf80ea2
/opt/google/chrome/chrome-sandbox
/usr/bin/rogue
/usr/bin/gnuchess
/usr/bin/locate
/usr/bin/umount
/usr/bin/lbrickbuster2
/usr/bin/gpasswd
/usr/bin/crontab
/usr/bin/fusermount
/usr/bin/su
/usr/bin/at
/usr/bin/newuidmap
/usr/bin/sudo
/usr/bin/pkexec
/usr/bin/mount
/usr/bin/chsh
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/chage
/usr/bin/chfn
/usr/bin/write
/usr/bin/newgidmap
/usr/sbin/mount.nfs
/usr/sbin/lockdev
/usr/sbin/netreport
/usr/sbin/userhelper
/usr/sbin/usernetctl
/usr/sbin/unix_chkpwd
/usr/sbin/pam_timestamp_check
/usr/libexec/kde4/kdesud
/usr/libexec/kde4/kpac_dhcp_helper
/usr/libexec/dbus-1/dbus-daemon-launch-helper
/usr/libexec/qemu-bridge-helper
/usr/libexec/openssh/ssh-keysign
/usr/libexec/spice-gtk-x86_64/spice-client-glib-usb-acl-helper
/usr/libexec/utempter/utempter
/usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
/usr/libexec/Xorg.wrap
/usr/lib/polkit-1/polkit-agent-helper-1
/usr/lib64/vte-2.90/gnome-pty-helper
/usr/lib64/virtualbox/VBoxSDL
/usr/lib64/virtualbox/VirtualBox
/usr/lib64/virtualbox/VBoxNetNAT
/usr/lib64/virtualbox/VBoxHeadless
/usr/lib64/virtualbox/VBoxNetDHCP
/usr/lib64/virtualbox/VBoxNetAdpCtl
/usr/lib64/virtualbox/VBoxVolInfo
/usr/lib64/vte/gnome-pty-helper
[root@fedora23lnvr61]# 

ฉันลบรายการเสียงหลายสิบรายการในแคชและบันทึก


3
กล้าฉันสงสัยว่าทำไม gnuchess and rogue อยู่ในรายการนั้น?
WiseOldDuck

2
@WiseOldDuck: ฉันคาดหวังว่าเกมจะมีบิตดังนั้นพวกเขาจึงสามารถอัปเดตไฟล์ "คะแนนสูง" ของพวกเขาได้ แต่ไม่อนุญาตให้ผู้ใช้ที่ไม่มีสิทธิ์ทำเช่นนั้น
wallyk

3
ในฐานะที่เป็น @WiseOldDuck wallyk กล่าวว่าบวกจำ setuid ไม่ nessecarially ต้องใช้ราก (และ AFAIK setgid ไม่เป็นประโยชน์จริงๆสำหรับ root)
StarWeaver

5
เพื่อที่จะอธิบายสิ่งที่chmodกำลังทำอยู่และให้หลักฐานตัวอย่างสิ่งที่ขาดไปจากที่อื่น
underscore_d

1
นี่หมายความว่าchmod u+rwx,g+rwx,o+rwx -R /จะไม่ทำลายระบบหรือไม่
Dennis Jaheruddin

15

เพิ่มเติมจากคำตอบอื่น ๆ : คุณได้ลบ "sticky bit" จาก/tmp(ซึ่งมักจะมีสิทธิ์ 1777) และสิ่งนี้อาจทำให้เกิดปัญหาอื่น ๆ ที่ไม่คาดคิดเนื่องจากโปรแกรมจะสามารถเขียนหรือลบไฟล์ชั่วคราวของกันและกันได้

Sticky bit เป็นสิทธิ์พิเศษที่อนุญาตให้ทุกคนสร้างไฟล์ได้/tmpเฉพาะบุคคลที่สร้างไฟล์นั้นเพื่อย้ายหรือลบไฟล์


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

1
ดังนั้นเบ็นถ้าฉันเรียกใช้ chmod 1777 -R / ดังนั้นไม่ควรมีปัญหาเพราะฉันไม่ได้ล้างบิตเหนียว? -
Brij Raj Kishore

ขอบคุณ @hvd - คุณพูดถูกและฉันได้เปลี่ยนโพสต์เล็กน้อยเพื่อแสดงว่า
Ben XO

@BrijRajKishore คำถามยังคงเป็นว่าทำไมคุณทำเช่นนี้ในสถานที่แรก อูบุนตูและโปรแกรมที่ประกอบด้วยมันไม่ได้ถูกออกแบบมาให้ใช้งาน "ไม่อนุญาต" ด้วยเหตุผลหลายประการ มันจะมีเหตุผลมากกว่าที่จะเป็น "su" เพื่อหยั่งรากแทน
Ben XO

1
ไม่ทราบว่าจะส่งผลให้เกิดความผิดพลาดหรือไม่ เป็นไปได้โดยสิ้นเชิงว่าจะทำได้เพราะทันใดนั้นแอปพลิเคชันจะสามารถทำสิ่งต่าง ๆ กับไฟล์ชั่วคราวซึ่งอาจเกิดขึ้นโดยบังเอิญ - และอาจทำให้เกิดความผิดพลาด เนื่องจาก Ubuntu ไม่เคยทดสอบเช่นนี้คุณอาจเป็นคนแรกที่ค้นพบ :-) ในทางกลับกันการตั้งค่า bit sticky ในทุก ๆ โฟลเดอร์ในระบบอาจทำให้เกิดปัญหาอื่น ๆ อีกมากมายด้วยแอพพลิเคชั่นที่คาดว่าจะสามารถจัดการโปรแกรมได้เนื่องจากสิทธิ์ของกลุ่มในโฟลเดอร์ (เช่นโฟลเดอร์ที่มีสิทธิ์ 2777)
Ben XO
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.