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


12

関連項目:
「chmod -R 777 /」はなぜ破壊的ですか?

/実行してルートディレクトリのファイルのアクセス許可を再帰的に変更するsudo chmod -R / 777と、システムが起動しなくなります(多くの "許可拒否"エラーが発生します)。

助けてください。


ライブのUbuntuシステムを使用できるかもしれません。通常のシステムにインストールしたパッケージをインストールし、それらを「クローン」するスクリプトを作成しますか?これは単なるアイデアです。たぶんこれが良いかどうか他の誰かが言うことができます。
ダロクタール

慎重にこれに従ってください:リカバリモードで開く>ドライブをマウント>対話型シェルを開く>マウントされたハードドライブにcd(私にとっては/ mnt / [ディレクトリ]にありました)> chmod -R 755 ./**> #cd ./etc/ SSH / #chmod 600モジュラス#chmod 644はssh_config #chmod 644 ssh_host_dsa_key.pub #chmod 644 ssh_host_key.pub #chmod 644 ssh_host_rsa_key.pub #chmod 600 ssh_host_dsa_keyに#chmod 600 ssh_host_key #chmod 600 ssh_host_rsa_key #chmod 640のsshd_config
スミット・パテル

StackExchangeに回答を投稿するのに十分な評判はありませんが、お手伝いしたいと思います。
スミット・パテル

回答:


23

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


うん。あなたがこれをするのに費やす時間はおかしくなり、あなたがそれが正確に正しいことを確実に確信することは決してないでしょう。クリーンアップを開始し、バックアップからデータを復元します。
ThatGraemeGuy

1
これは一歩後退し、そこから物事を学ぶことの一つです。最も重要な領域は、ホームフォルダーのコンテンツ、行った構成の変更/etc/var/wwwWebサーバーのコンテンツおよびデータベースです。別のハードドライブをつかみ、プライマリとして有効にしてインストールします。それはあなたがそれを転送できるまでバックアップとしてあなたの他のドライブを保存します。
Fiascoラボ

私は同じことをして(そして、はい、私はよく知っています)、ここでいくつかのアイデアを試しましたが、マシンをまともな状態に戻すには数週間かかりました。代わりに、データをバックアップしてUbuntuを再インストールしてください。
-MikeHoss

4

私は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

04555ファイルも処理しますか?
リングØ11年

4

システムを再インストールせずに、このような厄介な状況から戻ることができます。デュアルブートシステムを使用している場合は、USBキーまたはVirutal Box(など)から新しいシステムをより正確に実行します。

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

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

MPOINT = / mount / ubuntu

まず、次のようにファイルシステムをマウントしました(マウントポイントの作成を忘れないでください):mount / dev / ubuntu / root $ MPOINT mount / dev / ubuntu / home $ MPOINT / home

次に、実行中のシステムから乱雑なシステムにアクセス許可をコピーするために、次のコマンドを実行しました(私の問題はいくつかの重要なディレクトリにのみありました)そしてそこに許可を得ました):

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
(...)

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

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:

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

上記からスクリプトを変更しましたが、次のようになります。

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

3

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. ほとんどのことがうまくいくことを願っています(すべてがうまくいくとは限りません)

2

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

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

パッケージをステータスでソートし(上部にインストール済みパッケージ)、インストール済みパッケージをすべて選択し、右クリックして再インストールを選択します。次に適用すると、dpkgそれらのパッケージのすべてのファイルを再抽出するように求められます。(ローカルの変更は失われます(構成ファイルの変更は失われません)。)

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


-2

ライブCDから起動します。次にシェルを起動し、sudo -sを実行します。次に、chmod 777 / *、次にchmod 600 / etc / passwd。/ lib / initスクリプトが実行可能でない場合に発生するinitが失敗すると、カーネルはパニックします。Lilo Linux 1のシングルユーザーモードで起動し、上記のuser102453のスクリプトを実行します。これにより、システムのブートが要求されます。Xを実行する必要があります。


3
うわー、それはあなたがそこに持っているかなりひどいアイデアです。
HopelessN00b

-3

/の許可を755に設定すると、うまくいきました。

だから最初に確認してください

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

権限は「drwxr-xr-x」(755)にする必要があります。


1
これは、質問の再帰的な部分を扱っていません。
カスペルド

いいえ、4755 2755と6755のどちらにも役立ちません。/ usr(多くの場合)だけである場合、同様のシステムで再帰的にls -alを実行し、755を除外できます。これにより、手動で処理できる1000個未満のファイルのリストを残すことができます。もちろん、srcとheaderは重要ではありません。
mckenzm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.