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

  • 45
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

はじめに

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さんが、shutdownrebootのコマンドの時のみパスワード入力を省略するには、以下のように、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