Raspberry Pi上でWordPressを利用する際,WordPress自体の更新向けにFTPSを導入したのでその際のメモ.
目的
Raspberry Pi上にvsFTPdを導入し,FTPSサーバを構築する.なお,後述するが今回の環境では最新版を導入できていないので後日再試行するものとする.また,SSL証明書はLet’s Encrypt等で予め入手しているか,適当に作成したものが既に用意されているものとする.
- (序) “FTPS”と”SFTP”の差異
- vsFTPd のインストール
- FTPログインユーザの追加
- vsFTPd の環境設定
- vsFTPd の再起動及び確認
- FTPサーバヘのアクセス
0. (序) “FTPS”と”SFTP”の違い
混同されがちだが,今回はFTP規格に準ずる”FTPS”サーバの構築を目指す.対する”SFTP”は,SSH上で提供されるサーバ機能の一つであり,何れもファイル転送プロトコルであるものの,その性質は似て非なるものである.
FTPS – Wikipedia
FTPS (File Transfer Protocol over SSL/TLS) は、FTPで送受信するデータをTLSまたはSSLで暗号化する通信プロトコル。IETFにより、RFC 2228 や RFC 4217 で標準化されている。
SSH File Transfer Protocol – Wikipedia
SSH File Transfer Protocol(略称:SFTP)とは、SSHの仕組みを使用しコンピューター間でファイルを安全に転送するプロトコルである。sftpは、このプロトコルを利用するコマンドの名前である。
SFTPはSSH通信上でFTPを動かしているのではなく、SSH通信上にFTPとはまったく別のファイル転送の為のプロトコルを実装した物である。
OpenSSHには、sftpコマンドがサブシステムとして含まれる。
1. vsFTPd のインストール
下記コマンドを実行し,vsFTPd(very secure FTP daemon)のインストールを行う.
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install vsftpd
2. FTPログインユーザの追加
以下により,FTP用ログインユーザhogeを追加する.
$ sudo adduser --shell /usr/sbin/nologin hoge
ユーザ `hoge' を追加しています...
新しいグループ `hoge' (1015) を追加しています...
新しいユーザ `hoge' (1013) をグループ `hoge' として追加しています...
ホームディレクトリ `/home/hoge' を作成しています...
`/etc/skel' からファイルをコピーしています...
新しいUNIXパスワードを入力してください:
新しいUNIX パスワードを再入力してください:
passwd: パスワードは正しく更新されました
hoge のユーザ情報を変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
フルネーム []:
部屋番号 []:
職場電話番号 []:
自宅電話番号 []:
その他 []:
以上で正しいですか? [Y/n]
$
なお,ログインシェルを /usr/sbin/nologin に設定することで,FTP以外の用途ではログインできないユーザとなる.
また,ホームディレクトリを作成せず手順を進めた場合,何故かエラーが発生したため,ホームディレクトリの作成を念のため行なっている.
nologinをシェルとして認識させる
続いて,nologinをシェルとしてシステムに認識させる.筆者環境では,nologinがシェルとして認識されていなかったため,ログインに失敗するエラーが起きた.
$ sudo nano /etc/shells
以下, /etc/shells に追記する.
/usr/sbin/nologin
3. vsFTPd の環境設定
下記コマンドで設定ファイルの編集をする.
$ sudo nano /etc/vsftpd.conf
以下の項目を編集,あるいは追記する.
## 匿名ユーザのブロック
anonymous_enable=NO
## ローカルユーザ(サーバに存在するユーザ)のログインを許可
local_enable=YES
## コマンドによるファイルの書き込みを許可
write_enable=YES
## ASCIIモードでの通信を上下方向共に許可
ascii_upload_enable=YES
ascii_download_enable=YES
## ログイン後のリモートディレクトリを制限する
chroot_local_user=YES
## 制限の例外を許可する
chroot_list_enable=YES
## 例外ユーザを指定したファイルを読み込む
chroot_list_file=/etc/vsftpd.chroot_list
## タイムゾーンをローカルタイムに設定(タイムスタンプのズレ防止)
use_localtime=YES
## SSLの有効化
ssl_enable=YES
## SSL証明書/秘密鍵を指定
rsa_cert_file=/etc/foo/bar/hoge.pem
rsa_private_key_file=/etc/foo/bar/hogekey.pem
## 脆弱性のあるSSLプロトコルの拒否,明示的なTLSの使用
ssl_sslv2=NO
ssl_sslv3=NO
ssl_tlsv1=YES
## 如何なる場合でも明示的なSSL通信を強制
force_local_data_ssl=YES
force_local_logins_ssl=YES
## PASVモードの有効化.ポート番号はMIN〜MAXが用いられる
pasv_address=hogehogehostname
pasv_enable=YES
pasv_addr_resolve=YES
pasv_min_port=50021
pasv_max_port=50040
## クライアントでFilezillaを用いている場合は以下を追記
ssl_ciphers=HIGH
続いて, vsftpd.chroot_list を編集し,例外ユーザとして先ほど追加したユーザを設定する.
$ sudo nano /etc/vsftpd.chroot_list
hoge ##ユーザ名を追記するのみで良い
4. vsFTPd の再起動及び確認
以下のコマンドを実行し,vsFTPd の再起動と確認を行う.
$ sudo service vsftpd restart
$ sudo service vsftpd status
statusでnot runningと表示された場合
直接vsftpdのコマンドを叩くと,OOPSとか出てエラー箇所を教えてくれる.
5. FTPサーバヘのアクセス
適宜,FTPクライアントから立ち上げたサーバへアクセスする.この際,21番ポートの開放を忘れているとアクセスできない.また,証明書についての確認が出る事もあるが自前のサーバなので無視してOK.
後日,Filezillaの場合のSSを貼付する.