我刚刚犯了一个严重的错误,我试图自己修复它,但我需要一些帮助。
由于语法错误,所有文件和文件夹权限都被更改:幸运的是,我在发生这种情况时看到了这一点并成功阻止了它。 “仅” /bin
、/boot
、 和/dev
受到影响。以下是所发生事件的摘录(完整日志:http://pastebin.com/4BkbXEqD):
Apr 11 21:34:08 *** sftp-server[20582]: set "/.newrelic" mode 40754
Apr 11 21:34:08 *** sftp-server[20582]: set "/bin" mode 40554
Apr 11 21:34:09 *** sftp-server[20582]: set "/boot" mode 40554
Apr 11 21:34:09 *** sftp-server[20582]: set "/cgroup" mode 40754
Apr 11 21:34:09 *** sftp-server[20582]: set "/dev" mode 40754
Apr 11 21:34:09 *** sftp-server[20582]: opendir "/.newrelic"
Apr 11 21:34:09 *** sftp-server[20582]: closedir "/.newrelic"
Apr 11 21:34:09 *** sftp-server[20582]: opendir "/.newrelic"
Apr 11 21:34:10 *** sftp-server[20582]: closedir "/.newrelic"
Apr 11 21:34:10 *** sftp-server[20582]: opendir "/"
Apr 11 21:34:10 *** sftp-server[20582]: closedir "/"
Apr 11 21:34:10 *** sftp-server[20582]: opendir "/bin"
Apr 11 21:34:10 *** sftp-server[20582]: closedir "/bin"
Apr 11 21:34:10 *** sftp-server[20582]: set "/bin/mknod" mode 100754
Apr 11 21:34:10 *** sftp-server[20582]: set "/bin/cat" mode 100754
Apr 11 21:34:10 *** sftp-server[20582]: set "/bin/ping6" mode 100754
例如,MySQL 不再运行,恐怕造成的损害更大。
我尝试恢复这些文件夹和文件的读取和执行权限,但实际上我不知道它们之前处于哪种状态。
如何将系统恢复到工作状态?
答案1
如果您设法启动 root shell,您应该能够从 root shell 恢复权限。您应该能够通过在控制台上以 root 身份登录来获取 root shell。此时,根据您的配置,您可能能够也可能无法使用su
或的普通帐户获得 root 访问权限sudo
,并且您可能无法使用任何非 root 帐户登录。
如果您发布的记录是完整的,那么您很幸运,权限最难恢复的文件(/etc
和/var
)不会受到影响。
Apr 11 21:34:08 *** sftp-server[20582]: set "/.newrelic" mode 40754 Apr 11 21:34:08 *** sftp-server[20582]: set "/bin" mode 40554 Apr 11 21:34:09 *** sftp-server[20582]: set "/boot" mode 40554 Apr 11 21:34:09 *** sftp-server[20582]: set "/cgroup" mode 40754 Apr 11 21:34:09 *** sftp-server[20582]: set "/dev" mode 40754
40754(八进制表示法)表示一个目录,所有者可写,所有者和组可执行,所有人可读。只有最右边的三位数字表示权限,前面的数字对文件类型进行编码并且无法更改。由于目录的“执行”权限实际上意味着访问该目录中文件的权限,因此大多数用户无法再访问这些目录中的文件。大多数顶级目录应具有权限 755,这意味着每个人都可读和可执行,并且只能由所有者写入(例外情况是/lost+found
通常为 700,/tmp
必须为 1777,并且特殊文件系统(例如/proc
其/sys
所有者可能无法写入)。我不知道/.newrelic
是什么,它不是标准的顶级目录。
chmod 755 /bin /boot /cgroup /dev
Apr 11 21:34:10 *** sftp-server[20582]: set "/bin/mknod" mode 100754 …
/bin
和中的大多数文件/sbin
应该可供所有人读取和执行,并且只能由其所有者写入。其中有几个需要设置用户标识。
chmod a+x /bin/* /sbin/*
chmod 4755 /bin/su /bin/sudo /bin/mount /bin/umount /bin/ping /bin/ping6
chmod 4754 /bin/fusermount
在 中/boot
,我认为所有文件和目录都应该是世界可读的,并且目录应该是可执行的,但文件不应该。
find /boot -type d -exec chmod 755 {} + -type f -exec chmod 644 {} +
这使得/dev
文件之间的权限差异很大。幸运的是,/dev
它是一个内存文件系统,因此重新启动后内容会正常。如果您可以并且想要在/dev
不重新启动的情况下恢复权限,我认为以下命令可以做到这一点:
udevadm trigger --sysname-match='*'
答案2
事实上,似乎系统受到的影响比日志所说的还要严重!
也许是因为开发文件夹,也许是符号链接...不知道,但是在爬行论坛等并逐个文件夹尝试之后,我终于用以下命令保存了服务器
for package in $(rpm -qa); do rpm --setperms $package; done
特别感谢@Gilles 和他出色的回答
特别感谢! @dhag 编辑我的问题以删除我的礼貌公式