「sudoedit」で安全で快適にLinuxの設定ファイルを編集しよう!

2018年7月18日

sudoedit」コマンドを使えば、所有者がrootのテキストファイルを安全で快適に編集できます。

sudoが使える状態なら、「sudoedit」を使ったテキストファイルの編集が可能です。「sudo -e」と実行することもできます。

sudoeditのメリット

sudoeditを使うと、一般ユーザー権限で動くテキストエディターで設定ファイルを編集できます。

たとえば「sudo vim ファイルパス」のように実行すると、Vimがroot権限で実行されます。そのため、Vimから外部コマンドを実行するとroot権限で動作してしまいます。
また、コマンドラインに入力したファイルパス以外の場所に、別の名前で保存した場合も所有者は「root」となります。rootが所有者となっている別のファイルを上書きすることも自由にできてしまいます。
これは、テキストファイルを1つ編集するだけなのに、操作ミスなどによりシステムに障害を与えるリスクが高くなった状態だと言えるでしょう。

一方、「sudoedit ファイルパス」と実行した場合、Vimなどのエディターが一般ユーザーの権限で起動します。そして、編集対象のファイルはテンポラリファイル(一時ファイル)にコピーして開かれます。そして、テキストエディターが終了した時に、テンポラリファイルが変更されていれば元のファイルに上書きする処理が実行されます。

このように、sudoeditを使えば、指定したファイルの変更に限定してroot権限を使うことができます

さらに、普段使っているテキストエディターの設定で編集できることも大きなメリットです。たとえば、Vimを使うなら自分のホームディレクトリにある「.vimrc」が読み込まれます。また、geditのようなGUIのテキストエディターを使うこともできます。普段の設定、普段のプラグインを使って編集作業が可能です。

sudoeditの実行方法

次の例では、「sudoedit」で「/etc/hosts」を開いています。通常はシステム標準のテキストエディターでファイルが開きます。sudoの場合と同様、実行時にパスワードを入力して認証することが必要です。

sudoedit /etc/hosts

次のように「sudo -e」を用いることもできます。

sudo -e /etc/hosts

起動するエディターを変更するには、以下のいずれかの方法を用います。

システムのデフォルトエディターを設定する
Ubuntu/Debian系なら「sudo update-alternatives --config editor」コマンドでデフォルトのエディターを選択できます(コンソールエディターのみ)。
環境変数「SUDO_EDITOR」を設定する
環境変数「VISUAL」を設定する
環境変数「EDITOR」を設定する

環境変数は、「SUDO_EDITOR」「VISUAL」「EDITOR」の順番で参照されます。

たとえば次のように実行すれば、「micro」で「/etc/hosts」を編集できます。

SUDO_EDITOR=micro sudoedit /etc/hosts

次のように実行すれば、「gedit」で「/etc/hosts」を編集できます。

SUDO_EDITOR=gedit sudoedit /etc/hosts

設定例

環境変数を毎回指定するのは面倒なので、使いたいエディターを「~/.bashrc」で設定すると良いでしょう。

通常は、環境変数「EDITOR」だけを設定しておけば十分でしょう。「sudoedit」を実行した場合に別のエディターを使いたい場合や、コマンドラインオプションを追加したい場合は「SUDO_EDITOR」も設定します。

以下に、「~/.bashrc」への追記例を紹介します。

「vim」を指定する例

export EDITOR=vim

「micro」を指定する例

export EDITOR=micro

「gedit」を指定する例

export EDITOR=gedit

デスクトップへのログイン時は「gedit」、コンソールやSSHでのログイン時は「micro」を指定する例

if [[ $DISPLAY ]];then
  export EDITOR=gedit
else
  export EDITOR=micro
fi

関連項目