我最近输入了命令
sudo chmod 777 -R /
之后的一些事情
sudo -i
无法正常工作。所以我想知道是否有办法将文件夹权限重置为原始状态?
答案1
这是可能的从这混乱的局面中恢复过来。
我再次遇到了同样的问题(我编写的脚本中存在一些错误)并解决了它,但您需要寻求专家的帮助。要非常小心!
首先,我的情况更容易解决,因为我有双启动系统(Ubuntu 和我旧的 Fedora 安装),但从 CD/DVD 或 USB 密钥运行操作系统应该可以做同样的事情。
MPOINT=/mount/ubuntu
首先,我像这样挂载我的文件系统(不要忘记创建挂载点):
mount /dev/ubuntu/root $MPOINT
mount /dev/ubuntu/home $MPOINT/home
然后我运行以下命令(我的问题仅出现在几个关键目录中)将权限从正在运行的系统复制到混乱的系统(事实上,就我而言,我在 fedora 下的 Virtual Box 中安装了 Ubuntu 系统并在那里获得了权限):
find /etc /usr /bin /sbin -exec stat --format "chmod %a \"${MPOINT}%n\"" {} \; > /tmp/restoreperms.sh
然后我运行了 restoreperms.sh 脚本。
我能够再次在 Ubuntu 上启动了。
restoreperms.sh 的内容如下:
(...)
chmod 755 /mount/ubuntu//etc/ppp
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up
chmod 2750 /mount/ubuntu//etc/ppp/peers
chmod 640 /mount/ubuntu//etc/ppp/peers/provider
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up.d
chmod 777 /mount/ubuntu//etc/ppp/resolv.conf
(...)
我没有测试过,但它一定也适用于所有者和所有者组。例如:
find /etc /usr /bin -exec stat --format 'chown %U:%G ${MPOINT}%n' {} \; > /tmp/restoreperms.sh^
(...)
chown root:root /mount/ubuntu//etc/obex-data-server/imaging_capabilities.xml
chown root:root /mount/ubuntu//etc/obex-data-server/capability.xml
chown root:dip /mount/ubuntu//etc/ppp
chown root:root /mount/ubuntu//etc/ppp/ipv6-up
chown root:dip /mount/ubuntu//etc/ppp/peers
chown root:dip /mount/ubuntu//etc/ppp/peers/provider
chown root:root /mount/ubuntu//etc/ppp/ipv6-up.d
chown root:root /mount/ubuntu//etc/ppp/resolv.conf
(...)
当然,您必须注意,两个系统上的 UID 和 GID 是相同的,但对于系统相关的用户和组来说,这应该不是问题。
编辑:
另外,设置所有者将使 SGID 和 SUID 标志无效,这会导致奇怪的问题(例如,除非权限为 4755,否则您将无法执行 sudo)。您必须且应该只设置权限后设置所有者。请保存完整的文件权限信息以及所有者信息。
韋克:
- 重要的是保持安装盘与您正在使用的版本同步,或者至少与当前的 ubuntu 版本兼容。
现在,我将这些命令放入 cronjob 中,每天(可能是几周)运行,以保存这些信息。这将使下次解决问题变得更容易,但当然,既然我现在有了这个,它就不会再发生了。;-) 类似这样:
0 12 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chmod %a %n" {} \; |/bin/bzip2 -c > /tmp/restore_chmod.$(/bin/date +%w).sh.bz2
0 13 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chown %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_chown.$(/bin/date +%w).sh.bz2
正确的(组合)命令更像是:
`/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {} \; -exec /usr/bin/stat --format="/bin/chown -h %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_fileperms.$(/bin/date +%w).sh.bz2`
请注意,可能需要特别注意文件名中的括号(例如,在语言环境中),并且 chown 可能会默默取消设置 chmod 设置的 setuid 和 setgid 位。在后一种情况下,可能会破坏 /bin/su 和 /usr/bin/sudo,您可能需要交换上述 exec 子句的顺序。
答案2
恢复后须藤或选择恢复模式在引导处
可以使用以下方法恢复整个系统德布苏姆斯验证文件完整性和权限。
来自手册页:
apt-get install --reinstall $(dpkg -S $(debsums -c) | cut -d : -f 1 | sort -u)
重新安装包含已更改文件的软件包
或限制到特定路径,例如/usr
::
apt-get install --reinstall $(dpkg -S $(debsums -c | grep -e ^/usr ) | cut -d : -f 1 | sort -u)
或仅限于多组路径,例如:/sbin /etc /var
apt-get install --reinstall $(dpkg -S $(debsums -c | grep -e ^/etc -e ^/sbin -e ^/var ) | cut -d : -f 1 | sort -u)
答案3
始终注意以 sudo 身份运行的内容。
此主题解释说您可以手动重新设置一些权限,那里有一个脚本可以帮助您完成此操作,但这仍然是一项艰巨的工作。最好按照本指南中的提示保存您安装的软件包(标记)并重新安装操作系统,然后应用您保存的软件包标记以恢复您的应用程序。
答案4
哇,你杀了它。它死了!尝试以 root 身份登录并使用机器(因为你启用了它),然后将 root 的组成员身份更改为用户。这可能有效也可能无效,因为我以前从未尝试过,但值得一试。