/以下のパーミッションを壊してしまった

find . -print0 | xargs -0 chmod o+rするつもりが.の代わりに/を打ってしまった。しかもrootでサーバ設定をいじっていた流れで作業していたので権限に不足無し。なぜchmod -R o+r .ではなくわざわざ長いコマンドにしたのか不明だが、だからこそtypoもしたのだろう。/proc以下でエラーが多発したところで気づいたが、^Cを押す前に処理が完了してしまった。
バックアップは当日分があるがデータの復旧用として一部ディレクトリしか取っていない。

大惨事ではあるがchmodするときは数値指定したり対象をallにしないように癖を付けていたのですべてが644になるような悲劇は免れた。とりあえず大事なshadowとhome直下、それに公開鍵認証や証明書のあたりを戻す。

chmod -c o-r /etc/shadow* /etc/ssh/*_key
chmod -cR o-r /home/hoge /home/*/.ssh ...

当該サーバ(corrupted)は幸い設置したばかりなので同じディストロ(el7)を使っている他のサーバ(master)から設定をコピーすればそれなりに復旧する(はず)。
完全に壊した場合はrsync -aで正しい状態のファイルを参考用に転送してchmod --referenceする手があるようだ。今回o+rしただけなので、考えた末、更に簡単にmasterでo-rなファイルの一覧を取得してそれをcorruptedに適用することにした。

# master
find / ! -perm -004 > perms.txt
scp perms.txt user@corrupted:
# corrupted
xargs -d '\n' -a perms.txt chmod o-r 2>&1 | less

/proc, /sys, /tmpで多少エラーが出たが、/home/*/以下の細々としたものを除外すればかなり元に戻ったと思う。
最後に問題のコマンドを再実行しないように、upキーでbashの履歴をたどって、やらかした行をコメントアウトしてdownで戻る。