ubuntu: sudo find / -type d -exec chmod -Rf a-wr {} \; 用户无法登录

-4 linux ubuntu

我用的是ubuntu 12.04(32位)。今天,我错误地执行了一个命令:

警告

不要执行这个命令:

sudo find / -type d -exec chmod -Rf a-wr {} \;
Run Code Online (Sandbox Code Playgroud)

我无法登录系统;系统只有一个用户,禁用root。谁知道如何解决?

Hau*_*ing 5

取消系统中所有目录的读写权限显然会破坏每个正态分布。这是无稽之谈。

编辑 1

可以通过启动另一个 Linux(从 CD/DVD/USB 记忆棒)并在所有受影响的卷上正确设置访问权限来修复系统。恢复原始状态可能很复杂,让它再次工作更容易。如果只有一个用户并且没有守护进程向网络提供服务,那么就不会有问题或安全风险。

mount -t auto /dev/whatever /mnt/targetvolume
find /mnt/targetvolume -type d -exec chmod 755 {} \;
find /mnt/targetvolume -type f -exec chmod 644 {} \;
chmod -R a+x /mnt/targetvolume/bin /mnt/targetvolume/sbin \
  /mnt/targetvolume/lib /mnt/targetvolume/lib64 /mnt/targetvolume/sbin \
  /mnt/targetvolume/usr/ /mnt/targetvolume/usr/bin \
  /mnt/targetvolume/usr/lib /mnt/targetvolume/usr/lib64 \
  /mnt/targetvolume/usr/sbin
Run Code Online (Sandbox Code Playgroud)

在 /etc 中恢复正确的权限很重要。我的建议是询问具有相同发行版的人(他最多应该安装您已安装的所有软件)为您提供以下内容:

# on a working system
getfacl --recursive /etc > acl-etc.txt
# on your system
setfacl --restore=acl-etc.txt /etc
# or from the rescue system
setfacl --restore=acl-etc.txt /mnt/targetvolume/etc
Run Code Online (Sandbox Code Playgroud)

这可以通过以下方式进一步改进

  1. 检查 /etc 中的所有文件和目录是否都存在于参考系统中
  2. 让包管理器检查已安装包的访问权限(例如 rpm --verify 包)