309
270

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-02-26

はじめに

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
309
270
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
309
270