ものづくりのブログ

うちのネコを題材にしたものづくりができたらいいなと思っていろいろ奮闘してます。

【RaspberryPi】/etc/sudo.conf の権限を変更してしまい復旧を試みるが失敗してしまった話...

RaspberryPi で不用意に 「/etc」の権限を変更させてしまい、その中に「/etc/sudo.conf」が含まれていたため sudo が使用できないといった問題が起こりました。
いろいろ復旧を試みたのですが、うまくいかず...いったんここにメモを残そうと思います。

RaspberryPi 起きたトラブル

エラー

sudo: /etc/sudo.conf is world writable

このエラーは、「/etc/sudo.conf」ファイルのパーミッションが誤っているため、セキュリティ上の理由で sudo が使用できなくなっている状態のようです。
この問題を修正するには、/etc/sudo.conf のパーミッションを修正が必要そうです。ただ、sudo コマンドが使用できないため、root ユーザーとしてシステムにログインし、手動で修正する必要があります。

対応検討

root ユーザーとしてログイン

「su -」で root ユーザーに切りかえたいのですが、「su: Authentication failure」というエラーが出てしまいました。おそらくパスワードを設定していなかったためだと思い諦めました。

Recovery モードで起動して root シェルにアクセス

コンピュータを再起動し、GRUB メニューが表示されるまで Shift キーを押し続けてみたのですが、うまくいかず...

SDカードを他のコンピュータにマウントして修正

Raspberry PiのSDカードを別の マシンに接続して、直接ファイルシステムを修正する方法を検討しました。

状況整理

  • Raspberry Pi の /etc/sudo.conf のパーミッションを誤って変更
  • sudo や su が使えない状態
  • root 権限にアクセスできない
  • Macで Raspberry Pi の microSD カードをマウントして権限を修正する方法を検討

ext4fuse

ext4 ファイルシステムを読むためのツールがあるとのことで、インストールを試みます。
ext4fuse を使えば、ext4フォーマットの Raspberry Pi の SD カードパーティションをマウントしてアクセスができるとのことです。
(ただ、後々このツールが読み取り専用で、書き込みはサポートされていないことにこの時は知りませんでした...)

ext4fuse インストール

$ brew install ext4fuse

なんか失敗...

エラー

Error: Your Xcode (14.2) at /Applications/Xcode.app is too outdated.
Please update to Xcode 15.4 (or delete it).
Xcode can be updated from the App Store.

このエラーメッセージは、Homebrewやその他のパッケージがインストールされる際に、Xcodeのバージョンが古いために発生しています。Xcodeが必要なコンパイルプロセスに対して、現在のバージョン(14.2)がサポートされていないということです。

Xcode セットアップ

Xcodeをアップデート

Xcodeをアップデート

App Storeを使って更新を試みます。

Xcodeの古いバージョンを削除

Xcode のアップデートが難しい場合、Xcode を削除してから再インストールすることもできます。Xcode は比較的大きなファイルなので、古いバージョンを削除してからインストールするとスムーズに進むことがあります。

$ sudo rm -rf /Applications/Xcode.app
Xcode Command Line Toolsのアップデート

Xcode 自体だけでなく、Command Line Tools のアップデートも必要のようです。これが古いと Homebrew が正しく動作しないことがあります。
ターミナルで次のコマンドを実行して、最新のCommand Line Toolsをインストールします。

$ xcode-select --install

再度 ext4fuse

ext4fuse インストール

$ brew install ext4fuse

microSDカードをMacに挿入

挿入後、diskutil コマンドでマウントされているデバイスを確認します。

$ diskutil list

マウントポイント作成

$ sudo mkdir /Volumes/rootfs

マウント

$ sudo ext4fuse /dev/disk2s2 /Volumes/rootfs

マウント確認

マウントが成功しているかどうかは、mountコマンドを使って確認します。

$ mount

出力結果に、ext4fuseでマウントしたパーティションが表示されているか確認します。

ファイルの修正(chmod が失敗)

# chmod 644 /Volumes/rootfs/etc/sudo.conf
chmod: Unable to change file mode on /Volumes/rootfs/etc/sudo.conf: Function not implemented

このエラーが発生するのは、ext4fuse が読み取り専用でマウントされているため、書き込みやパーミッション変更ができないことが原因のようです。
ext4fuse は基本的に読み取り専用のツールとのことで、ファイルシステムに対する変更ができませんでした。

アンマウント

% diskutil unmount /Volumes/rootfs          
Unmount successful for /Volumes/rootfs