sudoコマンドは/root/.bashrcをソースしません


27

PATH/root/.bashrcファイルの変数にカスタムパスを追加しました

するとsudo su; echo $PATH、エントリ「/ path / to / custom / bins」が表示されます。

しかし、私はsudo sh -c 'echo $PATH'それを示しています、 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

.bashrcファイルに追加されたフォルダーパスは表示されません。

sudoコマンドには、rootユーザーと同じ環境がありませんか?

sudo  bashrc 

回答:


32

.bashrcインタラクティブに実行された場合のみ、bashの構成ファイルです。sh(bashがnameを介して呼び出された場合でも)などの他のプログラムを実行したときではなく、bashを起動したときにのみロードされますsh。また、bashがインタラクティブな場合にのみロードされ、スクリプトまたはコマンドを使用してを実行する場合にはロードされません-c

sudo sh -c 'echo $PATH'またはsudo bash -c 'echo $PATH'対話型シェルを起動しないため、.bashrc関与しません。

sudo su; echo $PATHルートのシェルの対話型インスタンスを実行します。それ~root/.bashrcがbashの場合、ロードされます。このスニペットはecho $PATH、この対話型シェルが終了すると実行されるため、対話型シェルで発生することは、スニペットが最後に出力する内容に影響しません。ただし、echo $PATHによって起動された対話型シェルのプロンプトで入力すると、によってsudo su設定された値が表示され~root/.bashrcます。

以来.bashrc、各対話型シェルでは、ありません(bashで設計の欠陥ではないとしても、対話型ログインシェルによって、)ログインシェルによって呼び出され、それは環境変数を定義するために、間違った場所です。つかいます.bashrcキーバインディング、エイリアス、補完設定などのインタラクティブなbash設定にします。ログイン時にロードされるファイルに環境変数を設定します:~/.pam_environmentまたは~/.profile

そのためPATH、の.profile代わりにを設定し.bashrc、でログインシェルを実行するかsudo -i 'echo $PATH'、で明示的にソース.profileを実行しますsudo sh -c '. ~/.profile; echo $PATH'


1
シェル....ありがとう....についての多くの関連ポイントを対処しています

1
に追加するにはどうすればよい.profileですか?あなたが意味するか/root/.profileまたは/home/user/.profileexport PATH=$PATH:/mydir両方に追加してみました。うまくいきませんでした。なしexportで試してみましたが、うまくいきませんでした。
falsePockets

@falsePockets何のために機能しませんでしたか?新しい質問をして、何をしているかを正確に説明する必要があります。
ジル「SO-悪であるのをやめる」

うまくいかなかったことは、OPがやろうとしていることとまったく同じです。スーパーユーザーのPATHにディレクトリを追加しようとしています。その質問はこの質問の複製になるので、新しい質問をするべきではありません。
falsePockets

@falsePocketsしかし、明らかに、スーパーユーザーアカウントに到達するために同じことをしているわけではありません。そして、あなたはあなたが何をしているのかを言わなかったので、私はすでに私の答えにあることを繰り返す以外あなたを助けることはできません。
ジル「SO-悪であるのをやめなさい」

14

-E-iオプションを見てください。

-E:ユーザーが既存の環境変数を保持することをセキュリティポリシーに示します。ユーザーに環境を保持する権限がない場合、セキュリティポリシーはエラーを返す場合があります。

-i:ターゲットユーザーのパスワードデータベースエントリで指定されたシェルをログインシェルとして実行します。これは、.profileや.loginなどのログイン固有のリソースファイルがシェルによって読み取られることを意味します。コマンドが指定されている場合、シェルの-cオプションを介して実行するためにコマンドがシェルに渡されます。コマンドが指定されていない場合、対話型シェルが実行されます。sudoは、シェルを実行する前にそのユーザーのホームディレクトリに変更しようとします。コマンドは、ユーザーがログイン時に受け取る環境と同様の環境で実行されます。sudoers(5)マニュアルのコマンド環境セクションには、-iオプションがsudoersポリシーの実行時にコマンドが実行される環境にどのように影響するかが記載されています使用中で。


3

あなたは、マニュアルページ/ドキュメントに記載されているようにスタートアップファイルをsudo bash読み取ります。ただし、環境変数が正しく設定されない可能性があることに注意してください。これはシステム全体のスタートアップファイルで修正できます(正確な場所はディストリビューションによって異なります)- が0 かどうかをテストします。bashbashHOMEbash/etc$uid

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.