sudo のパスワードを入力なしで使うには

検証日時

02/09/2015(Mon)

概要

Ubuntuでsudoによる操作を行う際に、パスワードを入力せずに使用するための方法について述べます。
尚、本記事を読んで行われた処理や事故に対し、当方は一切の責任を負いませんのであらかじめご了承ください。

環境

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
Gazebo :: Version 5.0.1

便利度

MAX

セキュリティ性

Minimum

参考

sudoパスワードなしでつかう
ubuntu Japanese Wiki g

1. sudoresファイルの編集

sudoresファイルとvisudo

sudoでは、sudoresファイルにより、sudoの管理者権限などを記述しています。
そこで、これを編集することにより、任意のユーザに対してパスワードを入力することなく、sudoを使用できるようにします。
ただし、編集に失敗すると、最悪、sudoが使用できなくなるので、慎重に編集しましょう。
そして、編集失敗の悲劇を避けるために、visudoというものが用意されています。必ずこれ(visudo)を使用して編集しましょう。
ちなみに、visudoを使うと、仮に間違った文法で記入しても、適用前に色々と確認をとってくれます。

sudoresファイルの編集

では早速、visudoを使ってsudoresファイルを編集してみましょう。
以下をbashに入力してください。

sudo visudo

もちろん、sudoパスワードを要求されるので、いつもどおり入力してください。
sudoパスワードを忘れちゃったよという絶望の淵に立たされた方は、私の記事sudoのパスワードを忘れたら...をご覧ください。
とりあえずsudoパスワードが入力できたとして進めると、こんな感じのvi編集画面が開いたと思います。

#
# 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

という感じです。
ところで、薄々感じているとは思いますが、sudoのパスワード入力を省略すると、セキュリティ的にはとても脆くなります !
なので、Ubuntu Japanese Team もおっしゃっていますが、自分の責任の範疇での行動をおねがいします。

一部のコマンドのみ、パスワード入力を省略する

私の場合は、以上の理由により、一部のコマンドの時のみ、パスワードの入力を省略するようにしています。
具体的には、例えば、 shutdown のコマンドを入力するときだけ、パスワード入力を省略したいとすると、以下のようにshutdownバイナリ本体の場所をNOPASSWDの対象にしてやれば良いということです。

hoge ALL=NOPASSWD: /sbin/shutdown

というわけで、hogeさんが、shutdownrebootのコマンドの時のみパスワード入力を省略するには、以下のように、sudoresファイルを編集してやれば良いことになります。

#
# 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で実行することができるようになります。hogeさん、おめでとう。

visudoを使ってsudoresファイルの編集に失敗した場合

ここで、編集に失敗した、残念なhogeさんの場合を覗いていみましょう。
もちろん、編集した段階では、hogeさんは失敗に気づいていません。つまり、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を入力し、間違いの箇所を訂正しましょう。
ちなみに、残念なhogeさんは以下のように、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を使えば、安全にsudoresファイルを編集することができます。よかったね。hogeさん。

Published: February 09 2015

blog comments powered by Disqus