如何修复/恢复'sudo chmod / 777'后的ubuntu 10.04

也可以看看:
为什么“chmod -R 777 /”是破坏性的?

我通过执行sudo chmod -R / 777在根目录下recursion地改变了文件权限,之后我的系统不能启动(我得到了很多“权限被拒绝”的错误)。

请帮忙。

你正在看失败的原因。 保存您需要的数据,然后重新安装操作系统。

我知道dpkg存储在数据库中的权限,我发现以下脚本谷歌可能有所帮助。

编辑:我实际上已经快速看过脚本,它看起来好像缺less一些从PERMS到MODE的魔法,例如dpkg -c给出例如“-rw-r – r–”但是你想0644,我现在正在工作,所以我不确定我有时间在这个时刻进行转换,但是如果没有其他人跳过来补充那一点,我可能会回来。

这里有一个脚本,看起来很有趣

 #!/bin/bash # Restores file permissions for all files on a debian system for which .deb # packages exist. # # Author: Larry Kagan <me at larrykagan dot com> # Since 2007-02-20 ARCHIVE_DIR=/var/cache/apt/archives/ PACKAGES=`ls $ARCHIVE_DIR` cd / function changePerms() { CHOWN="/bin/chown" CHMOD="/bin/chmod" PERMS=$1 OWN=`echo $2 | /usr/bin/tr '/' ':'` PATHNAME=$3 echo -e "$CHOWN $OWN $PATHNAME" #`$CHOWN $OWN $PATHNAME` #`$CHMOD $MODE $PATHNAME` } for PACKAGE in $PACKAGES; do echo -e "Getting information for $PACKAGE\n" FILES=`/usr/bin/dpkg -c "${ARCHIVE_DIR}${PACKAGE}"` for FILE in "$FILES"; do FILE_DETAILS=`echo "$FILE" | awk '{print $1"\t"$2"\t"$6}'` changePerms $FILE_DETAILS done done 

从这样一个混乱的情况可以回来 ,而不需要重新安装系统。 那么,如果你有一个双启动系统,更准确地说,从一个USB钥匙或者一个Virutal Box(或者如此)上运行一个全新的系统。

我又碰到类似的问题(我正在编写一个脚本中的一些错误)并解决了这个问题,但是你需要问一些专家的帮助。 非常友善!

首先,我的情况比较容易解决,因为我有一个双启动系统(Ubuntu和我的老fedora安装),但运行系统的USB密钥(或者CD / DVD)应该做同样的事情。

M点= /安装/ ubuntu的

首先,我安装了我的文件系统(不要忘记创build挂载点):mount / dev / ubuntu / root $ MPOINT mount / dev / ubuntu / home $ MPOINT / home

然后,我运行了下面的命令(我的问题只是在几个关键的目录中),将权限从正在运行的系统复制到乱七八糟的一个(实际上,在我的情况下,我在Fedora下的VirtualBox中安装了一个Ubuntu系统并获得了权限):

find / etc / usr / bin -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 (...) 

我没有testing它,但它也必须为所有者和所有者组工作。 就像是:

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是一样的,但对于系统相关的用户和组,这不应该是一个问题。

RK:

一个重要的事情是保持安装磁盘与您正在使用的版本同步,或至less使用当前的Ubuntu版本。 现在,我有一个cronjob命令,每天运行(可能是几周),以保持这些信息。 这会让下一次的解决scheme变得更容易,但是当然,现在我已经拥有了这个解决scheme,它永远不会再发生。 ;-)像这样的东西:

 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" {}

我从上面修改脚本,看起来像这样:

 #!/bin/bash # Restores file permissions for all files on a debian system for which .deb # packages exist. # # Author: Larry Kagan <me at larrykagan dot com> # Since 2007-02-20 ARCHIVE_DIR=/var/cache/apt/archives/ PACKAGES=`ls $ARCHIVE_DIR` cd / function changePerms() { CHOWN="/bin/chown" CHMOD="/bin/chmod" PERMS=`echo $1 | sed -e 's/--x/1/g' -e 's/-w-/2/g' -e 's/-wx/3/g' -e 's/r--/4/g' -e 's/rx/5/g' -e 's/rw-/6/g' -e 's/rwx/7/g' -e 's/---/0/g'` PERMS=`echo ${PERMS:1}` OWN=`echo $2 | /usr/bin/tr '/' '.'` PATHNAME=$3 PATHNAME=`echo ${PATHNAME:1}` # echo -e "CHMOD: $CHMOD $PERMS $PATHNAME" # result=`$CHOWN $OWN $PATHNAME` # if [ $? -ne 0 ]; then # echo -e $result # exit 123; # fi echo -e "CHOWN: $CHMOD $PERMS $PATHNAME" result=`$CHMOD $PERMS $PATHNAME` if [ $? -ne 0 ]; then echo -e $result fi } for PACKAGE in $PACKAGES; do if [ -d $PACKAGE ]; then continue; fi echo -e "Getting information for $PACKAGE\n" FILES=`/usr/bin/dpkg -c "${ARCHIVE_DIR}${PACKAGE}"` for FILE in "$FILES"; do #FILE_DETAILS=`echo "$FILE" | awk '{print $1"\t"$2"\t"$6}'` echo "$FILE" | awk '{print $1"\t"$2"\t"$6}' | while read line; do changePerms $line done #changePerms $FILE_DETAILS done done 

同意blueben,只是重新安装可能比分析哪个文件/目录需要哪个权限更快。 但是,如果重新安装不是一种select,这是一个想法:

  1. 在另一台机器上安装默认的Ubuntu安装
  2. 运行此命令获取系统上每个文件/目录的权限: find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh find / | xargs stat -c 'chmod %a "'%n'"' > /tmp/chmod.sh
  3. 将文件chmod.sh复制到具有错误权限的计算机上
  4. 执行该文件chmod +x /tmp/chmod.sh && /bin/bash /tmp/chmod.sh
  5. 希望大部分事情能够奏效(不是所有的事情都会起作用)

错误到我的post发布为用户user100740:要支持链接,组合的命令是:

 /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 

如果你仍然可以启动/usr/sbin/synaptic ,它通常是可以修复的。

按状态对软件包进行分类(安装在最上面的软件包),select所有安装的软件包,右键单击并select重新安装。 然后申请,这将提示dpkg重新提取这些包的所有文件。 (你将失去任何本地修改(但不会改变configuration文件)。)

它可能不会让所有的东西都固定。
另一件事是,如果你进入/var/cache ,你可以为每个安装的包调用dpkg -x <package name> / ,然后调用dpkg --reconfigure -a 。 另外,如果您使用的是Ubuntu,您可以进行远程升级,通常可以修复大量错误(假设您尚未安装最新版本)。 一般来说,当我试图修复这样的错误时,我会尝试这些简单的修复,如果他们不只是使它再次工作,那么是时候重新安装。

从Live CD启动。 然后启动shell,然后sudo -s。 然后chmod 777 / *,然后chmod 600 / etc / passwd。 如果init / lib / init脚本不可执行,将会发生内核崩溃。 启动到单用户模式,对于Lilo Linux 1,并运行上面的user102453的脚本。 这将得到系统启动提示。 仍然需要让X运行。

设置/的权限为755为我工作。

所以先检查一下

 root@ubuntu:/# cd / root@ubuntu:/# ls -ld 

权限应该是“drwxr-xr-x”(755)。