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ログインできるユーザもこちらのポートにはアクセスできないようにできます。
まとめ
強引なやり方ではありますが、やりたいことはできました。