はじめに
Ubuntuでsudoによる操作を行う時に、いちいちパスワード聞かれてうざいなぁって思うこと無いですか?
特に、find
locate
とかapt-get
とか reboot
shutdown
みたいに良く使うコマンドだとなおさらだと思います。
そんな時に、パスワードを入力しなくても済む方法があったので、記しておきたいと思います。
尚、本記事を読んで行われた処理や事故に対し、当方は一切の責任を負いませんのであらかじめご了承ください。
sudoersファイルとvisudo
sudoでは、sudoersファイルにより、sudoの管理者権限などを記述しています。
そこで、これを編集することにより、任意のユーザに対してパスワードを入力することなく、sudoを使用できるようにします。
ただし、編集に失敗すると、最悪、sudoが使用できなくなるので、慎重に編集しましょう。
そして、編集失敗の悲劇を避けるために、visudo`というものが用意されています。
必ずvisudoを使用して編集しましょう。
ちなみに、visudoを使うと、仮に間違った文法で記入しても、適用前に色々と確認をとってくれます。
すべてのコマンドのパスワード入力を省略する
では早速、visudoを使ってsudoersファイルを編集してみましょう。
以下のコマンドでvisudoを起動してください
$ sudo visudo
もちろん、sudoパスワードを要求されるので、いつもどおり入力してください。
sudoパスワードを忘れちゃったよというドジっ子なあなたは、私の記事sudoのパスワードを忘れたら...をご覧ください。
とりあえずsudoパスワードが入力できたとして進めると、以下のような編集画面が開いたと思います。
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
^G ヘルプ ^O 保存 ^R 読み込み ^Y 前のページ ^K 切り取り ^C 位置
^X 終了 ^J 両端揃え ^W 検索 ^V 次のページ ^U 貼り付け ^T スペル確認
これを編集することになるのですが、パスワード入力を無効にするには、以下のような要素を新たに入力を行います。
<username> ALL=NOPASSWD: ALL
なので、例えば、ユーザー名が hoge さんであれば、
hoge ALL=NOPASSWD: ALL
という感じです。
ところで、薄々感じているとは思いますが、上記の方法だと、すべてのコマンドがパスワード無しで使えるようになります。
つまり、ユーザーが乗っ取られてしまうと、やりたい放題されてしまいます。
それぐらい強力な設定になってしまうので、上記の方法はあまりおすすめしません。
それでも。。。という方は、自分の責任の範疇での行動をおねがいします。
一部のコマンドのみ、パスワード入力を省略する
というわけで、一部のコマンドの時のみパスワードの入力を省略する方法を紹介します。
具体的には、例えば、 shutdown のコマンドを入力するときだけ、パスワード入力を省略したいとすると、以下のようにshutdownバイナリ本体の場所をNOPASSWDの対象にしてやれば良いということです。
hoge ALL=NOPASSWD: /sbin/shutdown
というわけで、visudoを起動したところから具体的な話を進めます。例えば、hogeさんが、shutdownとrebootのコマンドの時のみパスワード入力を省略するには、以下のように、sudoersファイルを編集してやれば良いことになります。
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
hoge ALL=NOPASSWD: /sbin/shutdown
hoge ALL=NOPASSWD: /sbin/reboot
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
^G ヘルプ ^O 保存 ^R 読み込み ^Y 前のページ ^K 切り取り ^C 位置
^X 終了 ^J 両端揃え ^W 検索 ^V 次のページ ^U 貼り付け ^T スペル確認
編集し終わったら、Ctrl-Xで保存し、終了しましょう。
上の例の場合でうまく行っていたら、特に何も表示されず、次回以降、hogeさんは、shutdownとrebootだけ、パスワードを聞かれることなく、sudoで実行することができるようになります。
visudoを使ってsudoersファイルの編集に失敗した場合(visudoを使っていること前提)
はじめに にも書いていますが、sudurersファイルの編集に失敗すると、sudoが使えなくなります。
そこで、visudoを使った時に、編集に失敗した場合にどうなるか記しておきたいと思います。
もちろん、編集した段階では、失敗に気づいていません。つまり、Ctrl-Xを押して、保存し、終了したところまでは同じです。
意気揚々とEnterキーを「ッターンッ」ってすると以下のようなエラーが出ていると思います。
>>> /etc/sudoers: syntax error near line 28 <<<
次は何でしょうか?
visudoってすごいですね。文法の間違いを指摘してくれます。
と言っても、次はどうすればよいのでしょうか?
ここで、もう一度Enterを押すと、先ほどに続いて以下のような表示が出たはずです。
>>> /etc/sudoers: syntax error near line 28 <<<
次は何でしょうか?
オプション:
e -- sudoers ファイルを再度編集します
x -- sudoers ファイルへの変更を保存せずに終了します
Q -- sudoers ファイルへの変更を保存して終了します (*危険です!*)
次は何でしょうか?
迷わずeを入力し、間違いの箇所を訂正しましょう。
因みに、今の例では、rebootについての記述箇所に間違いがありました。
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
hoge ALL=NOPASSWD: /sbin/shutdown
hoge ALL=NOPASWD: /sbin/reboot
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
^G ヘルプ ^O 保存 ^R 読み込み ^Y 前のページ ^K 切り取り ^C 位置
^X 終了 ^J 両端揃え ^W 検索 ^V 次のページ ^U 貼り付け ^T スペル確認
確かに、28行目が間違っている !
というわけで、これを変更してもう一度Ctrl-Xを押して保存し、終了しましょう。
このように、visudoを使えば、安全にsudoersファイルを編集することができます。
参考
http://www.sadaji.net/Firmware/BBB/eclipse/auto_sudo.htm
http://wiki.ubuntulinux.jp/UbuntuTips/Others/RootSudo
検証環境
PC | Lenovo ThinkPad X240 | |
Prosessor | Intel Core i7-4600U (2.10GHz, 4MB, 1600MHz) | |
RAM | PC3-12800 DDR3L (8GB) | |
OS | Ubuntu 14.04 LTS 64bit | |
Kernel | 3.13.0-44-generic |