我最近输入了命令
sudo chmod 777 -R /
之后,诸如
sudo -i
不能正常工作。所以我想知道是否有什么办法可以将文件夹权限重置为其原始状态?
我最近输入了命令
sudo chmod 777 -R /
之后,诸如
sudo -i
不能正常工作。所以我想知道是否有什么办法可以将文件夹权限重置为其原始状态?
Answers:
这是可能的,从这种混乱的局面回来。
我在问题上再次运行了相同的代码(我正在编写的脚本中存在一些错误),并解决了该问题,但是您需要寻求专家的帮助。要非常小心!
首先,我的情况比较容易解决,因为我有双引导系统(Ubuntu和旧的Fedora安装),但是从CD / DVD或USB密钥运行OS应该做同样的事情。
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)。您必须而且仅应在设置所有者之后设置权限。请保存完整的文件许可权信息以及所有者信息。
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`
请注意,可能需要格外小心以解决文件名中的括号(例如,在语言环境下),并且chown可能会默默地取消设置chmod设置的setuid和setgid位。在后一种情况下,例如/ bin / su和/ usr / bin / sudo可能会中断,您可能需要交换上述exec子句的顺序。
在恢复sudo或在引导时选择恢复模式之后
它是可以恢复使用整个系统debsums是verifiy文件的完整性和权限。
从手册页:
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)
chmod a-x /bin/ping
并且debsums -c
不会报告该文件。
据我所知,只有System V软件包和RPM提供了修复文件权限的命令。在系统V(Solaris)上,它是pkgchk,在RPM上是rpm --setperms。
不幸的是,Debian / Ubuntu软件包似乎不存在这样的命令-但是我在这里可能是错误的。
但是即使借助这些命令,将系统恢复到正常状态也不是一件容易的事,并且通过修复它,很容易对系统造成新的损害-如果您不小心的话。
除了约瑟夫说的以外,您不是第一个输入此命令的人,也不会是最后一个输入此命令的人。但是,仅是在Unix系统上将文件权限更改为777的想法,就充分表明您对这种系统不是很有经验。在这种情况下,您可以做的最好的事情是再次备份所需的内容(主目录,配置文件,邮件文件?),然后尝试重新安装。
当您还原损坏的备份文件时,您应该非常非常小心。
祝好运!
PS:我只是想知道您想解决哪种问题?