visudoはsudo権限を変更するためのコマンドだ。sudoersファイルを安全に編集するコマンドになる。
このページではvisudoコマンドについてまとめている。
目次
sudoでの実行
Linuxでは例えばユーザーの追加や削除やプロセスの管理など、管理者以外が操作するとシステム運用にリスクを伴う。
そのため、Linuxシステムにとって重要なコマンドは、rootのような管理者だけが実行できるようにするのが一般的だ。
下記のページで詳しく解説している。
上記ページでも解説しているが一般ユーザでrootユーザしかできないような各種作業を使いたいときはsudoを使う。
もちろん自由にsudoできるわけではなく、sudoができるユーザなども細かく指定ができる。sudoersファイルはデフォルトでは/etc/sudoersを編集することになる。
visudoコマンドは管理者の権限でのみ操作できる。
visudoコマンドの基本
visudoコマンドを使うと設定ファイルが編集できる。viでファイルを指定してもいいのだが、visudoは簡単だ。
コマンドの基本動作
使い方は、次のとおりだ。
$ visudo
sudoersファイルを編集する場合は、次のコマンドだ。
すると、sudoersファイルを編集できるようになった。
sudoersファイルの設定
実際にvisudoコマンドの挙動を見ながら、sudoersファイルの編集方法を解説する。
まず、Linuxユーザーsnowは追加したばかりだ。passwdコマンドでパスワードを設定しただけの一般ユーザーで、sudoの権限はない。
snowユーザのままでuseraddコマンドを実行しようとしパスワードを入力しても、「snow is not in the sudoers file. This incident will be reported.」というエラーが表示される。
追加したばかりのユーザーはsudoの権限がないのだ。
そこで、visudoコマンドでsudoersファイルを編集し、ユーザーsnowにもsudoの権限を付与する。
ファイル内に次のような設定が記述されている。
root ALL=(ALL) ALL
この「root ALL=(ALL) ALL」の部分が権限になる。書式は「ユーザー ホスト=(誰々として) コマンドパス」だ。ALLの場合はすべてのコマンドを実行可能という意味になる。
「ホストtty7からアクセスしたユーザーsnowは、vagrantとして/usr/sbin/useraddコマンドをsudoで実行できる」という場合は次の設定になる。
snow tty7=(vagrant) /usr/sbin/useradd
ホストなどはALL(すべてOK)であることがほとんどだが、このようにも記述ができる。また、ユーザーは%を付与することでグループを指定することができる。
コマンドパス
指定するコマンドパスはwhichコマンドで調べたいコマンドを調べることでわかる。例えば、userdelコマンドのコマンドパスは次のコマンドでわかる。
$ which userdel
今回はsnowに対してsudoですべてのコマンドが実行できるようにする。
「root ALL=(ALL) ALL」の行の下に「snow ALL=(ALL) ALL」を入力する。
エディタを終了して、エラーメッセージが出なければ問題なくsudoersファイルの設定が適用されている。
再度、ユーザーsnowでsudoを使ってuseraddコマンドを実行してみる。
今度はエラーが出ずに実行できた。
編集時にエラーだった時の挙動
編集時にわざとsudoersファイルの最終行に「xxx」と入力し、保存、エディタを終了してみた。
エラーメッセージが表示され、どうするかの問い合わせがある。
この時、eのキーを押すと、再編集のためにエディタ画面に戻る。xのキーでは、編集を破棄し、編集前の状態が維持される。
問い合わせ時に、そのままEnterキーを押すと、上記の内容が表示されるので、忘れてしまった時は活用するとよいだろう。
パスワード入力の制御
sudoで実行した時のパスワード入力をしないように設定することもできる。
「ユーザー ホスト= NOPASSWD: コマンドパス」となり、すべての端末から/usr/sbin/useraddをユーザーsnowが実行した場合、パスワードを入力しなくてよくする設定は、「snow ALL=NOPASSWD: /usr/sbin/useradd」となる。
visudoコマンドのオプションたち
オプションの一覧
後から詳細をご紹介するが、まずは一覧で見てみよう。
オプション-c
書式のチェックのみを行う。
オプション-q
編集後書式のエラー結果を表示しない。
オプション-s
厳密なチェックを行う。
オプション-f
sudoersのファイルを指定する。
-cオプション:書式のチェックのみを行う
書式のチェックのみを行うコマンドは次のとおりだ。
$ visudo -c
書式のチェックが表示され、正常であることが確認できた。
もし、ファイルが正常ではなかった場合は、エラー表示となる。
-qオプション:編集後書式のエラー結果を表示しない
編集後書式のエラー結果を表示しない書式は次のとおりだ。
$ visudo -q
わざと間違った書式で編集を終了したが、書式のエラー結果を表示しない。書式のエラー結果を表示しないだけでエラーのために再編集を促すメッセージは表示される。
-sオプション:厳密なチェックを行う
厳密なチェックを行いながら編集するコマンドは次のとおりだ。
$ visudo -s
-fオプション:sudoersのファイルを指定する
sudoersのファイルを指定する書式は次のとおりだ。
$ visudo -f ファイルパス
例えば、sudoersのファイルを/tmp/sudoers_testに指定するコマンドは次のとおりだ。
$ visudo -f /tmp/sudoers_test
sudoersのファイルを指定しsudoersファイルを編集する。
visudo関連コマンド
最後にvisudoコマンドに関連して、基本的なsudo関連のコマンドも紹介しておく
suコマンド
ユーザーを切り替えログインするコマンドだ。
まとめ
このページでは、visudoコマンドについての解説と挙動と使い方を詳しく解説した。
それほど使うコマンドではないかもしれないが、初期環境を設定するときなどに活躍する。出番が来たら思い出していただければと思う。