以前WordPressをインストールしたのですが、FTPを設定していなかったのでWordPressのアップデートやファイルのアップロードがブラウザ上からできませんでした。
ブラウザ上からのアップデートやアップロードにはWordPressにはFTPポートを使用しているのですが、FTPポートの設定をしていませんでした。
そこで今回はWordPress用にFTPの設定をしていこうとおもいます。
FTPデーモンのvsftpdのインストールと設定
環境はDebian系のUbuntuになります。
まずFTPサーバー用のデーモンソフトであるvsftpdをインストールしていきます。
sudo apt install vsftpd
次にvsftpdの設定をしていきます。
以下のコマンドで設定ファイルを編集していきます。
sudo nano /etc/vsftpd.conf
変える設定は以下になります。
コメントアウトをするか、なければ行を追加して設定します。
ascii_upload_enable=YES ascii_download_enable=YES write_enable=YES chroot_local_user=YES chroot_list_enable=YES # (default follows) chroot_list_file=/etc/vsftpd/vsftpd.chroot_list ls_recurse_enable=YES local_umask=022 ssl_enable=YES allow_writeable_chroot=YES userlist_enable=YES userlist_deny=NO userlist_file=/etc/vsftpd/user_list local_root=/var/www/html
上記で設定したchroot listやuserlistのファイルを保存する /etc/vsftpd のディレクトリはデフォルトではないので作成します。(/etc/に全部置くと見ずらいので)
mkdir /etc/vsftpd
空ファイルを作成してローカルルート以上にどのユーザーもアクセスできないように制限します。
(nanoで新規作成して何も記述せずにそのまま保存終了します。)
nano /etc/vsftpd/vsftpd.chroot_list
次にFTP専用のユーザーを作成を作成します。
他の用途で使っているユーザーでFTP接続にも使うのはセキュリティ上良くないので。
ここでは便宜的にusernameというユーザーを作ります。
adduser username
次にFTP許可ユーザーリストファイルを作成して指定ユーザーのみFTPを使えるように制限します。
このファイルに先ほど作成したユーザー名を追記します。
nano /etc/vsftpd/userlist
そして設定を反映させるためにFTPを再起動します。
sudo systemctl restart vsftpd
iptablesによるFTPポートの解放
次にiptablesでFTPポートである21番ポートを解放します。
sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
設定を反映させるためにiptablesを再起動します。
sudo systemctl iptables
これでFTP接続できるようになりました。
WordPress側でのFTP設定
これでWordpressのアップデート等を行おうと思ったところ、
「wo-contentが見つかりません。」
というエラーが表示されてしまいました。
これはFTPでroot位置より上位層が表示されないように設定したためにPathがおかしくなってしまったからです。
そこでwp-config.phpを以下のドキュメントを参考に編集し、FTPの設定を行います。
https://ja.wordpress.org/support/article/editing-wp-config-php/
// ** FTP settings **// define( 'FS_METHOD', 'direct' ); // 私はこの設定でないとWordPressのアップデート等行えませんでした。 define( 'FTP_BASE', './' ); // vsftpdの設定でWordPressのフォルダをrootに指定したのでBASEパスはルートになります。 define( 'FTP_CONTENT_DIR', '/wp-content/' ); define( 'FTP_PLUGIN_DIR ', '/wp-content/plugins/' ); define( 'FTP_USER', 'username ); //ここで先ほど作成したFTP用のユーザー指定します。 define( 'FTP_HOST', 'localhost' ); //phpでサーバー側でリクエストが送られるのでHostはlocalhostで大丈夫です。 define( 'FTP_SSL', true ); //セキュリティ的にSSL有効化しているので設定します。
これでパスの設定は完了しました。
ファイルのアクセス権限設定
しかし今度は「ディレクトリが作成できません。」とのエラー表示が出てきてしまいました。
FTPで直接フォルダを作成することができたのでFTPの話ではないようです。
調べてみるとApacheが使用しているユーザーに権限がなく、ディレクトリ作成等ができていなかったようです。
そこでまずApacheで使用しているユーザーを確認します。
Apacheのユーザーはenvvarsに記述があるので確認します。
cat /etc/apache2/evnvars
以下のようにwww-dataというユーザー名とグループ名で定義されていました。
export APACHE_RUN_USER=www-data export APACHE_RUN_GROUP=www-data
なのでwordpressのインストール先の所有者をwww-dataにするかアクセス権を全ユーザーにすることで解決できます。
所有者をwww-dataにする場合は
sudo chown -R www-data:www-data WordPressのインストールディレクトリ
アクセス権を全ユーザーにする場合は
sudo chmod -R 777 WordPressのインストールディレクトリ
となります。
FTPは基本的にはwp-contentのディレクトリでしか使われなさそうなので、FTP用に作成したユーザーの権限をwp-contentに与えれば問題ありません。
このあたりの権限設定はサーバーの共有状況等に応じて設定すればいいと思います。
これで設定が完了し、メディアのアップロード、WordPressバージョンのアップデート、プラグインのインストール等ができるようになりました。