こんにちは!
ナビゲータのEVEです。
昨日は、ssh接続時のセキュリティ向上案について、検討をしました。本日は、その続きでusePAMからになります。
# パスワード認証を無効にする
PasswordAuthentication no
# 公開鍵認証を有効にする
PubkeyAuthentication yes
# チャレンジレスポンス認証を無効にする
ChallengeResponseAuthentication no
# PAMを有効にする(多要素認証などのため)
UsePAM yes
# ルートログインを無効にする
PermitRootLogin prohibit-password:
# 特定のユーザーのみログインを許可(必要に応じて)
AllowUsers user1
# 最大認証試行回数を制限
MaxAuthTries 5
# 詳細なログを有効化
LogLevel VERBOSE
# X11フォワーディングを無効化
X11Forwarding no
# SSHのポート番号を変更(デフォルトの22を避ける)
Port 2222 # 任意のポート番号に変更
[UsePAM]
では、早速、UsePAMの機能について、ChatGPTに聞いてみました。
UsePAM は、SSH (Secure Shell) サーバーで PAM (Pluggable Authentication Modules) を利用するかどうかを制御する設定です。UsePAM が有効な場合、SSH サーバーは PAM を使って認証、セッション管理、アカウント管理、パスワード管理などを行います。
■UsePAMの機能
❶PAM (Pluggable Authentication Modules):
・PAMとは
PAM は、Linux や他の UNIX 系システムで汎用的に使用される認証モジュールのフレームワークです。様々な認証方式やセッション管理の処理を簡単にプラグインのように追加できる仕組みです。システム管理者は PAM を使って、ユーザーの認証やアクセス制御、セッションの設定などを柔軟に構成できます。
❷認証管理:
UsePAM を yes に設定すると、SSH サーバーは PAM を使ってユーザー認証を行います。これにより、パスワード認証、公開鍵認証、多要素認証 (MFA) など、様々な認証方式を PAM 経由で柔軟に統合できます。
PAM を使うことで、認証に関する追加のセキュリティ機能(たとえば、ログイン試行回数制限、アカウントのロック機能、パスワード有効期限の管理など)が提供されます。
❸セッション管理:
PAM はセッション管理にも使用されます。ユーザーが SSH でログインした際に、UsePAM が有効だと PAM によって、ユーザーの環境設定やログイン時に必要な操作(たとえば、ホームディレクトリのマウント、ログの設定など)を行います。
❹アカウント管理:
PAM はアカウントの状態をチェックするためにも使われます。たとえば、アカウントが期限切れになっているか、パスワードが期限切れか、特定のユーザーにアクセス制限をかける必要があるかどうかを確認できます。これにより、ユーザーのアカウント状態に基づいたアクセス制御が可能になります。
❺パスワード管理:
PAM を使うと、システムのポリシーに従ったパスワード変更や強制的なパスワードリセットなどの管理が可能です。これにより、パスワードの強度や有効期限、再設定のルールを厳密に管理できます。
■UsePAM の有効化によるメリット
・柔軟な認証方法
PAM を通じて、パスワード認証、公開鍵認証、多要素認証など複数の認証方式を簡単に設定できます。
・セキュリティの強化
ログイン試行回数制限や、アカウントロック機能を PAM で設定することができます。また、PAM を使用して、LDAP や RADIUS など他の認証システムと統合することもできます。
・システム全体の一貫性
SSH の認証だけでなく、システム全体で PAM による認証とセッション管理を統一することで、一貫したセキュリティポリシーを維持できます。
■PAMを無効化するデメリット
PAMを無効にすると、これらの追加のセキュリティ機能や認証オプションを利用できなくなります。パスワードやアカウントの管理が制限され、単純な認証方式のみを使用することになります。
■まとめ
UsePAM は SSH の認証とセッション管理に関して、柔軟かつ高度なセキュリティ機能を提供します。これにより、システム管理者は多様な認証方式をサポートし、ユーザーアカウントやパスワード管理を細かく制御できるようになります。PAM の機能を活用することで、SSH のセキュリティが強化されるため、サーバーの安全性を向上させる重要な設定と言えます。
usePAMの機能としては、以上の通りです。以上の内容と色々調べてみて、止めても大丈夫かなとも思う所はあったのですが、いろいろなソフト会社がusePAMを利用していろいろなソフトウェアを提供しているという記述があり、この機能を停止することにより、どんなことが起こるかが分からないという点を踏まえ、止めないほうがいいということで、ここは、yesを設定するという結論になりました。
[PermitRootLogin]
次は、PermitRootLoginについてです。
PermitRootLogin は、SSH サーバーの設定で、リモートからの root ユーザーでのログインを許可するかどうかを制御するオプションです。PermitRootLogin の設定によって、root アカウントを利用した SSH 経由でのログインが可能かどうかを決定します。
■PermitRootLogin の機能
PermitRootLogin オプションは以下の4つの値を指定できます。
❶yes:
root ユーザーでのリモートログインを許可します。これがデフォルトの設定の場合もありますが、セキュリティ上のリスクが大きい設定です。
❷no:
root ユーザーでのリモートログインを完全に無効化します。この設定により、root アカウントを使った直接ログインはできません。root 権限が必要な場合は、一般ユーザーとしてログインし、その後 su や sudo を使って root 権限を取得する必要があります。
❸prohibit-password:
パスワードを使用した root ログインを禁止し、公開鍵認証のみを許可します。この設定により、パスワードによる brute-force 攻撃を防ぎつつ、公開鍵認証を使って root でのログインを可能にします。
❹forced-commands-only:
authorized_keys ファイルに制限付きのコマンドが設定されている場合のみ root ログインを許可します。これにより、root での SSH ログインは制限され、特定のタスク(バックアップやスクリプトの実行など)のみ実行可能にできます。
■セキュリティ上のリスク
★root のリモートログインを許可するリスク:
root アカウントはシステム全体の管理権限を持つため、リモートから直接ログインできるようにすると、悪意のある攻撃者が root アカウントをターゲットにしてシステムに侵入するリスクが高まります。
・パスワード認証が有効であれば、ブルートフォース攻撃(総当たり攻撃)でパスワードが破られるリスクがあります。
・root アカウントが無効化されていない場合、すべてのシステムで root ユーザー名は同じであるため、攻撃者にとって狙いやすいターゲットになります。
★推奨される設定:
セキュリティを強化するため、PermitRootLogin no を設定し、一般ユーザーでログイン後に必要に応じて sudo を使用して root 権限を取得するのが一般的です。
■まとめ
PermitRootLogin の設定は、SSH サーバーにおいて root ユーザーのリモートログインを許可するかどうかを決定します。セキュリティ上の観点から、一般的には PermitRootLogin no として root の直接ログインを禁止し、一般ユーザーでログインした後に sudo などを使用して root 権限を取得することが推奨されています。
ここは、rootによるリモートログインを完全に排除したいので、noが適切だと考えます。現在Ubuntuから提供されているインストールファイルは、rootによるログインはデフォルトで禁止されていますが、XServerは、Ubuntuインストール直後からrootでログインすることが可能です。その点を考えると、XServerから提供されている環境では、ssh_configにPermitRootLogin yesと記述されているはずなのですが、その記述がありません。他のファイルをインポートし実行しているのかと思ったのですが、その記述も有効になっていません。不思議です。今後、このセキュリティを実現しようとした場合、ドツボにハマりそうな匂いぷんぷんです。
[AllowUsers]
次は、AllowUsersについてです。
AllowUsers は、SSH サーバーでログインできるユーザーを指定するための設定オプションです。この設定を使用すると、特定のユーザーだけに SSH 接続を許可し、他のすべてのユーザーのアクセスをブロックすることができます。
■主な機能
❶特定のユーザーのみログインを許可:
AllowUsers にリストされたユーザーだけが SSH サーバーにログインできます。この設定を使うことで、不要なユーザーのログインを防ぎ、サーバーのセキュリティを強化します。
❷複数ユーザーの指定:
複数のユーザーを許可する場合、ユーザー名をスペースで区切って並べることができます。
❸リモートホストの制限:
ユーザーごとに、特定のホストからのみログインを許可することも可能です。ユーザー名の後に @ 記号でホスト名や IP アドレスを指定できます。
■AllowUsers を使う利点
・セキュリティ強化
特定のユーザーだけにアクセスを許可することで、サーバーへの不正アクセスのリスクを減らします。
・アクセス制御の強化
一部のユーザーだけに SSH ログインを許可し、他のユーザーを拒否することで、アクセス管理が厳格になります。
・ホストベースの制限
特定のユーザーが特定のホストや IP アドレスからしかアクセスできないように制限できるため、セキュリティをさらに高めることができます。
■AllowUsers と DenyUsers
AllowUsers の逆の設定として、DenyUsers というオプションもあります。これを使うと、特定のユーザーだけが SSH ログインを拒否され、その他のユーザーにはアクセスが許可されます。
■注意点
AllowUsers が設定されている場合、リストにないユーザーはすべて SSH ログインを拒否されます。
AllowUsers が空欄の場合、デフォルトですべてのユーザーにアクセスが許可されます(他の設定による制限がない場合)。
この設定を使用して、サーバーのアクセスを厳格に制御し、セキュリティを高めることができます。
この設定は、ホストベース認証、パスワード認証、公開鍵認証方式すべて有効です。この設定は有効にすべきでしょう!
[あとがき]
ChatGPTに最初に教えてもらった設定情報で問題になる点があるのではとも思いましたが、今のところないようです。usePAMのこともあるので、最後まで調べます。明日設定情報が決まると思いますので、それ以降毎日30分だけ、本件をどうやってサーバーへ設定するのか調べたいと思います。
これに掛かりっ切るとすぐに数時間掛かってしまい、プログラム開発できなくなってしまうので・・・。まっ、実際に調査する前に、いろいろ調べるとは思いますが・・・。
涼しくなったとはいえ、昼間の熱気が部屋にこもります。そのため夜はエアコンをつけて寝るのですが、寒くて寝ている途中で起きてしまうし、つけないと暑くて寝れません。ちょっと、中途半端な時期になりました。真夏の時よりはましなのですが、睡眠不足の日々が続いています。
もう少しで涼しくなるようなので、何とか乗り切りたいと思います。
では、また!!!