私に加えて、他の何人かをrootユーザーとして追加したいLinuxサーバーがあります。すべてのユーザーがサーバーにアクセスする必要はほとんどありません。最初のステップとして、root
両方とも知っているユーザーのパスワードを設定しました。その後、次のユーザーを追加しましたuseradd
。
useradd -ou 0 -g 0 user1 -d /root/user1/ -s /bin/bash
useradd -ou 0 -g 0 user2 -d /root/user2/ -s /bin/bash
その後、root
ユーザーのパスワードハッシュをuser1
sumuser2
にコピーしました/etc/shadow
。その後、.ssh/authorized_keys
各ユーザー(プライベートSSH公開鍵user1
を含む)のファイルをホームディレクトリに作成し、最後にユーザーのファイルがありませんでした。つまり、ユーザーを使用してサーバーにログインする方法はありませんでした。user2
PermitRootLogin without-password
sshd_config
authorized_keys
root
root
これは基本的に私に必要なものですが、この設定にはいくつかの(セキュリティ)欠点があるかもしれません。より良い解決策はありますか?
ベストアンサー1
やっていることは非定型なのでお勧めできません。ほとんどのプログラムは、uidとユーザー名の間の1対1のマッピングを想定しています。奇妙なバグ/不明な動作または最悪のセキュリティ脆弱性が発生する可能性があります。これは私には知られていないので、目標を達成するためのより良い/より一般的な方法がある場合はお勧めできません。この点を考えると、最初に行うことは、作成したアカウントを削除することです。
これで、ユーザーがrootアクセスを必要とする場合、rootアカウントに関連するリスクを理解していると仮定すると、rootアクセスを許可することに大きな問題はありません。セキュリティの観点からは、SSHの最も脆弱な点はパスワード認証であるため、無効にすることを強くお勧めします。以下を編集/追加するだけです。/etc/ssh/sshd_config
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
しかし、必要以上に長いルートアクセス権を持つことにはいくつかの問題があります。特に、単純なミスがより容易に大きなダメージを与える可能性があるということです。したがって、ユーザーがログインする権限を持たないアカウントを作成することをお勧めします。ユーザーとしてログインすると、su -
必要に応じてrootパスワードを使用してroot権限を取得できます。
これで、リモート攻撃は通常rootユーザー(および通常のユーザー名などadmin
)をターゲットにしており、パスワード認証を無効にするとキー認証が十分に強力になるため、通常はそれを心配する必要はありません。上記と下記のようにroot権限を取得できるユーザーアカウントがある場合/etc/ssh/sshd_config
。
PermitRootLogin no
警告:rootアクセス権を持つユーザーアカウントがあることを確認してください。そうしないと、サーバーにアクセスできなくなる可能性があります。
これにより、攻撃者が権限のないアカウントにアクセスするにはユーザー名が必要になり、完全なルートアクセスを取得するにはパスワードが必要になるため、誤った設定や将来の可能性があるssh / opensslの脆弱性からユーザーを保護するのに役立ちます。
最後に、複数のユーザー間でパスワードを共有することはベストプラクティスではありません。何らかの理由で誰かのアクセス権を取り消すには、誰もが新しいパスワードを知っている必要があります。ルートアクセス権を取得するには、ユーザー独自のパスワードを使用するのが最善です。これにより、ユーザーのアカウントをロックし、rootパスワードを変更すると(rootアクセス権があるため変更できます)、誰もが自分のパスワードを引き続き使用できます(誰かをロックするとより多くの問題が発生することに注意してください。) )。他のユーザーのパスワードを変更したり、他のユーザーにキーを追加したりするなど、システムに対してすべての操作を実行できるため、サーバーへのrootアクセス権があります。
これを行うには、sudo
上書きを使用su
して、ユーザーがrootのように自分のパスワードを使用してroot権限を取得できるようにします。これを行うには、使用している展開に応じてsudo
ユーザーをインストールしてグループに追加しますwheel
。sudo
その後、ユーザーはsudo <command>
root権限でコマンドを実行したり、sudo -i
rootシェルを取得したりできます。
また、sudoが実行するすべての操作はユーザー名について記録され、より良い監査ログを提供します。sudo -i
常にこれを行わないと仮定します。
ユーザーにすべてのコマンドへのアクセス権を付与するのではなく、コマンドのサブセットのみを実行するようにユーザーをさらに制限することもできます。これにより、システムでより少ない操作を実行できるため、後でアクセス権を取りやすくなります。ただし、これはユーザーがどの程度信頼できるかによって異なり、ユーザーがアクセスする必要があるすべてを理解していない場合は迷惑になる可能性があります。
これを考慮すると、攻撃者がサーバーにアクセスして制限されたダメージを与えるには、ユーザー名とSSHキーまたはキーベースの認証の脆弱性が必要です。その後、実際にrootアクセス権を取得し、実際のダメージを与えるためにパスワードが必要です。
セキュリティはレイヤごとに適用され、一般にレイヤが多いほどセキュリティが強化されます。ただし、階層数を増やすと可用性も低下します。特定のシステムにどのバランスを適用するかを決定するのはユーザーの役割です。上記のステップは、最小限のユーザビリティコストでセキュリティを強化します。システムをロックするために実行できる追加の手順がありますが、ほとんどの場合これで十分です。