nmtysh.log

Tech系のネタや日々の独り言などを書いています。

VagrantのSynced FoldersでNFSを利用するときにsudoのパスワード入力を省略する

※この記事はQiitaにも投稿しています。

vagrant up時に毎回パスワードを尋ねられるのが煩わしかったのでsudoersを設定したのですが初歩的なことに嵌っていたのでその備忘録。

まとめ

  • /etc/sudoersに追記するときはこれよりも後ろに記述すること!
    %admin ALL = (ALL) ALL
  • もしくは/etc/sudoers.d/の下に個別にファイルを作る!

以下、失敗談込みの設定の流れ

0. 環境

1. sudoersに追記する

Macだとsudoersにこれを追加します。

Cmnd_Alias VAGRANT_EXPORTS_ADD = /usr/bin/tee -a /etc/exports
Cmnd_Alias VAGRANT_NFSD = /sbin/nfsd restart
Cmnd_Alias VAGRANT_EXPORTS_REMOVE = /usr/bin/sed -E -e /*/ d -ibak /etc/exports
%admin ALL=(root) NOPASSWD: VAGRANT_EXPORTS_ADD, VAGRANT_NFSD, VAGRANT_EXPORTS_REMOVE

編集にはsudo visudoを使います。
sudoersを眺めていると"Cmnd alias specification"の項目があるので「ここに書けば良さそう」とここに上の4行を貼り付けました。

保存して意気揚々とvagrant up!
パスワードを尋ねられました……orz

OSの違いなのかと数日悪戦苦闘しながらsudoersを眺めていると"Cmnd alias specification"の下に"%admin ALL = (ALL) ALL"を見つけました。
ひょっとして……と思いつつ設定を"%admin ALL = (ALL) ALL"の下に移動させるとvagrant upがすんなり起動しました。
"%admin ALL=(root) NOPASSWD: 〜"が打ち消されていたんですね……

2. sudoers.dにファイルを作る

sudoersファイルだとまた同じミスを行っていまいそう かつ 他にも設定を入れると長くなってしまうので/private/etc/sudoers.d/にファイルを作ることにしました。
このディレクトリはsudoersの末尾で読み込まれます。
#includedir /private/etc/sudoers.d ←この部分です。
※先頭の#を消す必要はありません(コメントではありません)

$ cat /private/etc/sudoers.d/vagrant-nfs
# NFS - Synced Folders - Vagrant by HashiCorp
# https://www.vagrantup.com/docs/synced-folders/nfs.html
Cmnd_Alias VAGRANT_EXPORTS_ADD = /usr/bin/tee -a /etc/exports
Cmnd_Alias VAGRANT_NFSD = /sbin/nfsd restart
Cmnd_Alias VAGRANT_EXPORTS_REMOVE = /usr/bin/sed -E -e /*/ d -ibak /etc/exports
%admin ALL=(root) NOPASSWD: VAGRANT_EXPORTS_ADD, VAGRANT_NFSD, VAGRANT_EXPORTS_REMOVE

まとめ

  • /etc/sudoersに追記するときはこれよりも後ろに記述すること!
    %admin ALL = (ALL) ALL
  • もしくは/etc/sudoers.d/の下に個別にファイルを作る!

他の設定ファイルでもそうですが、記述順序には気をつけましょう……

x. 参考