モヒカンは正義

渋谷で働く怪しいWebエンジニアの生きた証と備忘録

sudoコマンドをパスワードなしで使えるようにする

f:id:pinkumohikan:20170611155236p:plain

unix系OSには任意のユーザとしてコマンドを実行する sudo というコマンドがあります。

Linuxコマンド集 - 【 sudo 】指定したユーザーでコマンドを実行する:ITpro

このコマンドは、一般ユーザでログインした状態でroot権限でコマンドを実行したいときに良く使われますが、デフォルトだと下記のようにユーザのパスワードを要求されます。

$ sudo whoami
[sudo] password for h-shinoda:
root # rootユーザとして実行されている

プロビジョニング時など、何度もsudoを叩く必要があるときに都度パスワードを要求されるとキレそうになりますが、下記のように設定をすることによってパスワードを要求させないように出来ます。

注意 パスワードが要求されない = その一般ユーザアカウントがハックされる = rootが乗っ取られると同義なので、リスクを承知のうえで行って下さい。

方法

誰がどのようにsudo出来るかという情報は /etc/sudoers というファイルで管理されています。が、このファイルを決して手動で編集してはいけません。

今回やろうとしている変更としては、「特定のユーザに対して、パスワードなしで(すべてのコマンドを)sudoできるようにする」というものですので、ユーザ名を h-shinoda とすると、追加する設定としては下記のようになります。

h-shinoda ALL=(ALL) NOPASSWD: ALL

上記を visudo コマンドを使って /etc/sudoers へ設定します

$ sudo visudo

90行目辺りのrootユーザに対する設定の直下辺りにでも追加します。

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
h-shinoda ALL=(ALL) NOPASSWD: ALL # コイツを追加

追加したら :wq で write & quit しますが、この時、設定ファイルとしてのverifyが走り、問題なければsudoersへ変更が適用されます。

ここまで設定できれば、sudoでパスワードを要求されることはありません。

$ sudo whoami
root

おつかれさまでした!

補足

補足1: どうして手動で /etc/sudoers を編集してはいけないのか

sudoコマンドを実行するたびにsudoersファイルが読まれるため、変更は即時反映されます。 つまり、誤った設定や構文エラーなどで一度設定を壊してしまうとそれ以降sudoコマンドが使えなくなります。

インターネットへ公開されているサーバの場合、セキュリティ的に普通はrootによるssh接続を禁止していると思うので、その状況でsudoが使えないとなると… 考えるだけでもゾクゾクしますね!(遠い目)

補足2: 実際には /etc/sudoers はあまりイジらない

一つのファイルにいろんな設定を書くと、可読性が下がってしまいます。 じゃあどうするでいうと /etc/sudoers.d 下に、ユーザごとに設定ファイルを持つことが多いと思います。

その場合、visudoコマンドの-fオプションでファイル名を指定します。

$ sudo visudo -f /etc/sudoers.d/h-shinoda

補足3: visudoで誤った設定を保存してしまった場合

問題があれば下記のようにでます。

$ sudo visudo
visudo: >>> /etc/sudoers: syntax error near line 92 <<<
What now?

この時の選択肢としては、下記の3つがあります。

  • e: 再編集する (再度vimが開き、問題点を直す)
  • x: sudoersを変更をせずに終了する
  • q: 構わずsudoersを変更をして終了する (DANGER!)

補足4: アレェ?設定したのにパスワードが要求される…

ユーザが wheel グループに属している場合、NOPASSWD指定が上書きされてパスワードが要求されます。 自分が wheel グループに属しているかどうかは id コマンドで確認できます。

$ id
uid=1000(h-shinoda) gid=100(users) groups=100(users),10(wheel)

この場合の選択肢としては、下記のようなものがあります。

  1. wheel グループからユーザを外す
    • usermod コマンドを使う
  2. 追加したNOPASSWDの設定を、sudoersの %wheel ALL=(ALL) ALL 行以降へ移動させる
    • 上から最後まで設定を舐めて、最後にmatchする設定が適用されるため