(160) スクリプト内で他ユーザーになってプログラムを実行する。

投稿者: | 2024年10月26日

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です