わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

Ubuntuで,パスワードなしでrootになるには

パスワードなしでrootになるには,visudoコマンドで設定することです.
なのですが,Ubuntuで設定して,うまくいくときといかないときがあって,苦労していました.
つい先日,常にうまく行く方法を知ったので,ここに書いておきます.
前提として,Ubuntuを標準的な方法でインストールしていること,作ったユーザは一つ(自分のユーザ)だけであることとします.
まず,Ubuntuのメニューで,アプリケーション>アクセサリ>端末 を選び,シェルを起動します.
そこで,sudo -iというコマンドを実行し,自分のパスワードを入力します.プロンプトが「(略)$」から「(略)#」に変わります.
visudoを実行します.テキストエディタが開き,ファイルを編集できます.初期の内容はこんなの:

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults        env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL) ALL

# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need to move
# it further down)
%sudo ALL=(ALL) ALL
#
#includedir /etc/sudoers.d

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

それで,このファイルの最後に,

自分のユーザ名 ALL=(ALL) NOPASSWD: ALL

を書きます.Debian(もっと前からか?)では,root指定の直後に書いて,うまくいっていましたが,Ubuntuでは,デフォルト設定のあとに書くのが肝心です.複数の文書で,「後ろ優先」のルールを確認できます.

端末を開き、sudo visudoと入力します。 以下の行を開いた設定ファイル最後の部分に追加します(最後に書かない場合、後続の設定で書き換えられるかもしれません)。

UbuntuTips/Others/RootSudo - Ubuntu Japanese Wiki

一人のユーザに複数のエントリがマッチするときは、順番に適用される。複数の指定がマッチしている箇所については、最後にマッチしたものが使用される (それが一番明示的なマッチだとはかぎらないが)。

Man page of SUDOERS

それでファイルに保存して,visudoについてはおしまいなのですが,念のため「grep 自分のユーザ名 /etc/group」というコマンドを実行してみると,adminの後ろに自分のユーザ名が入っています.だから,Ubuntuでroot指定の直後に「自分のユーザ名 ALL=(ALL) NOPASSWD: ALL」と書くのでは,それより後ろの「%admin ALL=(ALL) ALL」が優先され,パスワードが必要になってしまうんだな,ということです*1

*1:Debianほかの運用と同じく,root指定の直後に書きたいなら,「%sudo」や「%admin」から始まる行をコメントにするなどの方法も,考えられますが,それはUbuntuらしくないということでしょう.まあ,パスワードを入力しないようにするというのがそもそも邪道であって,セキュリティ上のリスクを負うのですが.