18 views
【1】やりたいこと
シェルスクリプトの中で、他ユーザーに切り替えた後、そのユーザーとしてプログラムを実行したい。
【2】やってみる
これ以降は、以下の前提条件で書く。
・切替前ユーザー: taro
・切替後ユーザー: noko
・sudo でパスワードを指定せずに taro から noko に切り替えて実行する。
(1) sudoでパスワードなしでユーザー切替できるように設定する。
sudo visudo
以下を追記する。
「taroさんは sudo実行で パスワードなしで nokoさんに切り替えられる」ための設定だ。
taro ALL=(noko) NOPASSWD: ALL
(2) 実際にユーザーを切り替えてプログラムを実行する。
sudo -E -H -u noko /path/to/nokos_script.sh
-E オプションは、元のユーザーの環境変数を保持してコマンドを実行するためのもの。
通常、sudo で実行すると環境変数がクリアされてしまうが、このオプションを使うことで元のユーザーが設定した環境変数がそのまま引き継がれる。もし必要ならば使う。
-H オプションは、noko ユーザーのホームディレクトリを指定するためのもの。
このオプションがないと nokos_script.sh 実行時のホームディレクトリは元のユーザーのものになる。-H オプションにより noko のホームディレクトリが使用される。
もし、環境変数の違いなどでプログラムが正常に動作しない場合、両ユーザーの env を比較してみる。
env
例えば、比較した結果 XDG_RUNTIME_DIR に差があったとしたら、実行されるスクリプトにこれを追記する。
nokos_script.sh
export XDG_RUNTIME_DIR=/run/user/1000 /opt/AAAAA/myenv/bin/python my_program.py