スクリプトによってsshに使用されるパスワードを保存する安全な方法はありますか?


16

したがって、まず、SSHでキー認証を使用する必要があります。それを説明する必要はありません。

ここでの問題は、サーバーの(大きな)束があり、これらの各サーバーを接続できるスクリプトが必要だということです。

できる限りキー認証を使用しますが、すべてのサーバーでキー認証を使用できるわけではありません(これを制御することはできません)。そのため、ログインまたは場合によってはtelnetを使用したSSH。

そのため、一部の人はパスワードをdbに保存しただけで、必要に応じてスクリプトが使用します。問題は、そのようにするのは本当に安全に見えないということです。少し安全にする方法はありますか?

それを保存する特定の方法が好きですか?


1
環境変数。SOからの複製:stackoverflow.com/a/4410137/2579527
Travis Stoll

4
@TravisStoll環境変数は安全ではありません。
ジェニーD

dbにパスワードを保存する設定では、取得するのとほぼ同じくらい安全であると思います。keepassファイルのような暗号化されたdbにすることができます(keepass dbsにアクセスするための少なくともperlモジュールがあると思います)が、それでも入力したくない場合は、データベースにパスワードを保存する必要がありますスクリプトを呼び出すたびに。スクリプトを呼び出すたびにマスターパスワードを入力するだけで、少し良いIFFになります。
アイザック

1
パスワードの代わりにSSH認証キーを使用しても、それはセキュリティの保証ではありません。パスワードデータベースを盗むことができる人は誰でも、秘密鍵を盗むことができます。パスワードデータベースを暗号化できるのと同じように秘密キーを暗号化できますが、スクリプトはキー(またはパスワードデータベース)のロックを解除する必要があるため、依然として攻撃者に対して脆弱です。キーの代わりにパスワードを使用すると、パスワードを盗むより多くの道が開かれるため、脆弱性が少し増えますが、パスワードの代わりにキーを使用しても完全なセキュリティではありません。
ジョニー

1
「telnetの場合」は、パスワードがネットワークを介して平文で転送されることさえあることを暗示しているようです... ...
ハーゲンフォンアイゼン

回答:


24

スクリプトがこれらのサーバーのいずれかに接続できる場合、スクリプトへのアクセス権(またはスクリプトが実行されるマシンへの特権アクセス権)を持つユーザーは、それらのサーバーのいずれかに接続できます。

スクリプトを自律的に実行する必要がある場合、すべてのベットはオフになります。ここでの答えは「いいえ」ですそのような環境でパスワードを保存する絶対に安全な方法はありません。絶対に安全実用的な方法はありません。

やむを得ないことを避けようとする代わりに、多層防御に焦点を当てるべきです。

もちろん、パスワードを適切に保護する必要があります。これは通常、それらをスクリプトとは別のファイルに保存し、制限的なファイルシステム権限を設定することを意味します。これは、セキュリティの観点から、この前でできることのすべてです。

他の方法は、プロセスに不明瞭さを追加する可能性が最も高いです。パスワードを暗号化すると、攻撃者は復号化キーを検索する必要があります。ある種のオペレーティングシステムで保護されたストレージを使用すると、他のユーザーがキーにアクセスするのを防ぐことができます(したがって、攻撃や使用が複雑である以外は、ファイルシステムのアクセス許可よりも有利です)。これらの手段は攻撃を遅らせますが、ほとんどの場合、決意のある攻撃者に対する攻撃を防ぐことはできません。


それでは、しばらくの間、パスワードをパブリックとして扱いましょう。被害を軽減するために何ができますか?

古いテスト済みのソリューションは、これらの資格情報ができることを制限することです。UNIXシステムでは、これを行うための良い方法は、スクリプト用に別のユーザーセットアップし、アクセスするサーバーとアクセスするサーバーの両方でそのユーザーの機能を制限することですSSHレベルシェルレベル、またはSELinuxなどの必須アクセス制御メカニズムを使用して、ユーザー機能制限できます。

また、スクリプトロジックをサーバー移動することも検討してください。そうすることで、制御しやすく、特に以下のような小さなインターフェースが得られます。

モニター。サーバーへのアクセスを常に監視します。できれば、ログ認証および追加されたログのみに対して実行されるコマンド。auditdたとえば、を使用してスクリプトファイルの変更を監視することを忘れないでください。


もちろん、これらのメカニズムの多くは、あなたが質問を暗示しているように見えるため、サーバーを制御できない場合には役に立ちません。その場合は、サーバー管理している人と連絡取り、スクリプトと潜在的なセキュリティの落とし穴について知らせることをお勧めします。


14

簡単な答えは:いいえ。

長い答えは:いいえ、完全に安全な方法はありません。(これには、サーバー上の他のユーザーがアクセスできる環境変数が含まれます。)取得できる最も近いものは、キーパス、GPG暗号化ファイル、またはこれらの行に沿った何か他の暗号化形式で保存することです。ただし、ある時点でパスワードを解読してスクリプトで使用できるようにする必要があり、その時点で脆弱になります。

つまり、スクリプトを実行するサーバー、ネットワーク、およびターゲットサーバーの両方で、綿密なセキュリティを徹底的に検討する必要があります。


1
これが決定的なNOかどうかはわかりません。彼のセッションは安全です。適切なアクセス許可が設定されているため、ファイルシステムは安全です。だから、もし彼がファイルシステム(保存されたパスワード)からものを取得し、それらをstdinを通してsshコマンドにパイプすることができたら、彼は大丈夫だろう?上記の別のコメントで私が与えたリンクをご覧ください。どう思いますか?
pgr

彼が標準入力を介してそれらをパイプする場合、脆弱性があります。あなたの提案ではより安全になりますが、完全に安全ではありません。特に、セッションの一部がtelnet経由であることを考えると。
ジェニーD

0

2番目のパスワードでdbのパスワードを暗号化し、このパスワードを別の(3番目の)マシンに保存し、dbからパスワードを取得する必要があるスクリプトが最初にこの3番目のマシンに接続して復号化パスワードを取得するシステムを配置できます、3番目のマシンから取得したパスワードを使用してdbのパスワードを復号化し、機能します。

もちろん、これによりセキュリティが強化されるわけではありません。十分な権限を持つ攻撃者は、3番目のマシンにパスワードを要求することもできます。

しかし、ポイントは、サードパーティがサードパーティのマシンを制御できるということです。たとえば、上司やセキュリティ担当者、またはあなたが制御しないサーバーを制御するサードパーティです。

このようにして、問題が発生した場合、仕事を辞めて、あなたに取って代わる人を信頼していない場合、またはスクリプトにマシンへのアクセスを停止させたい場合、3日目にプラグを抜くことができますマシン、およびスクリプトはパスワードにアクセスできなくなります。

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