如何在Ubuntu中将文件夹权限重置为其默认设置?


19

我最近输入了命令

sudo chmod 777 -R /

之后,诸如

sudo -i

不能正常工作。所以我想知道是否有什么办法可以将文件夹权限重置为其原始状态?


我认为linux不会记住以前的权限设置。尝试制作一个新文件,并查看其获得的权限设置。
thecoshman 2010年

哦,等等,我知道你在那做什么。这可能是重新安装的情况。只需备份您的数据,记下已安装的应用程序。玩得开心,为什么不尝试10.4!(有史以来最好的名字……那无线电的意思是什么?)
thecoshman 2010年

我敢于你找到一个没有做到那件事的人:D,这是一个非常棘手的情况。您可以修复它,尝试jlovi的答案,但是这会花费时间和精力,并且会令人沮丧。只需重新安装即可。除非您知道自己在做什么,否则切勿使用sudo chmod。
杰克·梅耶兹

Answers:


17

这是可能的,从这种混乱的局面回来。

我在问题上再次运行了相同的代码(我正在编写的脚本中存在一些错误),并解决了该问题,但是您需要寻求专家的帮助。要非常小心!

首先,我的情况比较容易解决,因为我有双引导系统(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:

  1. 重要的是保持安装磁盘与您使用的版本同步,或者至少与当前的ubuntu版本一起使用。
  2. 现在,我将这个命令放在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子句的顺序。


只是一个很好的答案。我在Ask Ubuntu
Private

对我来说是一个完美的解决方案!

2

在恢复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)

debsums是否真的检查权限?我尝试过chmod a-x /bin/ping并且debsums -c不会报告该文件。
reox

0

始终注意您以sudo运行的内容。

该线程说明您可以手动设置一些权限,并且那里的脚本对此有所帮助,但这仍然是一项艰巨的任务。而是按照脚步中的提示来保存已安装的程序包(标记)并重新安装操作系统,然后应用已保存的程序包标记来恢复您的应用程序。


0

据我所知,只有System V软件包和RPM提供了修复文件权限的命令。在系统V(Solaris)上,它是pkgchk,在RPM上是rpm --setperms。

不幸的是,Debian / Ubuntu软件包似乎不存在这样的命令-但是我在这里可能是错误的。

但是即使借助这些命令,将系统恢复到正常状态也不是一件容易的事,并且通过修复它,很容易对系统造成新的损害-如果您不小心的话。

除了约瑟夫说的以外,您不是第一个输入此命令的人,也不会是最后一个输入此命令的人。但是,仅是在Unix系统上将文件权限更改为777的想法,就充分表明您对这种系统不是很有经验。在这种情况下,您可以做的最好的事情是再次备份所需的内容(主目录,配置文件,邮件文件?),然后尝试重新安装。

当您还原损坏的备份文件时,您应该非常非常小心。

祝好运!

PS:我只是想知道您想解决哪种问题?


0

哇,你杀了它。死了!尝试登录并以root用户身份使用计算机(自启用计算机以来),然后将root用户的组成员身份更改为用户。这也许行不通,因为我之前从未尝试过,但值得一试。


0

您无法撤消chmod操作;至少不是回滚到以前的设置,这是这种情况所需要的。可以说,您可以通过将每个文件和目录恢复为原始模式撤消chmod操作,chmod但是它们并不完全相同。确定原始模式很棘手(如其他答案所述)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.