クラウドサーバーにパスワードなしの「sudo」を設定しても大丈夫ですか?


58

キーを介してサーバーにアクセスするというアイデアが大好きです。そのためssh、ボックスに毎回パスワードを入力する必要がなく、ユーザーの(ロックではなくroot)パスワードをロックすることもpasswd -l usernameできるため、キーなしでログインすることはできません。

しかし、sudoコマンドのパスワードを入力する必要がある場合、これらはすべて壊れます。そのため、パスワードなしでログインできるように、パスワードなしでsudoセットアップしたいと思っています。

しかし、予期せぬ方法で私に逆火を起こすかもしれないという直感を持ち続けています。そのような設定に注意点はありますか?サーバー上のユーザーアカウントに対してこれを行うことを推奨/推奨しませんか?

明確化

  1. sudoここでは、サービスや管理スクリプトではなく、対話型ユーザーセッションでの使用について説明しています。
  2. クラウドサーバーの使用について話している(したがって、マシンへの物理的なローカルアクセス権がなく、リモートでしかログインできない)
  3. sudoパスワードの再入力が不要なタイムアウトが設定されていることは知っています。しかし、私のコンサートは、実際にパスワードを物理的に入力するための余分な時間を無駄にすることではありません。しかし、私の考えは、パスワードをまったく処理する必要がないことでした。
    • 暗記しなければならない場合、短すぎて安全にしたり再利用したりできない
    • リモートアカウント用に長くて一意のパスワードを生成する場合、それをどこかに保存し(ローカルパスワードマネージャープログラムまたはクラウドサービス)、使用するたびに取得する必要がありますsudo。私はそれを避けたいと思いました。

そのため、この質問で、ある構成のリスク、注意事項、トレードオフを他の構成よりもよく理解したかったのです。

フォローアップ1

すべての回答ではsudo、個人ユーザーアカウントが侵害された場合、「簡単な」特権の昇格が可能になるため、パスワードレスは安全ではないと述べています。という事は承知しています。しかし、一方で、パスワードを使用すると、パスワードにすべての古典的なリスクが生じます(短すぎるまたは共通の文字列、異なるサービス間で繰り返されるなど)。しかし、パスワード認証を無効に/etc/ssh/sshd_configしてログイン用のキーが必要な場合は、入力しsudoやすいように単純なパスワードを使用できますか?それは有効な戦略ですか?

フォローアップ2

rootssh経由でログインするキーもある場合、誰かがコンピューターにアクセスしてキーを盗むと(OSのキーリングパスワードで保護されます!)、rootアカウントに直接アクセスできる可能性があります、sudoパスをバイパスします。その場合、rootアカウントにアクセスするためのポリシーは何ですか?


2
シェルをユーザーとして取得する方法が多いため(すべてのサービスはセキュリティ侵害の対象になりますが、通常はシステムへのフルアクセスを回避するためにユーザーとして実行されるため)、ログインにはパスワードが必要なので、まったくお勧めしませんrootは、権限のない人がrootアクセスを取得するのを防ぎます。存在しない場合、何らかの方法でユーザーアカウントにアクセスできるユーザーはだれでもサーバーに完全にアクセスできると考えます。パスワードの設定はそれほど多くないかもしれませんが、役立ちます。
piernov 14年

私のフォローアップの質問
ドミトリーパシュケビッチ14年

1
sudoにはパスワードを使用しないでください。rootはSSH経由のリモートログインから無効にする必要があり、sshポートはデフォルトではなく(ダムボットを捨てる)、sudoを必要とするアカウントは必要な最低限のsudo権限のみに制限する必要があります(サービスを再起動します)のみなど)、また非常に強力なパスワードを持っています。
SnakeDoc 14年

@SnakeDocありがとう、それは私が期待していたような返信です。詳細な回答を書いてくれませんか?学ぶことができてうれしいです!
ドミトリーパシュケビッチ14年

2
@EEAAは、Linuxでは実際に非常に簡単です。sudoでパスワードなしにすることを許可する必要があるアカウントは、ログインできないシステムアカウントだけです。したがって、そのアカウントに昇格して、これらのアクセス許可を使用することはできません。/etc/passwdnologinなどでアカウントの偽のシェルを設定し、パスワードを設定せずに、visudoでパスワードなしを設定します。これを行う場合、visudoの設定は、そのシステムアカウントが絶対に必要とするもののみを対象とする必要があります。つまり、実行すべきコマンドのみにロックダウンします。
SnakeDoc 14年

回答:


48

キーを介してサーバーにアクセスするというアイデアが大好きなので、ボックスにsshするたびにパスワードを入力する必要がなく、ユーザーの(rootではない)パスワード(passwd -l username)もロックするため、キーなしでログインします...サーバー上のユーザーアカウントに対してこれを行うことを推奨/推奨しませんか?

パスワードベースのログインを間違った方法で無効にしようとしています。ユーザーのアカウントをロックする代わりに、に設定PasswordAuthentication noします/etc/ssh/sshd_config

この設定では、sshのパスワード認証は無効になりますが、sudoにはパスワードを使用できます。

唯一私が設定することはお勧めの時間NOPASSWDはsudoには、プロセスは、プログラムにsudo経由でコマンドを実行できるようにする必要があり、サービスアカウントのためのものです。そのような状況では、アカウントが実行する必要がある特定のコマンドのみを明示的にホワイトリストに登録するようにしてください。インタラクティブアカウントの場合は、常にパスワードを有効にしおく必要があります。

フォローアップの質問への回答:

しかし、/ etc / ssh / sshd_configでパスワード認証を無効にして、ログインするためのキーが必要な場合は、入力が簡単なsudoだけに単純なパスワードを使用できると思いますか?それは有効な戦略ですか?

それは正解です。比較的強力なローカルアカウントパスワードを使用することを引き続きお勧めしますが、とんでもないほど強力ではありません。ランダムに生成された8文字までで十分です。

ssh経由でrootとしてログインするキーもある場合、誰かが私のコンピューターにアクセスしてキーを盗むと(OSのキーリングパスワードによってまだ保護されています!)、彼らは同様に直接アクセスするかもしれませんsudoパスをバイパスするルートアカウント。

sshを介したルートアクセスを無効にする必要があります。期間。に設定PermitRootLogin noしますsshd_config

その場合、ルートアカウントにアクセスするためのポリシーは何ですか?

サーバーのコンソールへの帯域外アクセスを取得する手段が常に必要です。いくつかのVPSベンダーがこれを提供し、専用ハードウェアのベンダーも同様です。プロバイダーが実際のコンソールアクセス(たとえばEC2など)を許可しない場合でも、通常、この回答で説明したようなプロセスを使用してアクセスを復元できます


2
+1は、必要があります ...パスワードを残す
クリスS

6
+1 sudoパスワードは、セキュリティのために(私が見る限り)実際には存在しませが、もっとバカなチェックのためです。そこにいないことは、計り知れない混乱を引き起こす可能性があります。
スパイダーボリス14

1
キーを紛失した場合、バックドアがない限り完了しますが、攻撃者も同様です。正しく行われた場合、失われたキーを修正する唯一の方法は、物理的に実際の端末に座ることです。sshキーが提供する保護の種類が必要な場合は、落とし穴に注意する必要があります。単に...キーを紛失しないでください。
SnakeDoc

1
最後の段落に対するコメント、およびすべてのVPSの一般的なアクセスの喪失に関するコメント...一部のVPSプロバイダーは、ロックアウトされた場合に実際に役立ちます。VMをシングルユーザーモードで起動し、ロックアウトしたときにいくつかの処理を行いました(それは...ファイアウォールのルールが間違っています)。ホストによっては、サービスの料金を請求される場合があります。 。結局、あなたに特別な注意を捧げるまた、いくつかは、あなたが大規模な、おそらく破壊的変更をコミットしようとしている場合にはそれだけの価値があることができ、小さな価格のためか、時には無料でバックアップ/スナップショットを行います。
SnakeDoc

1
@DmitryPashkevich- PasswordAuthenticationすべてのユーザーに影響を与えることに関してMatch、sshd_configのセクションを常に使用して、特定のユーザーまたはグループに対して再び有効にすることができます。
マットトーマ

11

私は通常NOPASSWORD、自動化プロセスによって実行されるコマンドへの使用を制限しています。これらのコマンドのサービスアカウントを用意し、sudoの使用を必要なコマンドに制限することをお勧めします。

NOPASSWORD一般的なコマンドを許可すると、ユーザーIDにアクセスできるすべてのユーザーがコマンドを実行できます。これは資格情報の侵害に起因する可能性がありますが、1秒間離れたときにデスクに座っている誰かと同じくらい簡単な場合があります。

パスワードを頻繁に入力する必要はありません。パスワードを入力したら、それらの間であまり長く待たなければ、いくつかのコマンドを実行できます。タイムアウトは構成可能です。


8

これは、次の2つの状況でのみ使用します。

  • それがされた場合、絶対に特定のユーザーとして実行されている自動化されたスクリプトに必要な
  • 特定の管理者タスク(システムを変更するアクションを実行するタスクではなく、管理者タスクのみを読み取ります)、そしてもちろん特定のユーザーのみ

デフォルトでは、ほとんどのsudo設定は同じセッションでしばらくの間再度尋ねることはありません(効果のない新しいシェルを開いた場合)。この動作は、timestamp_timeout設定である程度制御できます。

パスワードなしsudoはパスフレーズなしのsshキーほど危険ではありません。リモートの攻撃者は最初にログインするために資格情報を必要としますが、秘密キーを何らかの方法で侵害して(または物理的にローカルにいる場合)マシンから離れている間はログインしてロックを解除したままにしておきます)、パスワードリクエストは、それらと特権アクセスの間の貴重な追加防御となります。

フォローアップ2について:

ssh経由でrootとしてログインするキーも持っている場合

これは、説明したとおりの理由で回避することをお勧めします。リモート接続に特権アクセスが必要な場合は、サービスアカウントを介してログインし、sudoを介してジョブを実行するのに十分な制御を与えます。もちろん、これは設定するのがより簡単ですので、多くの人は気にしません(攻撃者がそこに時間を費やすためにあなたよりも下にぶら下がっている果物がたくさんあるので、それがあなたの好意で動作します!)、セキュリティと利便性の間の古い妥協(プロのヒント:セキュリティを選択してください!)。


フォローアップ#2に対処していただきありがとうございます。私はまだ混乱しています:root直接ログインするのを避けようとしていますが、アカウントにアクセスするためのいくつかの方法が必要ですよね?では、どうすればそれを行うことができますか?sshキーではなくパスワードを使用しますか?しかし、キーはパスワードより優れていませんか?
ドミトリーパシュケビッチ14年

いつでもローカルでrootとしてログインできますが、リモートホストから(sshなどを介して)rootに直接ログインすることは完全に無効にすることをお勧めします。sudoを介して(もちろんパスワードを使用して)rootになることができるアカウントがある場合、そのアカウントへのすべてのアクセスを失うことはありません。
デビッドスピレット14年

7

ログインとsudoの両方のSSH認証の両方の長所を利用できます。pam_ssh_agent_authモジュールを統合すると、sudo時にパスワードを入力せずにSSHキーを使用して認証できます。

私はこれを5年以上本番環境で使用しています。

それを構成するには、PAMモジュールをインストールしてから、行/etc/pam.d/sudoまたはシステムの同等物を追加します。

auth    sufficient     pam_ssh_agent_auth.so file=~/.ssh/authorized_keys

これを行う場合は、コンピューター上のキーをパスフレーズで保護してください。そうすれば、誰かがあなたのコンピューターに侵入して鍵を盗む必要があります。アカウントにアクセスできる場合は、ロックを解除した状態でメモリからキーを抜くか、パスフレーズをクラックするか、パスフレーズを盗みます。入力中にキーロガーまたはショルダーサーフィンします(後ろを見てください!)。

ログインに使用するのと同じSSHキーを使用するか、sudoのときにのみエージェントに追加する別のキーを設定できます。したがって、細心の注意が必要な場合は、sudoが必要な場合にのみエージェントに追加する別個のSSHキーを含む別個のauthorized_keysファイルを維持できます。

auth    sufficient     pam_ssh_agent_auth.so file=~/.ssh/authorized_keys_sudo

うわー、それは素晴らしいですね!sudoコマンドを実行するために別のキーを生成しますか、それともSSH認証に使用したものと同じキーを使用しますか?
ドミトリーパシュケビッチ14年

1
これは素晴らしいです。できれば何度も賛成します。
nyuszika7h

通常のSSH認証に使用するのと同じキーを使用するか、セキュリティを強化するために、sudo-ingに使用するキーを一時的にSSH認証エージェントに追加できます。これには、とは異なるファイルを指定する必要があります。たとえば、またはなどの~/.ssh/authorized_keys別のファイルを管理できます。~/.ssh/authorized_keys_sudo/etc/ssh/authorized_keys_sudo
obscurerichard

6

あなたが尋ねたので、このsudo問題に対処する方法に関する私の一般的なアドバイスを以下に示します。

Sudoは、セキュリティを強化するように設計されていません(何らかの点では可能ですが)...むしろ、システム上で誰がどの特権で何をしているのかについての優れた監査証跡を提供します。

適切にセットアップされたSudoはALL=(ALL) ALL設定を使用せず、ユーザーが特に必要とするものに限定された何かを使用します。たとえば、ユーザーがスタックしたサービスにログインして再起動できるようにする必要がある場合、おそらく新しいソフトウェアをインストールしたり、サーバーをシャットダウンしたり、ファイアウォールルールを変更したりする必要はありません。

sudoを使用して自分自身をルートアカウントに昇格させることは、よくあることです。sudo su -。それを行うと、ルートアカウントから誰が何をしているのかが見えなくなります(ルートは同時に複数回ログインできます)。そのため、人々もsudo su -コマンドを無効にしたいことがあります。しかし、実際的な理由で、管理のために完全にルート特権のアカウントが必要な場合、少なくとも誰かにsudo su -コマンドを発行させると、誰がいつルートに昇格したかが記録されます。

私の箱をどのように保護するか:

SSHポートをデフォルト以外に変更します。これは、ポート番号を探すダムボットが回避するためです。

AllowRootLogin nosshd_configの設定を使用して、SSH経由のルートログインを許可しません。これにより、誰かがルートアカウントにブルートフォースするのを防ぎます。監査上の理由とセキュリティのために、ルート/管理者アカウントに誰かが直接ログインすることを許可しないことは、一般的に良い習慣です。rootログインを直接許可する場合、誰がログインし、誰がパスワードを取得したかなどはわかりません。しかし、誰かがJimmyのアカウントにログインし、その権限をrootに昇格させれば、どこから始めればよいかがわかります。監査検索(およびリセットするアカウント)。

ユーザーにそれを必要とするSSHのみを許可するAllowUsers設定を使用し、SSHアクセスが必要なアカウントを明示的に指定します。これは、デフォルトで、SSHからの他のすべてのアカウントをブロックします。

visudoを介してSudoersを編集し、ユーザーが必要とするコマンドのみを許可します。これを行う方法に関する詳細なガイドがたくさんあるので、ここでは詳しく説明しません。ここにスターターがあります:http : //ubuntuforums.org/showthread.php?t=1132821

これの要点は、侵害されたアカウントがマシンを危険にさらさないようにすることです。すなわち。Sallyのアカウントが破られ、Sallyがsudoのみを使用してWebサーバーを再起動できる場合、攻撃者はWebサーバーをループで再起動するのは楽しいかもしれませんが、少なくともrm -rf /your/webserver/directoryすべてのファイアウォールポートを開くことはできません。

ボックスの動作に必要なポートのみを許可する適切なファイアウォールルールを設定します。通常、すべてをドロップし、必要なもののみを明示的に許可します。まともなiptablesがたくさんあり、他のファイアウォールはオンラインで起動します。ここで私が使用するものがあります(基本的なスターターです):

# Generated by iptables-save v1.4.7 on Mon Mar  3 17:55:02 2014
*filter
:INPUT DROP [4528:192078]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [39845:27914520]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4254 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8080 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8443 -m state --state NEW -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT
# Completed on Mon Mar  3 17:55:02 2014

また、強力なパスワードが重要です。リモートアクセスにSSHキーを使用する場合でも、Sudoを使用するにはパスワードが必要です。これは、sudoがさらにセキュリティを提供できる場合です。誰かがあなたのsshキーを盗んだとしても、sudoを使用するためにアカウントパスワードをブルートフォースする必要がある場合、あなたのボックスで何か重要なことをすることはできません。パスワードは言葉ではなく、パスフレーズにする必要があります。文を考えて、それを使用してください。これにより、一般に8文字を超える長さの文字が得られ、十分なエントロピーが提供されますが、ランダムなパスワードよりも覚えやすくなります。もちろん、優れたパスワードプラクティスでは、John the Ripperのようなクラッキングツールをだますために、マシンで生成されたランダムパスワードを使用します。いいえ、Eを3に変更しても機能しません。ジョンもこれらの順列を取得します。


包括的な回答をありがとう!これらのアドバイスをすべて使用して、ボックスを保護する必要があります。EEAAの答えは今でも受け入れますが、それは私が求めていたものにもう少し具体的だからです。
ドミトリーパシュケビッチ14年

1
@DmitryPashkevich OK、EEAAには適切で適切な答えがあります。上記の私のコメントの詳細を尋ねられたので、そうしました。心配ありません:)
SnakeDoc

用としてsudo su -やバリエーション、sudoreplay便利になることができました。
nyuszika7h

3

場合によっては、これを行う必要があります。たとえば、一部のハイパーバイザーAPIにはパスワードなしのログインとパスワードなしが必要ですsudo。しかし、それを壊すことなく制限できます。

あなたが達成しようとしているもののために。パスワードを入力することに慣れてください。ここでは、利便性よりもセキュリティの方が便利です。さらに、本当にルートアクセスが必要な場合は使用できsudo、資格情報を少しの間キャッシュするので、連続して複数のsudoコマンドを実行すると、パスワードの入力が初めて求められます。したがって、あなたが思うほど大きな不便はありません。

また、多くのルート特権コマンドを入力していて、sudoを常に先頭に置きたくない場合、suまたはsudo -sルートシェルを取得する場合もあります。パスワードを一度入力すると、それで終わりです。


2

パスワードなしのsudoに一度噛まれました。これはシェルスクリプトであり、sudoを要求したりエラーを出力したりするのではなく、私の代わりに sudoを呼び出したインストーラーです。

「make」と入力し、ベースパスを設定または表示せずに「sudo make install」部分を実行するスクリプトをイメージングします。そして、/ usrの変更をチェックし始めます...

NOPASSWDを二度と使用しないことを誓い、そのタイムアウト設定を0に変更しました。


1

質問に厳密に答えるわけではありませんが、別のオプションtimestamp_timeoutとして、パスワードをそれほど頻繁に入力する必要がないように長く設定すること があります。これにより、だれでも管理者権限を取得できなくなりますが、煩わしさは軽減されます。

以下からのsudoersのmanページ

timestamp_timeout

sudoが再びパスワードを要求するまでに経過できる分数。細分性が不十分な場合(2.5など)、タイムアウトに小数のコンポーネントが含まれることがあります。デフォルトは5です。これを0に設定すると、常にパスワードの入力が求められます。0未満の値に設定すると、ユーザーのタイムスタンプは期限切れになりません。これを使用して、ユーザーがそれぞれ「sudo -v」および「sudo -k」を介して独自のタイムスタンプを作成または削除できるようにすることができます。

このブログ投稿ではvisudo、タイムアウトを数分で設定するために使用するいくつか示します

Defaults timestamp_timeout=60

たぶん、これはセキュリティと使いやすさの間の幸せな妥協点でしょうか?


入力いただきありがとうございます!私の元々の質問は、マシンにsshするためにキーを使用できるので、パスワードを入力する必要がある頻度ではなく、パスワードをまったく使用しない(および覚えていない)ことに関するものでした。他の人々は、それが悪い考えであることを明らかにしました。
ドミトリーパシュケビッチ14

1

ここでの他の答えは素晴らしいですし、重要なポイントのほとんどに触れます。言及していないことの1つは、自分でログインしたときに行うあらゆる種類の認証が、すでにアカウントに足場を確立しているリモートの攻撃者によってキャプチャされる可能性があるという事実です。シェルログインファイルまたはPATHを変更してキーロガーをインストールし、sudoパスワードを含む入力したすべてのものが送信されるようにすることができます。ハッキングされたsudoバイナリをPATHに追加して、パスワードを収集する可能性があります。sshエージェント接続をハイジャックして接続マシンに戻して、pam_ssh_agent_authを無効にし、接続するとすぐにルートになります。したがって、絶対的なセキュリティの観点では、sudoにパスワードを使用する場合と使用しない場合に違いはありません。もちろん、より複雑な攻撃を行いますj、

要約すると、sudoアクセスがある場合、侵害されたユーザーアカウントがrootになることを絶対に防ぐ唯一の方法は、自分からsudoアクセスを削除するか、使用しないことです。あなたが同意しない場合は、私が間違っているのが大好きだから教えてください!

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