サーバー構築

SFTPサーバーを構築する【OpenSSHで安全なファイル転送環境を作る】

サーバー構築
記事内に広告が含まれています。

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で接続ユーザーのアクセス範囲を制限できる
  • パスワード認証は導入が簡単だが、インターネット公開時は鍵認証への変更を強く推奨
  • 鍵認証にすることでブルートフォース攻撃を大幅に防げる

コメント

タイトルとURLをコピーしました