chmod / 777 设置错误。有问题吗?

Vin*_*ycx 33 permissions chmod

我试图运行,chmod -R 777 ./但最终在我的整个机器上打字chmod -R 777 /和设置777。会出什么问题?我该如何解决?

Gil*_*il' 48

问题?是的,很多。可以修复吗?当然。比重装还快?可能不是。

我的建议是重新安装。保留现有系统的备份和恢复软件包列表和文件的内容/etc/var。对于/usr/local,您可能可以手动恢复权限。对于/home/srv,您必须从备份中恢复权限。

如果这是一个具有多个本地用户的系统,请注意,使某些文件世界可读会揭示一些本应保密的内容。

  • 您的密码列表现已泄露:本地用户可以访问散列密码列表,并且可以尝试对其进行暴力破解。将此通知您的用户。
  • 所有私人用户数据(ssh 密钥、存储的密码、电子邮件、用户可能认为机密的任何其他内容)都已暴露给所有本地用户。将此通知您的用户。

如果你真的想尝试修复(更多的是学习练习而不是实际的恢复路线),首先恢复几个文件的权限。请注意,虽然现在大多数文件都过于开放,但有一些文件缺少必要的setuid位。以下是您在执行任何其他操作之前应采取的步骤。请注意,这不是一个详尽的列表,只是尝试使系统几乎无法运行。

chmod -R go-w /
chmod 440 /etc/sudoers
chmod 640 /etc/shadow /etc/gshadow
chmod 600 /etc/ssh/*_key /etc/ssh*key   # whichever matches
chmod 710 /etc/ssl/private /etc/cups/ssl
chmod 1777 /tmp /var/tmp /var/lock
chmod 4755 /bin/su /usr/bin/passwd /usr/bin/sudo /usr/bin/sudoedit
chmod 2755 /var/mail /var/spool/mail
Run Code Online (Sandbox Code Playgroud)

然后,您需要在任何地方恢复所有权限。对于 下的文件/usr,您可以使用以下命令之一重新安装软件包,具体取决于您的发行版:

  • 如果您使用的是 Debian、Ubuntu 或其他基于 APT 的发行版,您可以执行 apt-get --reinstall install
  • 如果您使用的是 Arch Linux,则可以执行pacman -S $(pacman -Qq --dbpath /newarch/var/lib/pacman) --root /newarch --dbpath /newarch/var/lib/pacman,假设您在 Live CD 中并且您的 Arch 安装安装在/newarch.

对于/etc和下的文件/var,这将不起作用,它们中的许多文件将保持原样:您必须在工作安装上复制权限。对于/srv和下的文件/home,无论如何您都必须从备份中恢复。如您所见,您不妨重新安装。

  • 同意,除非您是专家,否则您几乎没有机会在不完全重新安装或从备份中恢复的情况下修复这种情况。让系统保持原样运行太危险了。 (6认同)
  • *如果*系统上有用户,我很同情他们。 (3认同)

Cal*_*leb 20

一开始您可能不会注意到它,但是很多事情可能并且会出错。主要问题是整个系统的整个安全模型被破坏。这就像一个没有皮肤的身体,所有的器官都在空气中。它肯定会被感染,因为它并不意味着那样运作。即使它似乎工作了几分钟,您也需要清理它。

最好的方法实际上是从头开始。这种方式将大大降低您的风险,并在更短的时间内为您提供更清洁的结果。如果您有适当的备份,这不应该是一种尝试。

如果您确实尝试清理它,主要方法是告诉您发行版的软件包管理器重新安装系统上的所有内容,包括覆盖配置文件。然后使用它必须查看的任何验证系统,并确保它们都没有被标记为具有异常权限的文件。接下来,处理诸如用户主目录之类的事情,并将所有内容全部重置为合理的权限,然后处理一些应该具有特殊权限的事情(例如 ssh 密钥文件)。最后,对标记为 777 的所有内容进行完整的系统查找并查看列表(如果您已彻底完成其他步骤,它应该很小)并逐一完成它们以确保它们应该是它们的样子。


小智 12

解决方案:我在 CentOS 中对此进行了测试

这家伙救了我的工作!(您需要以某种方式访问​​)

http://www.adminlinux.org/2009/07/how-to-restore-default-system.html

1) 要重置文件和目录上的 uid 和 gid:

for u in $(rpm -qa); do rpm --setugids $u; done
Run Code Online (Sandbox Code Playgroud)

2) 对文件和目录的权限

for p in $(rpm -qa); do rpm --setperms $p; done
Run Code Online (Sandbox Code Playgroud)

然后手动更改这些文件的权限:

# ll /etc/ssh/
# chmod 600 /etc/ssh/ssh_host_rsa_key
# chmod 600 /etc/ssh/ssh_host_dsa_key
# service sshd restart
Run Code Online (Sandbox Code Playgroud)


Law*_*ceC 5

如果某些文件的权限太“松散”,则某些具有安全意识的程序将无法启动。正如@ceving 所说,这sshd是最典型的。

可能出错的主要事情是现在任何用户都可以打开、读取和写入系统上的任何文件。这不好的两个原因是:A)如果恶意用户通过漏洞利用或错误配置获得对您系统的控制,他/她现在可以修改您系统上的任何内容,以及 B)您可以删除任何您想要的内容,即使你不是 root,所以你刚刚否定了大部分不以 root 身份运行的保护。

如果您事先没有备份权限,您就会遇到一些情况。您可以创建一个脚本,从新安装的系统“获取”权限列表,然后将这些“应用”到系统上的所有内容。不过,我手边没有这样的脚本。

  • @Vinnycx:不,你不能。它坏了。你应该优先解决它。否则,您的服务会一一让您失望,而黑客会吃掉您的数据。离开 /*@777 不是一种选择。 (5认同)