web-dev-qa-db-ja.com

「Sudo chmod / 777」の後でubuntu 10.04を修復/復元する方法

関連項目:
「chmod -R 777 /」が破壊的である理由

ルートディレクトリでファイルのアクセス許可を再帰的に変更しました/を実行してSudo chmod -R / 777、その後、システムが起動しません(多くの「アクセス許可が拒否されました」エラーが発生します)。

助けてください。

12
Marcin

あなたは失われた原因を見ています。必要なデータを保存し、オペレーティングシステムを再インストールします。

23
blueben

Dpkgが権限をデータベースに保存していることを知っており、次のスクリプト google が役立つ場合があります。

編集:私は実際にスクリプトをざっと見て、PERMSからMODEに移行する少しの魔法が欠けているように見えます。たとえば、dpkg -cは、たとえば "-rw-r--r--"を返しますが、 0644、私は今仕事中なので、この瞬間に変換を行う時間があるかわかりませんが、誰かがそのビットを追加するためにジャンプしていなければ、後で戻ってくるかもしれません。

スクリプトがあります here これは面白いようです

#!/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
5
James

システムを再インストールせずに、このような厄介な状況から戻ることは可能です。さて、デュアルブートシステムを使用している場合は、より正確に、USBキーから、または仮想ボックス(またはその他)から新しいシステムを実行します。

私は同じ種類の問題(私が書いていたスクリプトのいくつかのバグ)をもう一度実行して解決しましたが、専門家の助けを求める必要があります。非常に注意してください!

まず、デュアルブートシステム(ubuntuと古いFedoraのインストール)を使用していたため、状況は簡単に解決できましたが、USBキー(またはCD/DVD)でシステムを実行すると同じことができるはずです。

MPOINT =/mount/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
(...)

私はそれをテストしませんでしたが、それは所有者と所有者グループのためにもうまくいくはずです。何かのようなもの:

/ 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:

このための重要なことは、インストールディスクを使用しているバージョンと同期させるか、少なくとも現在の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

編集:リンクをサポートするために、組み合わせたコマンドは次のとおりです。

/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {}

4
user100740

上記のスクリプトを変更したところ、次のようになりました。

#!/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/r-x/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
4
user102453

Bluebenに同意します。再インストールするだけで、どのファイル/ディレクトリがどの権限を必要とするかを分析するよりも速くなる可能性があります。しかし、再インストールが選択肢でない場合は、ここにアイデアがあります:

  1. 別のマシンにデフォルトのUbuntuインストールをインストールする
  2. 次のコマンドを実行して、システム上のすべてのファイル/ディレクトリの権限を取得します: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. ほとんどのものがうまくいくことを願っています(すべてがうまくいくとは限りません)
3
weeheavy

ユーザー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
2
jlovi

それでも/usr/sbin/synapticを起動できる場合は、多くの場合修正可能です。

パッケージをステータス(上部にインストールされているパッケージ)で並べ替え、インストールされているすべてのパッケージを選択し、右クリックして[再インストール]を選択します。次に、これらのパッケージのすべてのファイルを再抽出するようにdpkgプロンプトを出します。 (ローカルの変更はすべて失われます(ただし、構成ファイルの変更は失われません)。)

ただし、すべてが修正されるわけではありません。
もう1つは、/var/cacheに入った場合、インストールされているすべてのパッケージに対してdpkg -x <package name> /を呼び出してから、dpkg --reconfigure -aを呼び出すことができます。また、Ubuntuを使用している場合は、多くのエラーを修正するdistアップグレードを実行できます(まだ最新リリースになっていない場合)。一般に、このようなエラーを修正しようとするときは、これらの簡単な修正を試してみます。もしそれらが再び機能しない場合は、再インストールするときです。

2
Perkins