SFTPはSSHを利用した安全なファイル転送プロトコルです。この記事ではOpenSSHを使ったSFTPサーバーの設定方法を解説します。
SFTPとは?
SFTP(SSH File Transfer Protocol)はSSH上でファイルを転送するプロトコルです。FTPと違い通信が暗号化されているため、インターネット越しのファイル転送に安全に使えます。OpenSSHが入っていれば追加インストール不要です。
SFTP専用ユーザーの作成
sudo useradd -m -s /sbin/nologin sftpuser
sudo passwd sftpuser
sudo mkdir -p /home/sftpuser/uploads
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
sudo chown sftpuser:sftpuser /home/sftpuser/uploads
ChrootDirectoryを使う場合、そのディレクトリのオーナーはroot、パーミッションは755である必要があります。
SSHDの設定
sudo nano /etc/ssh/sshd_config
末尾に以下を追加します。
Match User sftpuser
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /home/sftpuser
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
sudo systemctl restart sshd
セキュリティ強化:鍵認証への変更(インターネット公開時推奨)
上記のPasswordAuthentication yesはパスワード認証を許可しており、導入が簡単な反面、ブルートフォース攻撃を受けるリスクがあります。インターネットに公開する場合は鍵認証に変更することを強く推奨します。
まず公開鍵を登録します。
sudo mkdir -p /home/sftpuser/.ssh
sudo nano /home/sftpuser/.ssh/authorized_keys
# クライアントの公開鍵(ssh-keygen で生成したid_rsa.pubの内容)を貼り付ける
sudo chown -R root:root /home/sftpuser/.ssh
sudo chmod 700 /home/sftpuser/.ssh
sudo chmod 600 /home/sftpuser/.ssh/authorized_keys
次にsshd_configを鍵認証専用に変更します。
Match User sftpuser
ForceCommand internal-sftp
PasswordAuthentication no
PubkeyAuthentication yes
ChrootDirectory /home/sftpuser
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
sudo systemctl restart sshd
クライアントから接続する
# パスワード認証の場合
sftp sftpuser@サーバーIPアドレス
# 鍵認証の場合
sftp -i ~/.ssh/id_rsa sftpuser@サーバーIPアドレス
まとめ
- SFTPはSSH上で動作する安全なファイル転送プロトコル
- OpenSSHが入っていれば追加インストール不要
- ChrootDirectoryで接続ユーザーのアクセス範囲を制限できる
- パスワード認証は導入が簡単だが、インターネット公開時は鍵認証への変更を強く推奨
- 鍵認証にすることでブルートフォース攻撃を大幅に防げる



コメント