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