Solaris 5.10でSudo 1.7.4p 4を、RHEL 4 u6でSudo 1.6.7p 5を使用する私の環境変数を保存する方法がわかりません、例えば$ PYTHONPATH。この行をsudoersに追加しましたが、違いはありません。
Defaults !env_reset
私は何か悪いことをしていますか、それともSudoのインストールは単にenv_resetフラグを尊重していませんか?
編集:少なくともSolaris上で、我々はこの問題がシェルに依存していることを発見しました!標準ルートシェルはBourneです。一方、Sudo(Sudo bash
)の下でbashを実行すると、!env_presetは環境(PATHとLD_LIBRARY_PATHを含む)を保持します。これは私が言わなければならないやや複雑な行動です。
慎重に使用すると、Sudoと変数にはセキュリティ上の問題があります。
man sudoers
から私はあなたが使用するべきであることがわかりました
デフォルトenv_reset デフォルトenv_keep + = "PYTHONPATH OTHERVARIABLE YETANOTHER"
Ubuntuでは、Sudo
はいくつかの変数を保存します。 Sudo -i
は、rootとしてログインしてからコマンドを実行するのに似ています。どちらも不便かもしれません、Sudo nano myfile
の前者はあなたの家の中にroot所有のファイルを残し、Sudo -i nano myfile
のための後者は/ root/myfileを開こうとします。
実行する
Sudo printenv PATH
そしてそれが与えるものを見てください。ここで
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
例えば。 Sudo visudo
を実行して行を追加してください。
Defaults secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
直前に見つけたものに置き換えます。必要に応じて新しいパスを追加してください。
図書館について:
Sudo LD_LIBRARY_PATH=/usr/lib/path/to/a/safe/library your command
LinuxディストリビューションはPATH
には細心の注意を払っていますので、実際にプレーする前に注意してください。 ".
"や/home/username
のようなパスを追加することには特に注意してください。安全ではありません。
パスを追加する危険性の1つは、これらのパス上のファイルがroot
によって実行される可能性があるために開かれ、悪意のあるソフトウェアによって悪用される可能性があるシステムセキュリティ内のウィンドウを開くことです。他の危険性があるかもしれません。自分が何をしているのか知っていることを確認してください。 Sudo
セキュリティ対策を迂回すると、SolarisをWindows XPと同じくらい安全にすることができます。
他の人が言っているように、sudoers
をいじるのは慎重に行われるべきです。
保存したい特定の環境変数がある場合のより簡単な場合のためのより簡単なアプローチはSudoを通して直接欲しい環境変数を渡すことです(これはSudo cmdlineヘルプで[VAR=value]
として示されています)。
この小さな例を参照してください。ここで、複数の変数についても説明しました。
$ export MY_V1=1
$ export MY_V2=2
$ printenv | grep MY_V
MY_V2=2
MY_V1=1
$ Sudo MY_V1=$MY_V1 MY_V2=$MY_V2 printenv | grep MY_V
MY_V2=2
MY_V1=1
質問の元のPYTHONPATH
の例については、以下を使用してください。
$ Sudo PYTHONPATH=$PYTHONPATH python some_script.py
<script_output_here>
この種のもののエイリアスを作成すると便利です。そのようです:
$ alias sudopy='Sudo PYTHONPATH=$PYTHONPATH'
Defaults !env_reset
オプションを指定してSudoを呼び出していないと仮定すると、-E
は問題ないようです。
そのエントリを完全に削除してみてください。
正しいsudoersファイルを編集していることを確認しましたか?インストール方法に応じて、/etc/sudoers
または/usr/local/etc/sudoers
になる可能性があります。 visudo
を使って編集しましたか?
あなたはどのようにsudoを動かしていますか? Sudo python
、Sudo su
、Sudo su -
、Sudo -s
、他に何か?環境を保護するのはSudo python
とSudo su
だけです。
env | grep PYTHONPATH
は何と言っていますか?何もない場合は、export PYTHONPATH
を実行してPYTHONPATHがエクスポートされていることを確認してから、やり直してください。
Sudo env | grep PYTHONPATH
は何と言っていますか?期待値が表示された場合は、PYTHONPATH値が他のものによって上書きされています。 rootの.bashrcや.bash_profile、あるいはシステム全体の設定ファイルかもしれません。