修复意外 chmod 后服务器的权限

kai*_*er2 9 server permissions chmod

在尝试调试邮件服务器时,我输入了:

chmod -R 777 /
Run Code Online (Sandbox Code Playgroud)

代替:

chmod -R 777 .
Run Code Online (Sandbox Code Playgroud)

锦上添花,由于我忘记了我已经更改了用于登录以修复某些内容的脚本,因此我以 root 身份执行了所有这些操作。我没有大部分系统的备份(我知道这是一个糟糕的选择)。

与问题“从 chmod -R -777 / 恢复”和“在 'chmod -R 777 /' 之后做什么?”不同。我仍然以 root 身份登录,并没有更改整个系统,所以我确实对系统有一些控制权。我还在一秒钟内 ^C d 退出命令以最大程度地减少损坏。从那以后,我从物理上断开了服务器与互联网的连接。

我相信脚本可以修复它,如果它根据包管理器的数据恢复文件系统的权限,但我不知道我将如何去做。如果这是不可能的,我将如何保存服务器中的数据以重新安装操作系统?

我知道丢失文件的潜在风险,但尽管有这些风险,我还是希望恢复重新安装。

这是当前的输出ls -la /

drwxrwxrwx  22 root root  4096 Sep  7  2016 .
drwxrwxrwx  22 root root  4096 Sep  7  2016 ..
drwxr-xr-x   2 root root  4096 May 18 07:55 bin
drwxr-xr-x   3 root root  4096 Sep 21 07:53 boot
drwxr-xr-x  19 root root  3180 Sep 11 20:54 dev
drwxrwxrwx  92 root root  4096 Aug 23 07:50 etc
drwxr-xr-x   4 root root  4096 May 23  2016 home
lrwxrwxrwx   1 root root    31 Feb 24  2016 initrd.img -> /boot/initrd.img-3.16.0-4-amd64
drwxrwxrwx  18 root root  4096 Feb 24  2016 lib
drwxr-xr-x   2 root root  4096 Jun 20 07:00 lib64
drwx------   2 root root 16384 May 19  2016 lost+found
drwxrwxrwx   2 root root  4096 May  5  2015 media
drwxr-xr-x   2 root root  4096 May  5  2015 mnt
drwxr-xr-x   3 root root  4096 May 28  2016 opt
dr-xr-xr-x 148 root root     0 Sep  3 21:55 proc
drwxrwxrwx  10 root root  4096 Aug 19 17:58 root
drwxr-xr-x  22 root root   800 Sep 21 17:09 run
drwxrwxrwx   3 root root  4096 Jun 20 07:00 sbin
drwxr-xr-x   4 root root  4096 Sep 20 23:18 sftp
dr-xr-xr-x  13 root root     0 Sep  3 21:55 sys
drwxrwxrwx   8 root root  4096 Sep 21 17:17 tmp
drwxrwxrwx  11 root root  4096 Feb 24  2016 usr
drwxr-xr-x  14 root root  4096 Jun 25 06:21 var
lrwxrwxrwx   1 root root    27 Feb 24  2016 vmlinuz -> boot/vmlinuz-3.16.0-4-amd64
Run Code Online (Sandbox Code Playgroud)

刚刚注意到我在恐慌中点击了 ubuntu 论坛而不是 debian...我知道这不是你修复邮件服务器的方式。看看是什么坏了,这是一个笨拙的草率修复

iv 现在在正确的论坛上转发了这个

小智 18

修复权限错误

如何将根目录权限恢复为默认值?

规则 #1:如果您对命令行不满意,请不要以 root 身份运行任何命令。

chmod -R 777 /以 root 身份运行会破坏您的系统。

rm -rf /以 root 身份运行将导致灾难!.

如果您chmod -R 777 /以 root 身份运行,请按照以下步骤将其恢复:

第1步:

复制以下脚本,将其粘贴到您的控制台上以生成 fixpermission 脚本

echo '
chmod -R 755 /bin /boot /dev /etc/ /home /lib /lib64 \
/media /mnt /opt /run /sbin /srv /usr /var

chmod -R 777 /initrd.img /vmlinuz
chmod -R 1777 /tmp
chmod -R 555 /sys
chmod -R 555 /proc
chmod -R 700 /root

' > fixpermission

chmod +x fixpermission

./fixpermission
Run Code Online (Sandbox Code Playgroud)

上面将创建一个名为 fixpermission 的脚本,./fixpermission如果尚未调用,则运行它。

第2步:

运行stat -c '%A %a %n' /*以显示您的正确目录及其恢复的权限。

示例:您的目录权限结构应类似于以下内容:

root@plab:~# stat -c '%A %a %n' /*
drwxr-xr-x 755 /bin
drwxr-xr-x 755 /boot
drwxr-xr-x 755 /dev
drwxr-xr-x 755 /etc
drwxr-xr-x 755 /home
lrwxrwxrwx 777 /initrd.img
lrwxrwxrwx 777 /initrd.img.old
drwxr-xr-x 755 /lib
drwxr-xr-x 755 /lib64
drwx------ 700 /lost+found
drwxr-xr-x 755 /media
drwxr-xr-x 755 /mnt
drwxr-xr-x 755 /opt
dr-xr-xr-x 555 /proc
drwx------ 700 /root
drwxr-xr-x 755 /run
drwxr-xr-x 755 /sbin
drwxr-xr-x 755 /srv
dr-xr-xr-x 555 /sys
drwxrwxrwt 1777 /tmp
drwxr-xr-x 755 /usr
drwxr-xr-x 755 /var
lrwxrwxrwx 777 /vmlinuz
lrwxrwxrwx 777 /vmlinuz.old
Run Code Online (Sandbox Code Playgroud)

第 3 步:

重启你的系统!

希望这可以帮助。

  • 这似乎是一个非常粗略的解决方案(尤其是在 Ubuntu 上,其中`/usr/bin/sudo` 需要 setuid 位并且用户很少可以选择以 root 身份运行)。使系统中的每个文件都可执行并不是一个好主意,例如,用户的“$HOME”中的许多配置文件都具有比 755 更严格的权限 (8认同)
  • 太感谢了!!!我没有语言来形容你是多么了不起!你我的朋友为我节省了很多时间。=D (3认同)
  • 这是我反对的`-R`标志的使用。我们很少希望文件和目录具有相同的权限。[这里是我的`/etc` 目录的顶级内容的八进制权限](http://paste.ubuntu.com/25590849/),例如。请注意它们并非都是 755... (3认同)
  • 我意识到 OP 使用了“-R”标志。这就是为什么它不容易修复(我已经在评论中建议了解决方案的最佳机会 - 这是一个常见问题,各种答案都可以解决它 - 最简单的方法是重新安装)以及为什么我说你的解决方案很粗糙。事实上,这是危险的,因为系统中的任何文件现在都可以由包括 root 在内的任何用户执行,许多程序可能无法运行或可能以无信息的方式抱怨,因为它们期望的权限不存在,并且许多应该隐藏的位置被暴露。既然不是所有东西都坏了,你就让情况变得更糟:( (2认同)
  • 试过这个,只会进一步弄乱我的系统。“只需”使用“其他”选项重新安装,如下所示:https://askubuntu.com/questions/269880/re-install-ubuntu-without-losing-data-in-home-folder#comment1359142_270045 (2认同)