おいちゃんと呼ばれています

ウェブ技術や日々考えたことなどを綴っていきます

sudo でコマンド打ったら「コマンドが見つかりません」と言われたときの気持ち

vagrant マシン(CentOS 7.2)の vagrant ユーザーで sudo puppet apply ... しようとしたら、

sudo: puppet: コマンドが見つかりません

というエラーが出たのでメモ。

調べたこと

root ユーザーになって puppet apply はできる。

[vagrant@app001 vagrant]$ sudo su -

[root@app001 ~]# which puppet
/opt/puppetlabs/bin/puppet

[root@app001 ~]# printenv PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/puppetlabs/bin:/root/bin

はい。PATH は通っていますね。

原因と対処方法

sudo「コマンドが見つかりません」PATH が初期化されているときの対処法 - シングスブログ

ここに全部書いてあった(ありがとうございます)

原因は、sudoers の設定でセキュリティ上環境変数が初期化されるから。

対処方法は、下記のいずれか。

  • (1) 環境変数の初期化を無効化する
  • (2) 環境変数 PATH を引き継ぐようにする
  • (3) 初期化時のパス設定を変更する

今回、ローカルでしか使わない Vagrant マシンなので、それほどセキュリティに意識する必要はなくて、どの方法でも問題ないと思うんだけど、sudoers 設定のレールに乗っかるなら (3) かなと思い、それを選んだ。

操作

sudo visudo

下記のように編集した(/opt/puppetlabs/bin を追加した)

Defaults secure_path = /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/puppetlabs/bin:/root/bin

これで sudo puppet apply できるようになった。めでたい。