2017-03-09 3 views
0

私がbashでコマンドを実行している場合、別のユーザーはさまざまな方法で引数を見ることができます。だからSomeCommand $PASSWORDは悪い考えです。私はSomeCommandが、今では、Pythonでos.environ["PASSWORD"]と言うの内部で環境変数を読み込み他のユーザが `SECRET =" ... "`を見ることは可能ですか?

env PASSWORD="SECRET" SomeCommand PASSWORD 

をすれば同じことが当てはまると仮定します。 Passwordは現在のところ短時間で利用可能ですが、SomeCommandを実行するコマンドラインはenvです(環境内でPASSWORDを使用するので、/procを見ている人はenv PASSWORD="SECRET" SomeCommand PASSWORDと表示されます)。/proc/PID/environは通常ルートでのみ読み取り可能であり、通常envは短くこれはより安全ですが、引き続きその議論が漏れています)。

ただし、私がexportを使用する場合も同様です。 exportはbashビルトインです(つまり、エクスポートされたものはリークしません(例:proc)。

+1

コンソールにその名前を入力すると、他のユーザーが潜在的にアクセスできる '.bash_history'ファイルに入力されます。 – paddy

+0

はい...私は考慮しています。ホームディレクトリはプライベートディレクトリです。 – divbyzero

+1

'ps'はそれを表示しません。しかし、rootユーザには '/ proc/PID/environ'に表示されます。 – codeforester

答えて

2

SomeCommandます$ PASSWORDはい

悪い考えです。パスワードは、SomeCommandの持続時間の間、ps(1)と/ procで検査されたコマンドラインに表示されます。

のenv PASSWORD = "秘密" SomeCommand PASSWORD

秘密はenvの期間及び/ PROC psに表示されます。それはSomeCommmandの間、(個人的な)環境に常駐します。この解決策はわずかに(または遠く)改善されています。

エクスポートを使用する場合も同じことが適用されます。 export PASSWORD = "SECRET"; SomeCommand PASSWORDエクスポートはbashビルトインなので、

exportがbashビルトインであるということはあまり意味がありません。この解決策はさらに悪化する。なぜなら今やPASSWORD=secretはSomeCommand(SomeCommandのenviron変数)の期間、/ procに表示され、自分の環境ではという永遠に!後でそれを解除しない限り。次に、envを使用するのと同じ状況になります。

あなたが所有しているファイルにパスワードを保存し、他の人が読むことができない場合があります。SomeCommandはそのファイルからパスワードを取得する必要があります。あるいは、より良いことに、パスワードを一意にするためのいくつかの仕組みを実装します。たとえば、現在の日付/時刻に応じて何かで秘密をスクランブルし、SomeCommandがその秘密を解読するようにします。たとえ誰か(root?)がスクランブルされた秘密を読み込んだとしても、すぐにセキュリティを破ることはできません。コメント後

UPDATE:誰もがroot [悪魔という名前]には何も隠すことはできないことを考えると、問題が他の一般ユーザー対プライバシーに集中することです。ファイル/ proc/PID/environmentは読めないので、環境は安全であると見なすことができます。これを考えると、解答は

export PASSWORD = secret;それは、その後のps(1)で表示されますSomeCommand PASSWORDを起動し、安全自身の環境で秘密を書きますが、実際の秘密は含まれませんので、SomeCommand PASSWORD

は最高です。

他の溶液、

のenv PASSWORD =秘密SomeCommandパスワード

短い短時間、秘密がPS(1)で表示されるようになり、かなり類似しているが。その短い時間の後、envexportウェイは同等です。 exportを使用すると、現在の環境にはPASSWORD=secretが残っていますが、envには反映されません。ただし、環境は安全であるとみなされます.bash履歴ファイル(最後のコマンドが実行されたファイル)は安全です。

投稿日時以降のコメント:右 - エクスポートを使用する必要はありません。簡単なPASSWORD=secret SomeCommand PASSWORDは、psからは見えないという利点があり、現在の環境に秘密を格納しません。だからシンプルな... 3頭の脳が2頭よりも優れているというデモンストレーション!

最後の注意:ルートユーザーがSomeCommandのソースにアクセスできる場合、上記のように、秘密をスクランブルすることはrootによって敗れることがあります。ソースが到達不能であれば、ルートはSomeCommandをまだ逆アセンブルすることができます。必要に応じて、rootはシステムのすべてのメモリを見ることができます。言い換えれば、ルートユーザーは信頼されなければなりません...

+0

+1。ばかげた質問: 'env'は外部コマンドです(Bashビルトインではありません)。だから 'env PASSWORD =" SECRET "SomeCommand PASSWORD'はps(1)が調べたコマンドラインでパスワードを表示しませんか?なぜなら、 'env'はそれ自身のプロセスを実行するコマンドに置き換えるからですか? – ruakh

+0

@codeforesterコメント '/ proc/PID/environ'はrootにのみ読み込まれます(ルートから隠そうとするポイントがあるかどうかはわかりません)。輸出後に 'セットされていない 'ことは問題ありません。もし 'export'が'/proc'に存在しない場合、 'export'の解決策は' $ PASSWORD'を 'env'のようにあきらめることができないので最善の策だと思います。だから私は '輸出'がどのように行動するのか考えている。 '/ proc'は重要です。 – divbyzero

+0

@ruakh 'env'は通常とても短命ですが、表示されます。私は質問にそれを指摘する、対dbに接続すると言う。これが私が「輸出」の解決策を探している理由です。 – divbyzero

関連する問題