💭
sudo のときに $PWD がそのままであってほしい
問題
sudo
すると環境変数は /etc/sudoers
に書かれた設定にしたがうので、カレントディレクトリを表す環境変数 $PWD
は通常はリセットされて空文字列になってしまう。
$PWD
は大抵はデフォルトで設定されていて、カレントディレクトリを指し、Makefile
でいろいろな処理を書くときに重宝するので、sudo
時にも保存されていてほしい。
解決法
sudo
実行前の環境変数から引き継がれるのは /etc/sudoers
の中に Defaults env_keep
で指定する。Defaults
は他にこんなものが書かれている。意味はよくわからないが、この辺に追加すればよさそうである。
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
しかし /etc/sudoers
には「このファイルは visudo
を使ってしか編集しちゃダメだよ!代わりに /etc/sudoers.d
の中は勝手にいじっていいから!」的なコメントが書いてあるので、そうさせてもらう。/etc/sudoers.d/README
に「このフォルダに追加するファイルの権限は 0440 でお願いね!」って書いてあるので大人しく従う。
$ cd /etc/sudoers.d
$ touch my_setting
/etc/sudoers.d/my_setting
Defaults env_keep+="PWD"
$ chmod 0440 my_setting
これで OK。
Ansible でやる
以下のタスクを実行させればよい。
---
- name: "add ansible config in /etc/sudoers.d"
lineinfile:
create: yes
dest: /etc/sudoers.d/ansible
line: "Defaults\tenv_keep+=\"PWD\""
mode: 0440
Discussion