我最近输入了命令
sudo chmod 777 -R /
Run Code Online (Sandbox Code Playgroud)
在那之后,有些事情像
sudo -i
Run Code Online (Sandbox Code Playgroud)
不能正常工作。所以我想知道是否有任何方法可以将文件夹权限重置为原始状态?
小智 19
有可能从这种混乱的情况中回来。
我在问题上再次运行了同样的问题(我正在编写的脚本中的一些错误)并解决了它,但是您需要寻求一些专家的帮助。非常小心!
首先,我的情况更容易解决,因为我有一个双引导系统(Ubuntu 和我的旧 Fedora 安装),但是从 CD/DVD 或 USB 密钥运行操作系统应该做同样的事情。
MPOINT=/mount/ubuntu
Run Code Online (Sandbox Code Playgroud)
首先,我像这样挂载了我的文件系统(不要忘记创建挂载点):
mount /dev/ubuntu/root $MPOINT
mount /dev/ubuntu/home $MPOINT/home
Run Code Online (Sandbox Code Playgroud)
然后我运行以下命令(我的问题仅在少数 - 关键 - 目录中)将权限从正在运行的系统复制到凌乱的系统(实际上,就我而言,我在 Fedora 下的 Virtual Box 中安装了一个 Ubuntu 系统并在那里获得权限):
find /etc /usr /bin /sbin -exec stat --format "chmod %a \"${MPOINT}%n\"" {} \; > /tmp/restoreperms.sh
Run Code Online (Sandbox Code Playgroud)
然后我运行了 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
(...)
Run Code Online (Sandbox Code Playgroud)
我没有测试它,但它也必须适用于所有者和所有者组。就像是:
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
(...)
Run Code Online (Sandbox Code Playgroud)
当然,这里你要注意,两个系统上的 UID 和 GID 是相同的,但是对于系统相关的用户和组,这应该不是问题。
编辑:
此外,设置 owner将使 SGID 和 SUID flags 无效,这会导致奇怪的问题(例如,除非权限为 4755,否则您将无法执行 sudo)。您必须并且应该只在设置所有者之后设置权限。务必保存完整的文件权限信息以及所有者信息。
Rk:
现在,我在 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`
Run Code Online (Sandbox Code Playgroud)
请注意,可能需要额外注意文件名中的括号(例如,在语言环境下),并且 chown 可能会悄悄地取消设置由 chmod 设置的 setuid 和 setgid 位。在后一种情况下,例如 /bin/su 和 /usr/bin/sudo,您可能需要交换上面的 exec 子句的顺序。
小智 0
您无法撤消chmod操作;至少不是回滚到以前的设置,这正是这种情况所需要的。 \xc2\xa0 可以说,您可以chmod通过chmod将每个文件和目录恢复到其原始模式 \xe2\x80\ 来撤消操作x93\xe2\x80\x93 但它们\xe2\x80\x99并不完全相同;确定原始模式很棘手(如其他答案中讨论的\xc2\xa0)。
| 归档时间: |
|
| 查看次数: |
75447 次 |
| 最近记录: |