すべてのボックスで、キーを介してsshアクセスできます。すべてのキーはパスワードで保護されています。この時点で、sudoモードはパスワードなしではありません。 VMの数はセットアップで増加しているため、 Ansible の使用を調査します。
Ansible自体は docs で述べています:
パスワードなしのSudoを使用すると、物事を自動化しやすくなりますが、必須ではありません。
これにより、パスワードなしのSudoについて考えるようになり、ここでいくつかの質問/回答を見つけました。しかし、パスワードなしのSudo自体のセキュリティ上の懸念については、本当に何も見つけることができませんでした。
これは、将来ユーザーBobがマシンXでYとは異なるパスワードを持っている場合に発生する可能性があります。Bobがsudoerである場合、これにより、Ansibleですべてのボックスに1つのSudoパスワードを入力する際に問題が発生します。 sshがキーを介して行われるという事実を考えると、キーはパスワードで保護されており、すべてのユーザーアカウントにパスワードがあります(そのため、su bob
はパスワードなしでは不可能です):SudoファイルにNOPASSWD
が設定されている場合、セキュリティはどのように影響を受けますか?
NOPASSWD
はセキュリティに大きな影響を与えません。最も明白な効果は、ユーザーがワークステーションから離れたときに保護を提供することです。ワークステーションに物理的にアクセスできる攻撃者は、ユーザーの権限でデータを抽出し、アクションを実行してマルウェアを仕掛けることはできますが、ルートへのアクセスを昇格することはできません。攻撃者がユーザーのパスワードを次回Sudoプロンプトまたはスクリーンセーバーに入力したときに、そのパスワードを記録するキーロガータイプのプログラムを作成できるため、この保護の用途は限られています。
それにもかかわらず、パスワードを要求することは、攻撃者の基準を引き上げます。多くの場合、特に攻撃が機会の1つであり、攻撃者が目立たないうちに目立たないマルウェアを見つけて設定する方法を知らない可能性がある無人ワークステーションのシナリオでは、洗練されていない攻撃者に対する保護が役立ちます。さらに、ルート権限がないとマルウェアを非表示にするのが難しくなります。ルートがないと、ルートからマルウェアを非表示にすることはできません。
パスワードの欠如が高度な攻撃者からさえ保護するいくつかの現実的なシナリオがあります。たとえば、盗まれたラップトップ:ユーザーのラップトップが盗まれ、秘密のSSHキーが付いています。泥棒は、キーファイルのパスワードを(おそらくブルートフォースで)推測するか、キーエージェントのメモリダンプからアクセスできます。盗難が検出された場合、これはそのユーザーのアカウントでの最近のアクティビティを調査するための信号であり、これは、埋め込まれたマルウェアを検出する必要があることを意味します。攻撃者がユーザーレベルのアクセスしか持っていない場合、攻撃者が行った操作はすべてログに痕跡を残します。攻撃者がユーザーのパスワードを取得してSudoを実行した場合、すべてのログが侵害されます。
NOPASSWD
のマイナス面がユースケースのプラス面とバランスが取れているかどうかはわかりません。あなたはあなたの状況の他のすべての要因に対してそれをバランスさせる必要があります。たとえば、異なるパスワードの使用を許可しているが、強制していないようです。代わりに、集中アカウントデータベースを使用できますか?システム間にどれだけの封じ込めが必要ですか?異なるSudoパスワードをサポートするAnsibleの代替を検討していますか?他の認証メカニズムを検討しましたか?
パスワードなしのSudoを望まない2つの特定のケースがあります。
自動化について:
パスワードなしでこれを実行できることに同意しますが、Sudoパスワードを必要としないことで、実際には自動化ツールへのすべてのアクセスを許可します。ツールが実際に何をする必要があるか考えてみてください。これらすべてのアクセスが本当に必要ですか?おそらく違います。
Sudoには、sudoersファイル内のNOPASSWD
フラグを使用して特定のコマンドを構成できる、Nice機能が付属しています。
username myhost = (root) NOPASSWD: /sbin/shutdown
username myhost = (root) NOPASSWD: /sbin/reboot
何らかの理由で誰かが指摘していないように見えることの1つ(間違っている場合は修正してください)は、実行しているすべてのプログラムが、知らないうちにrootアクセスに昇格できるようになることです。通常、Sudoを使用せずに悪意のあるプログラムまたはスクリプトを非rootユーザーとして誤って実行した場合でも、Sudoが大きなダメージを与える可能性はありますが、それでも(別のエクスプロイトがなければ)root権限はありません。したがって、少なくともルートキットなどについて心配する必要はありません。しかし、NOPASSWDモードでは、そのような保護はありません。ユーザーの下で実行されるプログラムはすべて、Sudoを使用して自分自身を再度呼び出すことにより、rootにエスカレートできます。マルウェアはまだこれを行うように特別にプログラムする必要があり、それ以外の場合はルートアクセスがありませんが、それを行う悪意のあるコードはどうでしょうか?
Sshがキーを介して行われるという事実を考えると、キーはパスワードで保護されており、すべてのユーザーアカウントにパスワードがあります(したがって、パスワードがないとsu bobは不可能です)。
ここで明確にしましょう。 SSHキーとユーザーアカウントのパスワードを保護するために使用されるパスワード同じではありません。
NOPASSWD
は、ユーザーがパスワードを入力しなくても、別のユーザーとしてコマンドを実行できるようにするだけです。ユーザーがシステムにSSH接続するときにパスワードを入力する必要があるという事実には影響しません。
Ansibleは、Sudoパスワードを使用したSudoやNOPASSWDなど、さまざまな自動化を使用できます。または、su、suexec、doasなどを使用します。
今日、私たちは次のことを話します:
become: yes
become_user:root
become_method: Sudo
理想的には、ansibleはインタラクティブな使用ではなく、オートメーション(コードとして)に使用する必要があることを覚えておいてください。人間のユーザーは引き続きパスワードを使用できますが、偶然に有効期限ポリシーに遭遇する可能性があります。
Ansible TowerとAWXは、暗号化されたあらゆる種類の認証情報を保存し、キーやパスワードを漏らすことなく、特定のジョブにその使用を委任できます。
別の方法としては、一時的な(署名された)sshキーを使用します。 Hashicorp Vaultはそれらを管理できます
ユーザーにSudoにアクセスするためのパスワードを入力させることには、長所と短所があります。
長所:誰かが管理者アカウントへのアクセスを取得した場合の保護が強化されます。たとえば、ロックが解除された端末、または何らかのエクスプロイトを介して。
短所:ユーザーは送信中に暗号化された平文のパスワードを入力していますが、ユーザーのシェルに到達する前に復号化されます。たとえば、誰かがbashrcスクリプトを改ざんしてキーロガーを実行する可能性があります。設定、およびこのマシンのユーザーアカウントに直接ログインするためのパスワードの使用を許可する可能性のあるユーザーの習慣、およびおそらく他のマシンにも依存します。人々は頻繁にパスワードを再利用します。