警告する

警告する

私はUbuntu 12.04(32ビット)を使用しています。今日誤って次のコマンドを実行しました。

警告する

次のコマンドを実行しないでください。

sudo find / -type d -exec chmod -Rf a-wr {} \;

システムにログインできません。システムにユーザーが 1 人だけで、ルートが無効になっています。解決策ご存知ですか?

答え1

システムのすべてのディレクトリから読み取りおよび書き込み権限を削除すると、明らかにすべてのディストリビューションの動作が停止します。これは無言の音です。

編集1

CD / DVD / USBスティックから別のLinuxを起動し、影響を受けるすべてのボリュームのアクセス権を正しく設定すると、システムを回復できます。元の状態に復元するのは複雑かもしれませんが、再び操作する方が簡単です。ユーザーが1人だけでネットワークをサービスするデーモンがない場合、問題やセキュリティのリスクはありません。

mount -t auto /dev/whatever /mnt/targetvolume
find /mnt/targetvolume -type d -exec chmod 755 {} \;
find /mnt/targetvolume -type f -exec chmod 644 {} \;
chmod -R a+x /mnt/targetvolume/bin /mnt/targetvolume/sbin \
  /mnt/targetvolume/lib /mnt/targetvolume/lib64 /mnt/targetvolume/sbin \
  /mnt/targetvolume/usr/ /mnt/targetvolume/usr/bin \
  /mnt/targetvolume/usr/lib /mnt/targetvolume/usr/lib64 \
  /mnt/targetvolume/usr/sbin

/ etcで正しい権限を復元することが重要です。私の提案は、同じディストリビューションを使用している人(インストールしたすべてのソフトウェアをインストールした人が望む)に、以下を提供するように依頼することです。

# on a working system
getfacl --recursive /etc > acl-etc.txt
# on your system
setfacl --restore=acl-etc.txt /etc
# or from the rescue system
setfacl --restore=acl-etc.txt /mnt/targetvolume/etc

これは次の方法でさらに改善することができます。

  1. / etcのすべてのファイルとディレクトリが参照システムにあることを確認します。
  2. パッケージマネージャにインストールされたパッケージへのアクセス権を確認します(例:rpm --verify package)。

答え2

何が起こったのか、そしてそれに対してどのような措置を取ることができるのかを見てみましょう。

sudo find / -type d -exec chmod -Rf a-wr {} \;

これはかなり簡単な部分に分けることができます。

sudo find / -type d

それ自体は無害です。これは-type dファイルシステムのすべてのディレクトリのリストを生成します(これはまさにその目的です)。

-exec

リストの各項目に対して指定されたコマンドを実行します。

chmod -Rf a-wr {}

今私たちは真剣になります。{}現在のリスト項目に展開されるため、各ディレクトリに対して実行されるコマンドはですchmod -Rf a-wr $DIRNAME。 chmodの場合、-Rこれは再帰操作、-fエラーメッセージ出力の抑制、すべてのユーザー(非所有者とは異なる代表者)に対するa-wr書き込みおよび読み取り権限の削除を意味します。 。aallo

\;

実行するコマンドラインが終了しました。

したがって、(chmodに-R引数を渡してディレクトリを指定すると、その下のすべての項目に対してモード変更が行われるため)、実行するコマンドは実際に理解しやすいコマンドと同じです。

chmod --recursive --quiet a-wr /

システムのほぼすべての内容を読み取ることができ、ほとんど書き込み可能であると言う必要があるかどうか疑問です。仕事をスムーズに進めてください。また、ディレクトリに対する読み取り権限を削除すると、一般的な方法を使用してディレクトリのリストを取得できなくなり、他の場所で混乱を招く可能性があります。

それ可能インストールされたパッケージを再インストールして修復することはできますが、これはホームディレクトリには役立たず、正しく機能するという保証もありません。適切に設定されたライブCD(使用しているオペレーティングシステムと同じライブCDをお勧めします)が必要です。これを使用して起動し、ルートファイルシステムをマウントしてシェルに挿入します。その後、chroot /mnt /bin/bash/ mntはシステムルートファイルシステムのマウントポイントで、残りのファイルmount -aシステムがマウントされます。

すべてdpkg -u --reinstall install '.+'のパッケージを再インストールして、ほとんどの損傷を修正する必要があります。これを完了するには少し時間がかかります。

次に、ホームディレクトリを確認して適切な権限を設定します。次から始めると、少なくとも基本的に速度を上げることができます。

find /home/me -not -type d -exec chmod 640 {} \;
find /home/me -type d -exec chmod 750 {} \;

これは、すべてのディレクトリをユーザーの読み取り/書き込み/実行、グループの読み取り/実行、および他の人のアクセスに設定し、ディレクトリ以外のディレクトリをユーザーの読み取り/書き込み、グループの読み取り、および他の人のアクセスに設定することが合理的な基準です。

繰り返しますが、この修正後にすべてが正常に機能するという保証はありません(または修正がまったく機能するという保証はありません。正確なコマンドを試しておらず、確かにあなたが作成した条件では試していません)。しかし、うまくいけば次のようになります。しなければならない少なくともシステムが起動できるようにします。起動可能なシステムがあれば、追加のリカバリを実行しやすくなります。

より簡単な代替、ある場合は、バックアップの回復方法を練習してください。

答え3

ジョンはあなたに思い出させようとしましたが、あなたはそれを無視しました。今すぐ破損している場合は、システムをシングルモードで起動し、ログを確認してください。 /tmpの権限をdrwxrwxrwt - 'chmod o+t /tmp'に変更して確認してください。

関連情報