rootユーザで操作時にlsコマンドの色つけがないのが不便だったので、普段使いのユーザーアカウントfooから.configなどを/rootにコピーした。そのままだとファイル所有者がもとのユーザーのfooのままだったのでファイル所有者をrootに変更しようとした。
このときのコマンドが事件の発端だった。私は以下のコマンドを打ち込んでしまいました。
#cd /root
#chown -R root:root .*
↑これをやると「.*」は「..」も含まれるので「/root」の「..」は「/」となるので、つまり/以下のファイルすべてを再帰的に所有者rootにしてしまったのである。こうなるとデーモンやサービスのアカウントもログや設定ファイルにアクセスできなくなり大変なことになってしまいました。superuser以外システムを全く操作できなくなってしまいました。
もしやるとするなら
#cd /root
#chown -R root:root .[^\.]*
もしくは
#chown -R root:root /root
調べるとRedhatには、パッケージマネージャーの管理下にあるパッケージすべてをもとのファイルパーミッション、ファイル所有者に戻すコマンドがあるらしいです。私の使っているOSはdebianなので類似のコマンドがないか探したが見つかりませんでした。代わりに全パッケージを再インストールすれば同様の効果が得られることがわかりました。
以下のコマンドで全パッケージを再インストールしました。
dpkg --get-slections \* | awk '{print $1}' | xargs -l1 apt reinstall
これだけだと、一部ファイルのパーミッションがおかしいので以下も変更します。
■sudo
#chown root:root /usr/bin/sudo
#chmod 4755 /usr/bin/sudo
※4755の4000は「SUID」
■aptキャッシュ
sudo chown -R man:man /var/cache/man/
sudo chown -R man:man /var/cache/man/*
■sddmの設定ファイルパーミッション
sudo chown -R sddm:sddm /var/lib/sddm/.config
■これをしないとKDEスクリーンロックしたときに、正しいパスワードを入力してもロック解除できなくなる
sudo chmod 4755 /sbin/unix_chkpwd
これで一通り使えるようにはなったけど、今後もファイル所有者やパーミッション設定が間違っている箇所があれば追記していきます。