質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

解決済

1回答

958閲覧

RHEL環境で、sudoを用いた別ユーザでコマンド実行時に環境変数がうまく適用されない

bizuri

総合スコア1

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

0クリップ

投稿2023/11/02 08:47

編集2023/11/03 01:07

実現したいこと

  • rootからsudoコマンドを実行して、別の一般ユーザでHULFT起動コマンドを呼び出したい

発生している問題・エラーメッセージ

RHEL8.2の環境で、HULFTのプロセスを起動するスタートアップシェルを作成しています。
※ OS起動時の自動起動であればサービス登録等の手段があることは認識しておりますが、今回の目的はスタートアップシェルの作成とさせて下さい。

スタートアップシェルの実行者はrootですが、HULFTの導入者は一般ユーザ(testuser)のため、sudoでユーザを指定して
HULFTを起動しようとしています。

■スタートアップシェルの内容 //HULFT起動に必要な環境変数の設定 TERM=vt100 export TERM LANG=ja_JP.UTF8 export LANG HULEXEP=/省略/HULFT/bin export HULEXEP PATH=/省略/HULFT/bin:$PATH export PATH HULPATH=/省略/HULFT/etc export HULPATH //HULFT起動 sudo -u testuser hulsndd sudo -u testuser hulrcvd sudo -u testuser hulobsd

上記を実行したところ、hulsndd,hulrcvd,hulobsdが見つかりませんというメッセージが表示されます。
実際は、/省略/HULFT/bin/配下に全て格納されているため、見つかりませんというメッセージが表示されるのは想定外でした。
また、以下のコマンドを実行したところ想定通りのパスが表示されたため、環境変数の認識自体はできていると考えております。

コマンド sudo -u testuser echo $PATH 出力結果 /省略/HULFT/bin:…(省略)

上記のHULFT起動コマンドを成功させるにはどうしたら良いかご教示いただけませんでしょうか。

試したこと

rootやtestuserの.bash_profileにHULFT環境変数を定義した状態でも実施してみましたが、結果は同じでした。

2023/11/3 追記
--preserve-env,-Eのオプション設定検証結果を追記します。

sudo -u testuser --preserve-env=TERM,LANG,HULEXEP,PATH,HULPATH env | grep USER USER=testuser SUDO_USER=root →envで表示される内容がtestuserのものであることを確認 sudo -u testuser --preserve-env=TERM,LANG,HULEXEP,PATH,HULPATH env | grep HUL PATH=/省略/HULFT/bin:…省略 HULEXEP=/省略/HULFT/bin HULPATH=/省略/HULFT/etc →rootで設定したHULFT系環境変数が、一般ユーザtestuserに引き継がれていることを確認 sudo -u testuser --preserve-env=TERM,LANG,HULEXEP,PATH,HULPATH hulsndd sudo: hulsndd: コマンドが見つかりません →PATHが通っているにもかかわらず、hulsnddが見つからない(想定外) sudo -u testuser -E hulsndd sudo: hulsndd: コマンドが見つかりません →同様に想定外の結果となった ll /省略/HULFT/bin/hulsndd -rwxr-xr-x 1 tesruser testuser 3561755 9月 20 10:39 /省略/HULFT/bin/hulsndd →実行対象ファイルは確かに存在する

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2023/11/02 09:22

sudo -u testuser echo $PATH この場合、sudo コマンドを実行する以前に $PATH が展開されてしまいます。なので、以下を実行して確認してみてください。 sudo -u testuser sh -c 'echo $PATH' また、以下の様に --preserve-env オプションに PATH を指定すると、その内容を引き継いでくれます。 sudo --preserve-env=PATH -u testuser ....
bizuri

2023/11/03 01:05 編集

ありがとうございます。 sudo -u testuser sh -c 'echo $PATH' こちらを実施したところ、確かに環境変数が引き継がれておりませんでした。 また「試したこと」にpreserve-envの検証結果を追記しました。 上記の通り、環境変数自体は引き継がれており$PATHにHULFTのパスも通っているようですが、肝心のhulsnddに失敗する事象は変わりませんでした。
melian

2023/11/03 01:46

/etc/sudoers で secure_path が有効になっているのかもしれません。 Defaults secure_path="..." sudo でコマンドを実行する際に、PATH の内容を無視して secure_path に設定されているパスからコマンドを探します。なので、visudo コマンドで secure_path の行をコメントアウトしてみてください。 > sudoers(5) > > secure_path  If set, sudo will use this value in place of the user's PATH environment variable.
otn

2023/11/03 02:33

--preserve-env=PATH は、「コマンドを実行する際にこの環境変数を引き継いで」なので、コマンド自体を探す際に使われる環境変数PATHには影響しないようです。 sudo --preserve-env=PATH -u testuser sh -c hulsndd でしょうか。
otn

2023/11/03 02:53

あ、melianさんが secure_path を無効にする策を書かれてますね。ただそれだと全体に影響するので、 このコマンドだけ効けば良いなら sh -c hulsndd が良いと思います。 複数コマンドを実行するようなので、 sh -c "hulsndd && hulrcvd && hulobsd" でいいし。
winterboum

2023/11/03 03:15

環境変数に頼らず、fullpathで記述しては?
bsdfan

2023/11/03 12:24

環境変数をセットしてプログラムを実行する部分を別スクリプトにして、それを sudo で実行するのはどうでしょう。(別ファイルにしなくても、ヒアドキュメントで書いてもいいのかも)
bizuri

2023/11/03 14:08

melian様、otn様、winterboum様 今回は影響範囲を小さくしたいのと、HULFTから指定された手順から逸脱したくなかったため、otn様に記載いただいた"sudo --preserve-env=PATH -u testuser sh -c hulsndd"で検証し、無事に一般ユーザでHULFTの起動に成功しました。 だいぶ手詰まりの状態が続いていたので本当に助かりました。 皆様ご回答いただきありがとうございました。
guest

回答1

0

自己解決

コメントにて解決方法をご教示いただきました。
掲題のコマンド形式だと環境変数を渡せずに一般ユーザでHULFT起動コマンドを実行しているため、
--preserve-envで引数を引き渡し、コマンド実行方法を"sh -c hulsndd"とすることで、無事一般ユーザでHULFTを起動することに成功しました。

"sudo --preserve-env=PATH -u testuser sh -c hulsndd"

投稿2023/11/03 14:10

bizuri

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問