Mar*_*cin 13 permissions boot ubuntu-10.04
我/
通过执行递归更改根目录上的文件权限sudo chmod -R / 777
,之后我的系统将无法启动(我收到很多“权限被拒绝”错误)。
请帮忙。
blu*_*ben 24
你正在寻找一个失败的原因。保存您需要的数据,然后重新安装操作系统。
我知道 dpkg 将权限存储在数据库中,我发现以下脚本google可能会有所帮助。
编辑:我实际上快速浏览了脚本,它看起来好像缺少一些从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
Run Code Online (Sandbox Code Playgroud)
小智 5
无需重装系统,就可以从这种混乱的情况中恢复过来。好吧,更准确地说,如果您有双引导系统,则可以从 USB 闪存盘或虚拟盒(或其他)中运行全新的系统。
我再次运行了同样的问题(我正在编写的脚本中的一些错误)并解决了它,但您需要寻求一些专家的帮助。一定要非常小心!
首先,我的情况更容易解决,因为我有一个双引导系统(ubuntu 和我的旧 Fedora 安装),但运行 USB 密钥(或者可能是 CD/DVD)的系统应该做同样的事情。
MPOINT=/挂载/ubuntu
首先,我像这样安装了文件系统(不要忘记创建安装点): mount /dev/ubuntu/root $MPOINT mount /dev/ubuntu/home $MPOINT/home
然后我运行以下命令(我的问题仅在几个关键目录中)将权限从正在运行的系统复制到混乱的系统(事实上,就我而言,我在 Fedora 下的 Virtual Box 中安装了一个 ubuntu 系统并在那里获得了权限):
查找 /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
(...)
Run Code Online (Sandbox Code Playgroud)
我没有测试它,但它也必须适用于所有者和所有者团体。就像是:
查找 /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 是相同的,但对于系统相关的用户和组来说,这不应该是问题。
RK:
为此,重要的是使安装磁盘与您正在使用的版本保持同步,或者至少与当前的 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
Run Code Online (Sandbox Code Playgroud)
编辑:为了支持链接,组合命令是:
/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {}
归档时间: |
|
查看次数: |
47008 次 |
最近记录: |