TL;DR
sudo -i -u <実行するユーザ> <実行するコマンド>
(例:sudo -i -u hoge /path/to/tool.sh
)でコマンド実行する場合、sudoersのコマンド部分は<実行するユーザのログインシェル> -c <実行するコマンド>
(例:/bin/bash -c /path/to/tool.sh
)の形式で指定する必要があるよ、という話。
sudo -i について
sudo -i
は、指定したユーザのログインシェルを評価してから、コマンドを実行するオプションで、簡単に言うと指定したユーザでログインしてコマンドを実行するため、環境変数やカレントディレクトリ等もそのユーザのログインした時の状態でコマンドが実行される。
通常、sudoersにはユーザに実行を許可するコマンドを指定するが、sudo -i
で実行する場合はログインシェルでコマンド実行する形で指定する必要がある。
例えば、userA が userB で /path/to/tool.sh
をパスワードなしで実行できるようにする場合、以下のように設定する。
コマンド実行
[userA ]$ sudo -i -u userB /path/to/tool.sh
/etc/sudoersの設定例
- userA ALL=(userB) NOPASSWD: /path/to/tool.sh
+ userA ALL=(userB) NOPASSWD: /bin/bash -c /path/to/tool.sh