`sudo`したとき、`secure_path`が設定されていてもユーザ固有の`$PATH`を引き継ぐ方法として、  
`/etc/sudoers`に

```

    Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    Defaults exempt_groups=developers
    
```

のように記述する方法が一般的なようです。  
しかしこれだとユーザ固有の`$PATH`がそっくりそのまま新しい`$PATH`となってしまいます。  
ユーザ固有の`$PATH`と`secure_path`との和集合をsudo時の`$PATH`にしたいのですが、そういうことはできるでしょうか？
CC BY-SA 3.0
2015-11-15T22:41:05.340
18862
2018-10-10T01:54:42.410
2018-10-10T01:54:42.410
3060
10685
question
linux sudo
sudoで$PATHを引き継ぎつつsbinなどをPATHに加えるには？
`-i [command]` オプションで .profile や .login を読み込むといいと思います。

次の例では `hoge`ユーザの`.bash_profile` で `~/bin` を追加してます。

user `hoge`:

```

    $ cat ~/.bash_profile
    #.bash_profile
    export PATH=$PATH:$HOME/bin
    
    $ cat <<eof > /home/hoge/test.sh
    #!/bin/bash
    echo PATH=$PATH
    eof
    
    $ chmod +x /home/hoge/test.sh
    
```

user `foo`:

```

    $ sudo -u hoge /home/hoge/test.sh
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    
    $ sudo -i -u hoge /home/hoge/test.sh
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/home/hoge/bin
    
```

ただし、HOME SHELL USER LOGNAME などの環境変数も書き換わりますので ご注意ください。  
詳しくは `man sudo`
CC BY-SA 3.0
2015-11-16T05:35:38.617
18874
2015-11-16T05:35:38.617
5008
18862
answer