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

Bri*_*ore 53 chmod

我只授予所有人做任何事情的权限,但为什么只授予权限会导致系统崩溃?我只是修改权限而不更改文件。

Pet*_*een 106

有几个原因。

首先,除了通常的读/写/执行权限之外,文件权限还包含一些其他位。最值得注意的是setuidsetgid。当设置了这些权限位之一的程序运行时,它会获得程序所有者的“有效 UID”和/或“有效 GID”,而不是运行它的用户。这允许程序以比运行它们的用户更多的权限运行。它被许多关键的系统实用程序使用,包括susudo。您的chmod命令会清除这些位,从而使实用程序无法使用。

其次,一些程序(特别是ssh)对文件权限进行完整性检查,并拒绝使用他们认为不安全的权限的文件。这降低了粗心的管理员不小心留下安全漏洞的风险,但它使处理被删除的文件权限变得更加痛苦。


Pil*_*ot6 41

简短的回答。

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

当您运行时,chmod 777 -R /您会擦除所有权限并将其替换为777. 这会使系统无法使用,除非您手动恢复所有权限。

在实践中,重新安装要快得多,也更容易。

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

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

如果你真的想让所有用户在 Ubuntu 中拥有无限权限,你可以将所有用户添加到sudo组中,而不是更改文件和目录权限。这将具有相同的效果,但不会破坏系统。

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

  • @Goldname 崩溃 * 是 * 错误——这是一大堆程序说“我无法在这种状态下使用系统执行关键功能,所以我正在中止” (13认同)
  • 也许有人会花时间做一个详细的回答;-) (11认同)
  • 所以 [Pilot6](http://askubuntu.com/users/167850/pilot6) 你的意思是说系统程序的设计方式是,如果权限出错,那么它们将不被允许/无法正常运行?如果可能,请[Pilot6](http://askubuntu.com/users/167850/pilot6) 提供更深入的答案,并提供示例和解释为什么某些应用程序需要有限的权限。谢谢。 (9认同)
  • Linux 系统并不是为了让每个人都能做所有事情而设计的。您可以启用 root 帐户,每个人都可以为此以 root 身份登录。这很愚蠢,但这就是方法。 (4认同)

wal*_*lyk 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]# 
Run Code Online (Sandbox Code Playgroud)

我删除了缓存和日志中的数十个噪音条目。

  • 我很乐意解释 `chmod` 正在做什么并提供示例证据,这是其他地方非常缺乏的。 (5认同)
  • 我敢想知道为什么 gnuchess 和 rogue 会在那个名单上? (3认同)
  • @WiseOldDuck 正如wallyk所说,另外,请记住setuid不一定必须使用root(并且afaik setgid对root并没有真正有用) (3认同)
  • @WiseOldDuck:我希望游戏能够更新他们的“高分”文件,但不允许任何非特权用户这样做。 (2认同)

Ben*_* XO 15

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

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

  • “这将阻止除 root 之外的任何人使用系统 /tmp 目录。” ——这好像不对。它仍然允许任何人使用系统 /tmp 目录。如果用户、组和其他人都拥有所有权限,则不需要粘滞位。但是,它允许任何人删除其他人的文件。 (4认同)