問題の原因
次のように、「。hgignore」などの隠しファイルにグループ書き込み権限を追加するつもりでした。
#pwd /opt #Sudo chmod -R g + w。*
問題は、「..」がこのパターンに一致し、RHELファイルシステム全体にg + wが設定されていることです。差し迫った問題は次のとおりです。
質問
リモートでログインできるようにするには、サーバーに物理的にアクセスできる人に、システムの修正方法を指示する必要があります。
ここで問題となるのは、ssh
およびSudo
の機能を復元するために、どの重要なファイルとディレクトリのアクセス許可を元に戻す必要があるかということです。
「重複としてクローズ」に関する注意
質問 「chmod-R 777 /」が破壊的である理由 は、アクセス許可を再帰的に拡張することでどのような効果が得られるかについて詳細に説明しています。この質問は、sshを介してリモートアクセスを回復し、より広範な復元と修復を実行する方法についての質問に答えることを目的としています。
パッケージの一部であるファイルの場合、次の手順を実行すると、何が台無しになったかを確認できます。
rpm --verify "packagename"
ここで、packagenameは個別のパッケージです。または、「rpm-qa」の出力をループすることもできます。
次に、rpmを使用して次のようなものでそれらを修正できるはずです。
rpm --setperm "packagename"
Sshの問題は、/ etcのすぐ下に限定されるものではなく、接続しようとしているユーザーの.sshフォルダーにも関係があります。通常、ユーザーの.sshフォルダーは700、秘密鍵は600、その他はすべて644にする必要があります。
/ etc/sshフォルダーは755、/ etc/sshの下の秘密鍵は600、その他はすべて644である必要があります。
/ etcの不正なアクセス許可からサーバーを回復する方法は?
おそらく最も簡単な方法の1つは、バックアップから復元することかもしれません。バックアップを作成し、復元手順をテストしましたか? :)
復元に使用できるバックアップがない場合は、VM)で同一のクリーンなシステムをセットアップしてから、に基づいてホストのアクセス許可を修正する必要があります。 2つを比較することによってあなたのサーバー。
正常なサーバーがわかっている場合は、正常なサーバーで次のようなものを実行すると、サーバーを復元できる場合があります。 (再帰的グロブ機能(zsh)を想定し、代わりに-exec/xargsでfindを使用できます):
for i in /etc/**/*; do
perm=$(stat "$i" -c "%a")
ssh root@badServerHostName "chmod $perm $i"
done
他を除外するためのいくつかのサブディレクトリが追加される可能性があります...それができるならRsyncの方が良いでしょうのみ権限ですが、私はそれができないと思います。
バックアップがあり、LVMと十分なスペースがある場合は、次の操作を実行できます。
1.バックアップを新しい一時的なlvに復元します(/ oldpermの下にマウントします)
2。次の擬似コードのようなことをします。
foreach oldfile in /oldperm/* {
newf = strip "/oldperm" from oldfile
chmod --reference=oldfile newf
}
スペースに問題がある場合は、最初に/ etcの下にあるすべてのものと同様に、部分的に復元できます。このトリックは、chmodのフラグ--referenceに依存しています。このフラグは、テンプレートとして別のファイルを受け取り、引数をパーミッション的に一致させます。
この方法では、ファイルの内容を変更せずに、古いパーマのみを復元します。