Posted at

SSHDを複数起動してSFTPとSSHを分けてみる

More than 3 years have passed since last update.


About

前から気になっていたので、試してみました。sshdでsubsystemの指定でsftpサーバ利用できますが、sshのポートが同じになってしまいます。sftpサーバは社外に公開しつつも、セキュリティを考えるとsshログインできるユーザを絞りたい。proftpd等を使えばsftp機能があるみたいなのですが、シンプルにやりたかったので試してみました。


環境


  • CentOS 7


ssh側

特別な設定は必要ありません。


sftp側


設定

もう1台sshdを起動するには、ポートやプロセスなどが重複しないように設定が必要です。


systemd用のファイル


/etc/systemd/system/sshd_sftp.service

[Unit]

Description=OpenSSH server daemon only sftp
After=syslog.target network.target auditd.service

[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D -f /etc/ssh/sshd_sftp
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target



設定ファイル

:/etc/ssh/sshd_sftp

Port 19321
Protocol 2
SyslogFacility AUTHPRIV

PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication no

GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

UsePAM yes

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS

X11Forwarding yes
PidFile /var/run/sftp.pid

# ssh/sftpを利用できるグループを制限。
AllowGroups sftp-user

UseDNS no
GSSAPIAuthentication no

Subsystem sftp internal-sftp -f local5 -l INFO
Match group sftp-user
PasswordAuthentication yes
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory /home/%u/chroot/

sftp-user グループに所属するはパスワード認証を許可しつつ、chrootを使って権限を閉じるようにしています。ここで重要なのが、AllowGroupsの設定です。sftp-userに所属するユーザのみがsshdサーバにアクセスできるため、22番ポートでSSHログインできるユーザもこちらのポートにはアクセスできないようにできます。


まとめ

強引なやり方ではありますが、やりたいことはできました。