sshd を設定する
sshd の設定について、現在、私が使用しているものについて書きます。
drop-in を使う
/etc/ssh/sshd_config
を書き換えるのが一般的です。
Fedora 39 にインストールされているファイルを実際に見ると、ほとんどすべての項目がコメントアウトされており、デフォルトの設定になっています。
このファイルを書き換えてしまうと、アップデートした後に .rpmsave
とか .rpmnew
とかが作られてゴチャゴチャするので、
drop-in を使って設定します。
drop-in の設定ファイルは /etc/ssh/sshd_config.d
に配置しますが、新規インストール時点で既にファイルがありますので、中身を確認しておきます。
/etc/ssh/sshd_config.d/40-redhat-crypto-policies.conf
Include /etc/crypto-policies/back-ends/opensshserver.config
読み込み先のファイルは少々大きいので割愛しますが、cipher などのポリシーが書かれています。
/etc/ssh/sshd_config.d/50-redhat.conf
SyslogFacility AUTHPRIV ChallengeResponseAuthentication no GSSAPIAuthentication yes GSSAPICleanupCredentials no UsePAM yes X11Forwarding yes PrintMotd no
こちらも一つ一つの項目については改めて説明しませんが、ごく一般的な設定が書かれています。
既にここまで設定されているので、私たちが改めて設定することは多くはありません。名前が衝突しないように、ホスト名を付けてるなど各自お好みで /etc/ssh/sshd_config.d/10-example.com.conf
を作成し、以下のように設定します。
PermitRootLogin no PasswordAuthentication no
root
ログインの禁止と、パスワード認証の禁止だけです。他の設定はお好みでよいと想います。
待ち受けポートを変更する
sshd のポートを変更すると、SELinux の設定変更が必要になって面倒なので、22 のままにしておきます。
待ち受けポートを変えたい時は、firewalld 側で変更します。
# firewall-cmd --permanent --zone=public --add-forward-port=port=2222:proto=tcp:toport=22 # firewall-cmd --reload
VPN の内側に制限する
# firewall-cmd --permanent --zone=pubblic --remove-service=ssh # firewall-cmd --permanent --zone=trusted --add-service=ssh # firewall-cmd --permanent --zone=trusted --add-forward-port=port=2222:proto=tcp:toport=22 # firewall-cmd --reload
Touch ID でログインする
ログイン先で sudo する時にも Touch ID での認証を要求する
Touch ID は ssh の鍵交換の一部に組み込まれているので、ssh-agent を使ってログイン先にも持ち込むことができます。
sudo
の認証時に ssh-agent を使えるようにするモジュールがあるので、インストールします。
# dnf -y install pam_ssh_agent_auth
sudo
の認証にssh-agent を使うように設定します。/etc/pam.d/sudo
に以下の行を追加します。
#%PAM-1.0 auth sufficient pam_ssh_agent_auth.so file=~/.ssh/authorized_keys auth include system-auth account include system-auth password include system-auth session optional pam_keyinit.so revoke session required pam_limits.so session include system-auth
この設定では、一番最初に ssh-agent を使って認証を試みます。ssh-agnet が使えない場合は、それ以外の方式にフォールバックします。
/etc/sudoers.d/user
を作成します。sudoer
の drop-in を作成する場合も、必ず visudo
を使って編集し、構文チェックを受けてください。
Defaults env_keep += "SSH_AUTH_SOCK"
ssh-agent の認証には、環境変数 SSH_AUTH_SOCK
が必要です。親プロセスから SSH_AUTH_SOCK
を引き継ぐする設定にします。
こちらはクライアント側です。ssh-agent の転送を有効にします。
~/.ssh/config
を編集します。
Host seinolab seinolab.jp Hostname seinolab.jp Port 5022 User seino IdentityAgent /Users/seino/Library/Containers/com.maxgoedjen.Secretive.SecretAgent/Data/socket.ssh ForwardAgent yes
これで、ssh ログイン時に Touch ID の認証を一回、sudo する時に、再度 Touch ID での認証を求められます。が、若干不安定で、ssh ログイン時は問題なくても、sudo の時に失敗することがあります。その時は諦めてやり直すか、パスワードを入力してください。
SSH Agent Hijacking(SSHエージェントハイジャッキング)を試す https://qiita.com/aki3061/items/99f1cce099c64d66861f