大部分の単純なケース [つまり、Puppet/Chef/CfEngine/Ansible のようなフレームワークがやり過ぎの場合] に対する適切な解決策だと思いますが、リモート システムの高度な制御が必要な場合は、
(a) キーベースの認証を要求する (b) SSH で使用できる場所をロックダウンする - 特に root ユーザーが使用できる IP アドレスをロックダウンする (c) この信頼関係を持つマシンが適切に保護されていることを確認する.
「root 権限を必要としないことを行うために root としてログインすること」が嫌われるのと同じくらい、「root としてログインすることは嫌われる」とは思いません。推測可能なパスワードを使用すると、アカウントが総当たり攻撃される可能性があるため、これは対処すべき問題であり、人々が root としてログインできるようにすることで、より広い範囲でばかげたエラーを作成し、疑わしいことを行うことができます。悪意のあるアクティビティ - ただし、アーキテクチャによっては、これは実際には意味がない場合があります。
この XKCD コミックは、環境によっては、root アカウントが侵害されても実際には問題にならない可能性があることを指摘しています。
おそらく、一般的な場合の最も単純で効果的な解決策は、root としてログインできるユーザーを厳密に制限することです /etc/ssh/sshd.conf で適切な AllowUsers 行を指定することと組み合わせてキーを制御します。通常のユーザーを許可し、ルート アクセスをロックする適切な行は次のようになります:
AllowUsers normaluser1 normaluser2 [email protected]
もちろん、パスワード ベースのログインが許可されていないこと、または root アカウントにパスワードがないこと (つまり、パスワード ファイルのパスワード フィールドに "!" または "*" が含まれていること) が重要です。
仮定したように、単一 (または少数) のプログラムのみを実行する必要がある場合は、キーベースの認証を使用して特定のユーザーを設定し、必要なコマンドへの適切な sudo アクセスを許可する方がよい場合があります。
もちろん、データの値に応じて、アクセスをさらに「ロックダウン」するために実行できることがたくさんあります。たとえば、selinux、リモート ロギング、シェルの制限、時刻の制約、ログイン時の即時通知などです。 、fail2ban のようなアクティブなログ監視 [オプションではないネットワーク制限に加えて] はすべてソリューションの一部です。とはいえ、簡単に吹き飛ばして再作成できるシステムを単に制御している場合、これの多くはやり過ぎになる可能性があります。
セキュリティはレイヤーで構築されていることに注意してください。root アクセスを取得するには、アカウントがいくつかのレイヤーを通過する必要があります。アクセスのロックダウン、SSH 秘密鍵、ファイアウォール、時刻制限 [および最小限のアクセスの原則、つまり必要なものへのアクセスのみを提供し、それ以上のログやバックアップは提供しない] は、優れたセキュリティの一部としてすべて一緒に機能する必要があります。
追加 - SUDO アクセス
Sudo は、通常のユーザーが昇格されたアクセス権で特定のコマンドを実行できるようにするメカニズムであり、非常に柔軟で、スコープがさまざまです。 sudo の要約はここでは適切ではありませんが (ただし、man sudo と入力すると十分に文書化されます) ほとんどのディストリビューションでは、適切な手順は次のとおりです。
<オール>/etc/sudoers を編集する - Linux のほとんどのバリアントには、root として実行する必要がある「visudo」と呼ばれるこれを行うための特別なプログラムがあり、システム エディターを使用して /etc/sudoers を編集するのとほぼ同じです (これは別の方法です)。これ - おそらくひっかかれるかもしれませんが)
適切な行を追加/変更して、特定のユーザーが特定のことを行えるようにします。たとえば、パスワードを入力せずにディレクトリをマウントできるようにしたい場合は、次のような行を入力します:
username ALL=/sbin/mount NOPASSWD: ALL
次に、このコマンドを実行するには、適切なユーザーが次のように実行します
sudo mount /dev/xxx /path/to/mount
複数のコマンドに対して複数の行をリストできます。使用するのではなくグループを使用します。sudoers はかなり柔軟なサブシステムです。多くのディストリビューションでは、コマンドを含むファイルを /etc/sudoers.d のようなサブディレクトリに追加することもできます
以下は、Unix Stackexchange の投稿からの回答です。
パスワードなしで ssh コマンドと sudo コマンドをリモートで実行する方法。
この方法により、サーバーの管理者は、あなたのアカウントが 1 つのコマンドを sudo
として実行できるようにすることができます。 コマンドはおそらくあなたのスクリプトへの呼び出しであり、あなたのアカウントで実行された場合にのみ許可されます.許可されたコマンドは引数を含めて完全に指定されているため、この方法はかなり安全だと思います.
一部のコマンドのパスワードをスキップするように sudo に指示できます。
例えば/etc/sudoers
で
archemar ALL = (www-data) NOPASSWD: /bin/rm -rf /var/www/log/upload.*
これで使えます
sudo -u www-data /bin/rm -rf /var/www/log/upload.*
パスワードなしで archemar として。
注意してください
sudo -u www-data rm -rf /var/www/log/upload.*
rm
としては機能しません (パスワードを要求します) /bin/rm
とは異なります .
/etc/sudoers
を必ず編集してください visudo
を使用 コマンド。
上級レベルに達したら、独自の sudo
が必要になる場合があります。 /etc/sudoers.d
のファイル .