web-dev-qa-db-ja.com

SSHでrootログインするのは間違っていますか?

UNIXではrootとしてログインしないでくださいという印象をずっと以前から受けていました。

DigitalOcean でVirtual Private Serversを使い始めました。- someアドバイス は、SSHキーを使用してrootとしてログインすることです。

これは私には理にかなっていますが、同じテキストファイルでタブとスペースを使用しているのを見つけたように、不安を感じています。

SSHルートログインを使用する方が安全ですか、それともトリッキーなパスワードを持つ別のユーザーとして使用する方が安全ですか?

8
Jake Rayson

mricon マルチユーザーシステムでrootログインを使用してnotの2つの優れた点を提起しました。 rootログインを使用するためのカウンターポイントを追加したいだけです。サーバーに構成ファイルをrsyncする必要がある場合は、ユーザーのホームディレクトリにアップロードする代わりに、rootログインを使用して1つの手順でそれを実行できます。その後、suまたはSudoからrsyncに再び/etcフォルダ。もちろん、私はサーバーの唯一の管理者であり、監査はここでは問題になりません。

Rootログインを許可しないという厳格な規則はありません。これは 多層防御 メジャーの一部です。そのために、ファイアウォールにIPフィルタリングまたはポートノッキングを実装できます。これらをstrongパスワードまたはキー認証と組み合わせることで、適切な状態が得られます。

5

最初に覚えておくべきルールは、rootとして実行する必要がない限り、rootとしてタスクを実行しないことです。

この部分は、タイプミスやその他のミスによる損傷のリスクを軽減します。また、使用しているツールにたまたまセキュリティの脆弱性がある場合の損傷のリスクも軽減されます。

さらに、アカウントには必要な権限のみを付与し、それ以上のものは付与しないでください。

これらの部分を説明したので、ルートアクセスへの2つのアプローチの引数を見てみましょう。

非ルートとしてログインし、Sudoを使用するための引数

誰が何をしたかを簡単に把握できる監査証跡が得られます。すべてのコマンドをrootとして実行するのではなく、Sudoで始まるコマンドのみを実行します。

人々が言うほど多くのセキュリティを提供しないかもしれない理由

監査証跡は、人々がルールに従っている限り機能します。 Sudoにアクセスできる人が3人以上いる場合や、自分で行ったすべてのことを思い出せない場合に便利です。次に、誰が何かをしたかを調べて、なぜ彼らがそれをしたのか尋ねます。

しかし、誰かが監査証跡を迂回したい場合は、そうすることができます。誰かが監査証跡を迂回できないようにしようとすると、これらの制限により、最終的にはその人が業務を実行できなくなる可能性があります。

人々はSudoが不要だったとしても、すべてのコマンドの前にreflexによって置くかもしれません。また、セキュリティの脆弱性の場合、Sudoコマンドを使用せずに実行しても、攻撃者が実行中のプロセスを侵害した場合、Sudoexecveで実行できるため、Sudoで実行されたかどうかは問題ではないため、多くのメリットはありません。同じ特権を得るために。

Sudoを使用することが悪い理由となる議論

ユーザーパスワードにより、より多くの権限にアクセスできます。ユーザーは、ユーザーパスワードを頻繁に入力することができます。攻撃者がこのパスワードを取得すると、Sudoを介してコマンドを実行するために使用できます。

侵害されたユーザーアカウントは、事実上root特権を与えます。必要な場合を除き、rootとして実行せず、アカウントに必要以上の特権を与えないことを覚えていますか?

Root権限を必要としないすべてのタスクで非rootユーザーとしてログインすると、危険性が減少します。アカウントにSudoへのアクセス権がある場合、そのメリットはありません。ルートとして実行されなかったタスクは、同じアカウントにSudoアクセス権がある場合、攻撃者にとってより価値のあるターゲットになります。

他に何ができますか?

両方の機能を最大限に活用したい場合は、各管理者にサーバーへのログインを2回与えることができます。 root権限を必要としない日常のタスクのための1つのログイン。また、必要な場合に備えてSudoアクセスを持つ2次ログイン。ただし、その2番目のアカウントとrootとして直接ログインする場合の違いは、監査証跡のみです。ただし、Sudoアクセス権を持つアカウントを常に使用することは想定されていないことを人々が忘れる方が簡単かもしれません。 rootとして常にログインしないことを覚えていると、覚えるのが少し簡単になります。

パスワードのブルートフォースはどうですか?

一部のユーザーは、ユーザー名とパスワードの両方ではなく、パスワードを推測するだけでよい攻撃者に対してパスワードをブルートフォースで強制する方が簡単であると主張します。実際には、これは弱い議論です。

キーを使用したログインのみを許可するようにsshdを設定できます。パスワードによるログインを許可する必要はありません。パスワードログインが許可されていない場合、パスワードの総当たりは問題ではなくなりました。 rootアカウントへのアクセスを可能にするパスワードを存在させる必要さえありません。そして、誰もSSH認証の秘密鍵を推測するつもりはありません。

/root/.ssh/authorized_keysに各管理者の公開鍵が含まれている場合、それらの公開鍵は、誰が何をしたかを示す監査証跡として使用できます。また、authorized_keysからキーを削除することで、他の手段と同じように簡単にアクセスを取り消すことができます。

8
kasperd

この推奨事項は、複数のユーザーがルートレベルの操作を実行できるシステムに最も関連しています。 Linux監査デーモンは「UID」と「実効UID」を区別できるため、「Sudo -i」を実行してからルートレベルの操作を実行するユーザー「bob」は、「ユーザーrootとして機能するユーザーbob」として監査ログに表示されます。 。したがって、/ etc内のファイルへの変更、または/ sbin内のファイルの実行を追跡すると、これらのアクションを実行したユーザーが正確にわかります。 rootとして直接ログインした場合、この情報は利用できません。

また、アカウント管理も簡素化されます。管理チームのメンバーが辞任した場合は、アカウントをロックするだけで、すべてのシステムでルートsshキーを置き換える必要がありません(とにかく、ルートパスワードを変更することをお勧めします)。

6
mricon

私が通常行うことは、ルートアカウントにログオンを構成し、Sudoを使用してサーバーを構成(自分をsudoersに追加)してから、SSHを介してrootログインを許可しないことです。

このように操作できない理由はわかりませんが、自分で有効なケースを持っている場合は、キーとパスワードを使用するのが通常は適切な保護です(2要素認証は知っていることと何かのため、あなたが持っている)。

Rootログインを無効にすると、マシンの攻撃面も減少します。一般的に与えられるもう1つの議論は、Sudoはある程度の説明責任を与え、rootアカウントは通常システムアカウントであり、何かを使って誰かがrootを使用してログオンした場合、それらのコマンドを実際に実行しているユーザーを知ることはできません。 Sudoを使用する場合、その人は最初に自分のアカウントにログオンし、次にSudoでrootにログオンする必要があるため、その責任はまだあります。これは、アカウントが少ない場合(およびほとんどの場合、別のリモートログシステムではない場合)には当てはまりません。

3
Lucas Kauffman

次の手順に従って、VPSをプロビジョニングするときは常にデジタルオーシャンを確認します。

  1. 新しいユーザーを追加する(標準コマンド)

  2. Visudoを実行し、「#ユーザー特権の指定」というタイトルのセクションにあるrootのユーザー名の下にユーザー名を追加して、この新しいユーザーにroot特権を付与します。 rootと同じ特権を効果的に自分に与える

  3. 任意のエディターを使用してetc/ssh/sshd_configを編集し、SSHがリッスンするポートを変更します。 「ポート22」という行を見つけ、その行の数値部分を別の部分に変更します。当然、予約済みのポートは使用しないでください。オンラインで簡単に見て、どれが利用可能かを示します。同じファイルで、 "PermitRootLogin yes"を見つけ、 "yes"を "no"に変更します。最後の手順として、慎重に行ってください。新しいユーザーアカウントにSSHへの明示的なアクセスを提供してください。これには、行 "AllowUsers"を追加する必要があります

このすべての後、SSHサービスを再起動します(service ssh restart)。

注:VM/VPSへのコンソールアクセス権がない場合は、これらの手順のうちいくつを変更するかを慎重に検討してください。例えば。デフォルトのポートを変更するだけで十分です。

幸運を!

ソース: https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04

3
gb5757870

サーバーでは、「ルートとしてログインしない」という推奨事項はそれほど難しくないと思います。デスクトップを使用している場合は、ほとんどの場合root権限を使用しません。しかし、サーバーを使用している場合、ほとんどの場合、それは何らかのメンテナンスタスクです。ウェブサーバーの制限されたアカウントのみを気にする必要がある人に与えることができますが、あなたがサーバーの管理者である場合は、自分にrootログインを与えることができます。 rootログインにキーを使用する場合、Bruteforcingは困難です。

一部のユーザーにALL=(ALL:ALL) ALL- Sudo権限を付与する場合、そのコマンドの一部がログを改ざんする可能性があるため、別のサーバーでログを記録する必要があります。

1
user10008

答えてくれた皆さん、ありがとうございました。 FWIW私は完全性のために自分の回答を投稿しています。基本的には、SSHキーを使用して非rootユーザーとしてログインし、パスワードを許可していません。

それは私だけがアクセスできるVPSサーバーであり、いくつかの機密サービスを実行するだけです。そのため、私はそれをできるだけ悪化させずに、できるだけ安全にしたいと思っています。

  1. 新しいユーザーを追加
    _$ adduser demo_
  2. 公開SSHキーを_authorized_keys_の_~/.ssh/_ファイルに追加します
  3. ルート権限を付与する
    _$ visudo_
    demo ALL=(ALL:ALL) ALL
  4. パスワード認証を無効にする
    _$ vim /etc/ssh/sshd_config_ _PasswordAuthentication no_
  5. Rootログインを無効にする
    _$ PermitRootLogin no_
  6. Sshを再起動します
    _$ service ssh restart_
  7. Rootとしてログアウトする前に、他のユーザーでログインをテストしてください!

うまくいけば、ルート権限のない安全なSSHログイン:)

0
Jake Rayson