2026年9月22日

2026年9月22日

WordPressのFTPをSFTPに移行する方法

はじめに

FTPは通信が暗号化されないため、パスワードやファイルが盗聴されるリスクがあります。SFTPはSSHトンネルを使って暗号化転送を行うため、FTPからSFTPへの移行はWordPressサイトのセキュリティ向上に不可欠です。

症状・原因

  • FTPクライアントでファイルをアップロードしているが通信が暗号化されていない
  • FTPパスワードが漏洩してサイトを改ざんされた
  • WordPressの自動更新・プラグイン更新にFTP認証を求められる
  • レンタルサーバーでSFTPが使えるか確認していない

解決手順

ステップ1:SFTPが使えるか確認する

# サーバー側: SSH/SFTP が有効かどうかを確認
sudo sshd -T | grep -i "subsystem"
# Subsystem sftp /usr/lib/openssh/sftp-server が表示されれば SFTP 有効

# クライアントから SFTP 接続テスト
sftp user@server-hostname
# 接続できれば SFTP 使用可能

# FTP が動作しているか確認(停止候補)
sudo systemctl status vsftpd 2>/dev/null
sudo systemctl status proftpd 2>/dev/null

# FTP ポート(21番)が開いているか確認
sudo ss -tnlp | grep :21

ステップ2:サーバー側で SFTP を設定する

# sshd_config で SFTP サブシステムを確認・設定
sudo nano /etc/ssh/sshd_config
# /etc/ssh/sshd_config: SFTP 設定

# SFTP サブシステムを有効化(多くの場合デフォルトで有効)
Subsystem sftp /usr/lib/openssh/sftp-server

# WordPress 専用の SFTP ユーザーをchroot で制限する場合
Match User wp-sftp-user
    ChrootDirectory /var/www/html
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no
# SFTP 専用ユーザーを作成
sudo useradd -m -s /sbin/nologin wp-sftp-user
sudo passwd wp-sftp-user

# chroot ディレクトリのオーナーを root に設定(chroot 要件)
sudo chown root:root /var/www/html
sudo chmod 755 /var/www/html

# wp-content への書き込み権限を SFTP ユーザーに付与
sudo chown -R wp-sftp-user:www-data /var/www/html/wp-content
sudo chmod -R 775 /var/www/html/wp-content

# SSH を再起動
sudo systemctl restart sshd

ステップ3:FileZilla で SFTP 接続する

FileZilla で SFTP 接続する手順:
1. ファイル → サイトマネージャー を開く
2. 「新しいサイト」をクリック
3. 設定:
   プロトコル: SFTP - SSH File Transfer Protocol
   ホスト: server-hostname または IPアドレス
   ポート: 22(または sshd_config で指定したポート)
   ログオンタイプ: 通常
   ユーザー: wp-sftp-user
   パスワード: (設定したパスワード)
4. 「接続」をクリック
5. ホスト鍵の確認ダイアログ → 「OK」(初回のみ)

公開鍵認証を使う場合:
   ログオンタイプ: 鍵ファイル
   鍵ファイル: ~/.ssh/wordpress_key(秘密鍵のパス)

ステップ4:WordPress が SFTP を使うよう設定する

// wp-config.php: WordPress の更新・プラグインインストールに SFTP を使用

// FTP認証情報(wp-config.php に追加)
define('FTP_HOST', 'localhost');       // SFTP ホスト
define('FTP_USER', 'wp-sftp-user');    // SFTP ユーザー名
define('FTP_PASS', 'your-password');   // SFTP パスワード
define('FTP_PORT', 22);                // SFTP ポート(SSHポート)
define('FTP_SSL', false);              // SFTP は SSL ではなく SSH を使用

// SFTP を使う場合は FS_METHOD を ssh2 に設定
define('FS_METHOD', 'ssh2');

// SSH2 の公開鍵・秘密鍵を使う場合
define('FTP_PUBKEY',  '/home/wp-sftp-user/.ssh/id_rsa.pub');
define('FTP_PRIKEY',  '/home/wp-sftp-user/.ssh/id_rsa');
# PHP の SSH2 拡張をインストール(必要な場合)
sudo apt install php-ssh2 -y
sudo systemctl restart php8.2-fpm  # PHP バージョンに応じて変更

# または SFTP ではなく直接ファイルシステムへの書き込みを許可
# wp-content を www-data(Web サーバーユーザー)が書き込めるようにする
sudo chown -R www-data:www-data /var/www/html/wp-content
# この場合 wp-config.php に以下を追加
# define('FS_METHOD', 'direct');

ステップ5:FTP を無効化する

# vsftpd(FTP サーバー)を停止・無効化
sudo systemctl stop vsftpd
sudo systemctl disable vsftpd

# proftpd を停止・無効化
sudo systemctl stop proftpd
sudo systemctl disable proftpd

# FTP ポート(21番)をファイアウォールでブロック
sudo ufw deny 21/tcp
sudo ufw reload

# または iptables でブロック
sudo iptables -A INPUT -p tcp --dport 21 -j DROP
sudo iptables-save > /etc/iptables/rules.v4

# FTP が使われていないことを確認
sudo ss -tnlp | grep :21  # 何も表示されなければ OK

注意事項

  • FS_METHODをdirectに設定する場合、Webサーバープロセス(www-data)がwp-contentに書き込めるよう権限を設定してください。セキュリティと利便性のトレードオフがあります
  • chroot設定を使う場合、chrootディレクトリのオーナーは必ずrootにする必要があります。他のユーザーがオーナーだとSSHD起動時にエラーになります
  • レンタルサーバーではFTPがデフォルトで有効になっていることが多いです。コントロールパネルからFTPアカウントのパスワードを定期的に変更するか、SFTPのみを使用するようにしてください

まとめ

FTPからSFTPへの移行は①sshd_configでSubsystem sftp internal-sftpを確認・SFTP専用ユーザーをchrootで制限、②FileZillaの設定でプロトコルをSFTPに変更・ホスト鍵を確認して接続、③wp-config.phpにFS_METHOD = ssh2とFTP_HOST/FTP_USER/FTP_PASSを設定、④FTPサーバー(vsftpd/proftpd)をsystemctl disableで停止、⑤ufw deny 21/tcpでFTPポートをファイアウォールでブロックします。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲