2016年6月15日水曜日

raspberry piのvisudoで設定ミスして、sudoできなくなった時の対応方法


焦ったので共有します。

背景

raspberry piのsudo設定は、下記のコマンドでエディタを起動して編集を行います。
sudo vi sudo

問題なく編集が終了すれば良いのですが、記述が間違っているのに保存を強行すると、visudoを開けない上にsudoもできなくなってしまいます。
下記の警告が出るときは、記述にミスの可能性があるので、「Q」を入力せずに「e」で再度編集するか、「x」で編集を破棄すことをお勧めします。
pi@raspberrypi ~ $ sudo visudo
What now? 
Options are:
  (e)dit sudoers file again
  e(x)it without saving changes to sudoers file
  (Q)uit and save changes to sudoers file (DANGER!)

What now? Q

上記の警告を無視してvisudoの設定を終えると、sudoコマンドが実行できなくなる場合があります。
pi@raspberrypi ~ $ sudo
sudo: parse error in /etc/sudoers near line 11
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
pi@raspberrypi ~ $ sudo visudo
sudo: parse error in /etc/sudoers near line 11
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
pi@raspberrypi ~ $ sudo reboot
sudo: parse error in /etc/sudoers near line 11
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

こうなってしまうと、sudoの設定を元に戻すのは自分の調べた限りraspiだけでは不可能です。
(visudoの設定ミスをraspiだけで復旧する方法をご存知な方は、教えて頂けると嬉しいです。)
しかし、PCでSDカードの内容を編集すれば、visudoの設定を変えられるので、raspiでのsudo実行が再び可能な状態に戻せます。
今回はその方法を説明します。

使ったもの

raspiで使っているSDカードが読み込めるPC

設定方法

visudoの設定はSDカード上の/etc/sudoersに記述されています。
このファイルを編集するのですが、権限が「読み込みだけ許可」になっているため、そのままでは編集が行えません。
そのため、下記の手順で変更を行います。

  1. raspiで使っているSDカードをPCで読み込み
  2. 権限を編集可能な状態に変更
  3. ファイルを編集
  4. 権限を元に戻す
  5. PCからSDカードを取り出し、raspiで実行

順番に説明します

raspiで使っているSDカードをPCで読み込み

raspiの電源を切り、SDカードを取り出して、そのSDカードをPCで読み込んでください。

権限を編集可能な状態に変更

ubuntu場合は下記のコマンドで権限を確認できます。
ls -la /media/[ユーザー名]/media/[SDカード名]/etc/sudoers

読み込みだけ可能な状態「- r-- r-- ---」になっていると思います。

下記のコマンドで編集可能な状態に権限を変更します。
sudo chmod 660 /media/[ユーザー名]/media/[SDカード名]/etc/sudoers

これによって、書き込み可能な状態「- rw- rw- ---」になりました。

ちなみに、windowsでも権限の変更が可能なようです。
ファイルとフォルダのアクセス許可を設定、表示、変更、または削除する

ファイルを編集

読み書きできるようになったので、お好きなエディタで「/media/[ユーザー名]/media/[SDカード名]/etc/sudoers」を編集して、間違っている記述を修正してください。
sudo vi /media/[ユーザー名]/media/[SDカード名]/etc/sudoers

権限を元に戻す

変更した権限を元に戻します。
sudo chmod 440 /media/[ユーザー名]/media/[SDカード名]/etc/sudoers

ls -la で確認すると、権限が「- r-- r-- ---」に戻っています。

PCからSDカードを取り出し、raspiで実行

修正が成功していれば、sudoが実行できるようになります。

以上です。
参考になれば嬉しいです。

参考

How can I add a new user as sudoer using the command line?

0 件のコメント :