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ポートをファイアウォールでブロックします。