1つのIPアドレスを除くすべてのIPアドレスからのrootsshログインを制限したいと思います。
これを/etc/pam.d/sshdに追加する必要があるという印象を受けました。
account required pam_access.so
これを/etc/security/access.confに追加します。
-:root:ALL EXCEPT IPADDRESS
しかし、それはうまくいっていないようです。
/ etc/ssh/sshd_config内
# Disable Root login
PermitRootLogin no
#
# [ . . . ]
#
# At the end of the file, add:
#
# Allow Root Login via Key from Admin Bastion
Match Address 10.9.8.7
PermitRootLogin without-password
なぜroot sshアクセスを許可するのですか?マーフィーの法則では、ルートアクセスが必要になると、承認されたIPアドレスから離れることになります。
これは私の意見ですが、これに対するより良いアプローチは、通常のユーザーとしてログインしてから、rootにsuすることです。 rootにアクセスするには、ユーザーパスワードとrootパスワードの両方が必要になります。そのため、通常のユーザーアカウントは、実行しているLinuxディストリビューションに応じて、adminまたはwheelグループに属している必要があります。
編集:さらに改善されたセキュリティのために、ssh接続の事前共有キー認証のみを許可します。ただし、必要な秘密鍵を備えたマシンを使用していない場合は、これは両刃の剣である可能性があります。
これはRHEL5 +であり、この問題が発生していると思います。同じ手順がRHEL 4でも機能します。RHEL5でこれを機能させる秘訣は、アカウントが必要なpam_access.soを追加することです。
2行目または3行目の/etc/pam.d/sshdに移動します。一番下に追加するだけでは機能しません。
結果の/etc/pam.d/sshdは次のようになります。
#cat /etc/pam.d/sshd
#%PAM-1.0
auth include system-auth
アカウントに必要なpam_nologin.so
アカウントが必要ですpam_access.so
アカウントにはsystem-authが含まれます
パスワードにはsystem-authが含まれます
セッションオプションのpam_keyinit.so強制的に取り消す
セッションにはsystem-authが含まれます
セッションにはpam_loginuid.soが必要
バックアップの作成などには厳密なルートアクセスが必要になる場合がありますが、非常に危険な場合があります。幸いなことに、sshキーとauthorized_keysファイルを使用することで、直接ルートアクセスをかなり保護できます。
まず、sshd_configでrootログインを許可しますが、事前定義されたコマンドのセットのみを実行できるようにします。PermitRootLogin forced-commands-only
を/ etc/ssh/sshd_configまたはsshd構成が保存されている場所に配置します。これにより、rootのパスワード認証が無効になり、sshキーの使用が強制され、それでも定義したコマンドのみが許可されます。
次に、この直接ルートアクセスが必要なクライアントにログインし、新しいsshキーssh-keygen -t rsa
を作成します。スクリプトで必要な場合は、そのキーをパスワードなしにします。
次に、この新しく作成されたsshキーをssh-copy-id -i ~/.ssh/id_rsa.pub root@yourserver
(rootログインがまだ有効になっている場合)を使用してサーバーにコピーします。そうでない場合は、内容〜/ .ssh /id_rsa.pubを/root/.ssh/authorized_keys
ファイルにコピーして貼り付けます。
ここで、クライアントが/root/bin/startup_skynet.sh
をrootとしてsshを介して実行する必要があると仮定します。この時点で、既存のauthorized_keysファイルは次のようになります。
ssh-rsa FASBFAFfasdföjasfABGVEAGUPEGDJfsadnö2314235dfbösadköjsdfösdklf==
修正して
no-pty,no-X11-forwarding,no-agent-forwarding,no-port-forwarding,command="/root/bin/startup_skynet.sh" ssh-rsa FASBFAFfasdföjasfABGVEAGUPEGDJfsadnö2314235dfbösadköjsdfösdklf==
そしてそれを保存します。
次に、クライアントからssh root@myserver ls
のようなものを実行してみます-これは失敗するはずです。次に、ssh root@myserver /root/bin/startup_skynet.sh
を実行してください-これでうまくいくはずです。
この方法では、直接rootログインがはるかに安全になります。セキュリティは階層化されたものであり、単一の機能が提供するものではないため、さらに多くのことができます。接続する必要のあるユーザーのサブセットが限られている場合は、sshd_configのAllowUsers
パラメーターを使用して、事前定義されたIPアドレスのセットからの接続を許可することもできます。たとえば、AllowUsers [email protected] [email protected] johndoe
は192.168からのルートを許可します。 .1.2と192.168.1.3、そしてどこからでもjohndoe。
Sshd_configファイル(通常は/ etc/ssh /にあります)のAllowUsersオプションを探しています。ウィットするには:
AllowUsers [email protected]
RootのみがIP 10.200.0.1からログインできるようにします-デフォルト設定では、すべてのホストのすべてのユーザーが許可されます...
私が見ることができる1つの欠点は、あなたがdo useAllowUsersの場合、-allアクセスが必要なユーザー-これは、十分な数のユーザーリスト(たとえば、LDAPまたは他のディレクトリからプルされている)で管理するのは間違いなく面倒です。
オプションdoesは、manページごとにワイルドカードパターンの使用を許可するため、これはある程度回避できる可能性があります。
このキーワードの後には、スペースで区切ったユーザー名パターンのリストを続けることができます。指定した場合、ログインはパターンの1つに一致するユーザー名に対してのみ許可されます。 '*'および '?'パターンでワイルドカードとして使用できます。ユーザー名のみが有効です。数値のユーザーIDは認識されません。デフォルトでは、ログインはすべてのユーザーに許可されています。パターンの形式がUSER @ Hostの場合、USERとHostが別々にチェックされ、特定のホストからの特定のユーザーへのログインが制限されます。
それでも、YMMVはかなり制限される可能性があります。お役に立てれば。
sshd_config
のMatch
機能を使用し、IP(またはサブネット)と照合することをお勧めします。
これにより、許可される機能を指定することもできます。例:「内部」サブネットセットのユーザーのみがPasswordAuthentication
を使用できると言うことができます(また、AllowRoot
はそれを必要とする単一/狭い範囲のIPからのみ取得できます)。
また、公開鍵による認証はPAMを経由しないため、公開鍵認証を使用する場合、pam_accessは機能しません。
試しましたか :
-: ALL EXCEPT root:your_ip_address
?
2行試しましたか:
+:root:<your_ip>
-:root:ALL