为什么chmod 777 -R /使系统无法使用?


52

我只授予所有人执行任何操作的权限,但是为什么系统仅授予权限会崩溃?我只是在修改权限,而不更改文件。



2
我认为这不是崩溃,而是只是在某个时候中止了引导过程。如果您看一下/var/log/syslog,甚至会找出原因。
Hi-Angel

7
重要的是要知道,即使这不会破坏事情,也不会 “允许所有人做任何事情”。仍然会有很多动作只能由“ root”(更确切地说,是一个有效UID为零的进程)来执行。
zwol

6
@Glen如果用“相关”来表示,则是“精确重复,表明为什么我们应该能够在各个站点之间标记为重复”,然后确定!很棒的链接。;)
underscore_d

4
我真的很想听到关于您的故事开始问这个问题。
Dewi Morgan

Answers:


104

有两个原因。

首先,除了通常的读/写/执行权限外,文件权限还包含其他一些位。最值得注意的是setuidsetgid。当运行具有这些权限位之一的程序时,它将获得程序所有者(而不是运行它的用户)的“有效UID”和/或“有效GID”。这样,程序可以以比运行它们的用户更多的权限运行。许多重要的系统实用程序(包括su和)都使用它sudo。您的chmod命令清除这些位,使实用程序不可用。

其次,某些程序(特别是ssh)会对文件权限进行完整性检查,并拒绝使用它们认为不安全的权限的文件。这降低了管理员疏忽大意而意外留下安全漏洞的风险,但是这使得处理清除的文件权限更加痛苦。


41

一个简短的答案。

Linux系统需要某些程序(例如sudo等等)的特定权限。

运行时,chmod 777 -R /请擦除所有权限,然后将其替换为777。除非您手动还原所有权限,否则这将使系统无法使用。

在实践中,它安装起来更快,更容易。

问题在于,许多系统程序的设计方式是:如果“不喜欢”权限,它们就不会启动。这是出于安全原因。

我认为,解释如何在实践中处理系统设计比解释为什么每个程序在错误的权限下无法工作更为重要。

如果您确实希望所有用户在Ubuntu中都具有无限权限,则可以将所有用户添加到sudo组中,而不用更改文件和目录权限。这将具有相同的效果,但不会破坏系统。

另一种方法(一种非常糟糕的方法)是激活root帐户,并允许每个人都以root用户身份登录。


11
也许有人会花点时间做详细的回答;-)
Pilot6 '16

1
我可以指出一种允许所有人在该系统上进行所有操作的更好方法-但是写一篇深入的文章介绍为什么每个二进制文件都需要其特定的权限,设置和标志,恕我直言。;-)
菲利普-Zyan K Lee- Stockmann 2016年

4
Linux系统的设计不允许所有人做任何事情。您可以启用root帐户,每个人都可以以root身份登录。这很愚蠢,但这就是方法。
Pilot6 '16

9
因此,Pilot6的意思是说,系统程序的设计方式是,如果许可出错,则不允许它们/不能正常运行?并请Pilot6(如果可能)提供示例的更深入答案,并解释某些应用程序为什么需要有限权限的原因。谢谢。
Brij Raj Kishore

13
@Goldname崩溃一个错误-大量程序说:“在这种状态下,系统无法执行关键功能,所以我要中止”
Shadur

32

chmod 有细微的差别。

chmod 0777行为的不同之处chmod u+rwx,g+rwx,o+rwx在于setuidsetgid由第一个清零,并由后者保留。

这就是为什么该系统无法使用的原因。您从一些程序中删除了必要的setuid

这是我的Linux Fedora 23笔记本电脑上的setuid或setgid文件的列表:

[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
敢不敢问为什么那个清单上有小食和流氓?
WiseOldDuck

2
@WiseOldDuck:我希望游戏能发挥一些作用,以便他们可以更新其“高分”文件,但不允许任何非特权用户这样做。
wallyk

3
@WiseOldDuck如wallyk所说,此外,请记住setuid不一定必须使用root(而afaik setgid对于root并不是真正有用)
StarWeaver

5
烦恼地解释chmod正在做的事情并提供示例证据,这是其他地方非常缺乏的。
underscore_d

1
这是否意味着chmod u+rwx,g+rwx,o+rwx -R /不会破坏系统?
丹尼斯·贾赫鲁丁

15

除其他答复外:还从中删除了“粘性位” /tmp(通常具有权限1777),这可能会导致其他意外问题,因为程序将能够写入或删除彼此的临时文件。

粘性位是一种特殊权限,它允许任何人在中创建文件/tmp,但仅允许创建它的人移动或删除它。


4
“这将阻止除root用户之外的任何人使用系统/ tmp目录。” -这似乎不对。它仍然允许任何人使用系统/ tmp目录。如果用户,组和其他人都拥有所有权限,则无需任何麻烦。但是,它将允许任何人删除其他人的文件。
2016年

1
所以如果我跑搭配chmod 1777 -R /那么应该不会有问题,因为我不清除粘位?–
Brij Raj Kishore

谢谢@hvd-你是对的,我对帖子做了些微改动以反映这一点。
本XO

@BrijRajKishore,问题仍然在于您为什么要首先这样做。由于多种原因,Ubuntu及其组成的程序并非旨在“无权限”运行。改为“ su”植根会更明智。
本XO

1
不知道是否会导致崩溃。完全有可能这样做,因为突然之间,应用程序将能够对彼此的临时文件执行操作(可能是偶然的事情),这可能会导致崩溃。由于从未对Ubuntu进行过这样的测试,因此您可能是第一个发现它的人。:-)另一方面,在系统上的每个文件夹中设置粘性位可能会导致许多其他问题,由于文件夹的组权限(例如,权限为2777的文件夹),本来希望能够操纵程序的应用程序。
本XO
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.