Edited at

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

More than 3 years have passed since last update.

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


まとめ



  • /etc/sudoersに追記するときはこれよりも後ろに記述すること!


    %admin ALL = (ALL) ALL


  • もしくは/etc/sudoers.d/の下に個別にファイルを作る!


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


0. 環境


  • macOS Sierra 10.12.1

  • Vagrant 1.8.6


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. 参考