Tại sao chmod 777 -R / khiến hệ thống không sử dụng được?


52

Tôi chỉ cấp quyền cho tất cả mọi người để làm bất cứ điều gì nhưng tại sao hệ thống gặp sự cố khi chỉ cấp quyền? Tôi chỉ sửa đổi quyền không thay đổi các tập tin.



2
Tôi nghĩ rằng, nó không bị sập, mà chỉ hủy bỏ quá trình khởi động tại một số điểm. Nếu bạn nhìn vào /var/log/syslog, bạn thậm chí sẽ tìm ra lý do.
Hi-Angel

7
Điều quan trọng cần biết là ngay cả khi điều này không phá vỡ mọi thứ, nó sẽ không "cấp phép cho tất cả mọi người làm bất cứ điều gì". Vẫn sẽ có một số lượng lớn các hành động mà chỉ "root" (chính xác hơn là một quá trình với UID zero hiệu quả) có thể làm.
zwol

6
@Glen nếu bằng "liên quan", bạn có nghĩa là "trùng lặp chính xác cho thấy lý do tại sao chúng ta có thể gắn cờ là bản sao trên các trang web", thì chắc chắn! liên kết tuyệt vời. ;)
gạch dưới

4
Tôi thực sự rất thích nghe câu chuyện về bạn đến để hỏi câu hỏi này.
Dewi Morgan

Câu trả lời:


104

Có một vài lý do.

Đầu tiên, ngoài các quyền đọc / ghi / thực thi thông thường, còn có một số bit khác mà quyền của tệp chứa. Đáng chú ý nhất setuidsetgid. Khi một chương trình có một trong các bit quyền này được thiết lập, nó sẽ nhận được "UID hiệu quả" và / hoặc "GID hiệu quả" của chủ sở hữu chương trình thay vì người dùng đã chạy nó. Điều này cho phép các chương trình chạy với nhiều quyền hơn người dùng đã chạy chúng. Nó được sử dụng bởi nhiều tiện ích hệ thống quan trọng bao gồm susudo. chmodLệnh của bạn xóa các bit này để lại các tiện ích không sử dụng được.

Thứ hai, một số chương trình (đáng chú ý ssh) thực hiện kiểm tra sự tỉnh táo về quyền của tệp và từ chối sử dụng các tệp có quyền mà họ thấy là không an toàn. Điều này làm giảm nguy cơ quản trị viên bất cẩn vô tình để lại lỗ hổng bảo mật nhưng nó khiến việc xử lý các quyền truy cập tệp bị xóa càng trở nên đau đớn hơn.


41

Một câu trả lời ngắn gọn.

Hệ thống Linux yêu cầu quyền cụ thể cho các chương trình nhất định như sudo, v.v.

Khi bạn chạy, chmod 777 -R /bạn xóa sạch tất cả các quyền và thay thế chúng bằng 777. Điều này làm cho hệ thống không thể sử dụng được trừ khi bạn tự khôi phục tất cả các quyền.

Trong thực tế, nó nhanh hơn và dễ dàng hơn để cài đặt lại.

Vấn đề là nhiều chương trình hệ thống được thiết kế theo cách mà chúng không bắt đầu nếu chúng "không thích" các quyền. Điều này được thực hiện vì lý do bảo mật.

Tôi nghĩ điều quan trọng là phải giải thích cách xử lý thiết kế hệ thống theo paractice hơn là giải thích lý do tại sao mỗi chương trình không hoạt động với các permissons sai.

Nếu bạn thực sự muốn tất cả người dùng có quyền không giới hạn trong Ubuntu, bạn có thể thêm tất cả người dùng vào sudonhóm thay vì thay đổi quyền truy cập tệp và thư mục. Điều đó sẽ có tác dụng tương tự, nhưng sẽ không làm hỏng hệ thống.

Một cách khác (một cách rất tệ) là kích hoạt tài khoản root và cho phép mọi người đăng nhập với quyền root.


11
Có lẽ ai đó sẽ mất thời gian và trả lời chi tiết ;-)
Pilot6

1
Tôi có thể chỉ ra một cách tốt hơn để cho phép mọi người làm mọi thứ trên hệ thống này - nhưng viết một bài viết chuyên sâu về lý do tại sao mỗi nhị phân cần các quyền, cài đặt và cờ cụ thể của nó là quá nhiều, imho. ;-)
Phillip -Zyan K Lee- Stockmann

4
Các hệ thống Linux không được thiết kế để cho phép mọi người làm mọi thứ. Bạn có thể kích hoạt tài khoản root và mọi người có thể đăng nhập bằng root cho điều đó. Thật là ngu ngốc, nhưng đây là cách.
Phi công6

9
Vì vậy, Pilot6 bạn muốn nói rằng các chương trình hệ thống được thiết kế theo cách mà nếu sự cho phép bị sai thì chúng không được phép / có thể hoạt động đúng không? Và Vui lòng Pilot6 nếu có thể, vui lòng cung cấp câu trả lời sâu hơn với các ví dụ và giải thích lý do tại sao một số ứng dụng yêu cầu quyền hạn chế. Cảm ơn.
Brij Raj Kishore

13
@Goldname Sự cố do lỗi - đó là toàn bộ số chương trình nói rằng "Tôi không thể thực hiện các chức năng quan trọng với hệ thống ở trạng thái này, vì vậy tôi đang hủy bỏ"
Shadur

32

chmod có sắc thái tinh tế.

chmod 0777hành xử khác với chmod u+rwx,g+rwx,o+rwxtrong đó setuidsetgid bằng 0 bởi cái đầu tiên và được bảo tồn bởi cái sau.

Đó là lý do tại sao hệ thống trở nên không sử dụng được. Bạn đã loại bỏ setuid cần thiết khỏi một vài chương trình.

Dưới đây là danh sách các tập tin setuid hoặc setgid trên máy tính xách tay Linux Fedora 23 của tôi:

[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]# 

Tôi đã loại bỏ hàng chục mục tiếng ồn trong bộ nhớ cache và nhật ký.


3
Dám tôi tự hỏi tại sao gnuchess và lừa đảo có trong danh sách đó?
WiseOldDuck

2
@WiseOldDuck: Tôi hy vọng các trò chơi có bit để họ có thể cập nhật tệp "điểm cao" của mình nhưng không cho phép bất kỳ người dùng không có đặc quyền nào làm như vậy.
wallyk

3
@WiseOldDuck Như wallyk nói, cộng với, hãy nhớ setuid không nhất thiết phải sử dụng root (và afaik setgid không thực sự hữu ích cho root)
StarWeaver

5
Sẽ bận tâm để giải thích những gì chmodđang làm và cung cấp bằng chứng ví dụ, một cái gì đó rất thiếu ở nơi khác.
gạch dưới

1
Điều này có nghĩa là chmod u+rwx,g+rwx,o+rwx -R /sẽ không phá vỡ hệ thống?
Dennis Jaheruddin

15

Bổ sung cho các câu trả lời khác: bạn cũng đã xóa "bit dính" khỏi /tmp(thường có quyền 1777) và điều này có thể gây ra các sự cố không mong muốn khác, vì các chương trình có thể ghi hoặc xóa các tệp tạm thời của nhau.

Bit dính là một quyền đặc biệt, trong khi cho phép bất kỳ ai tạo tệp vào /tmp, chỉ cho phép người tạo ra nó di chuyển hoặc xóa nó.


4
"và điều này sẽ ngăn bất kỳ ai trừ root sử dụng thư mục system / tmp." - Điều đó có vẻ không đúng. Nó vẫn sẽ cho phép bất cứ ai sử dụng thư mục system / tmp. Không cần bit dính nếu người dùng, nhóm và những người khác đều có tất cả các quyền. Tuy nhiên, nó sẽ cho phép mọi người xóa các tệp của người khác.
hvd

1
Vì vậy, Ben Nếu tôi chạy chmod 1777 -R / thì không có vấn đề gì vì tôi không xóa bit dính? -
Brij Raj Kishore

Cảm ơn @hvd - bạn đã đúng và tôi đã thay đổi bài đăng một chút để phản ánh điều đó.
Ben XO

@BrijRajKishore, câu hỏi vẫn là tại sao bạn lại làm việc này ngay từ đầu. Ubuntu và các chương trình bao gồm nó không được thiết kế để chạy "không được phép", vì nhiều lý do. Thay vào đó, sẽ hợp lý hơn khi "su" vào root.
Ben XO

1
Không biết nó sẽ dẫn đến một vụ tai nạn. Điều đó hoàn toàn có thể xảy ra, bởi vì đột nhiên các ứng dụng sẽ có thể thực hiện mọi thứ với các tệp tạm thời của nhau - có thể vô tình - và điều này có thể gây ra sự cố. Vì Ubuntu không bao giờ được thử nghiệm như thế này, nên có lẽ bạn sẽ là người đầu tiên phát hiện ra. :-) Mặt khác, việc cài đặt bit dính trên mỗi thư mục trên hệ thống có thể gây ra nhiều vấn đề khác, với các ứng dụng được cho là có thể thao tác các chương trình vì quyền của nhóm trên thư mục (ví dụ: thư mục có quyền 2777).
Ben XO
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.