raspberry pi で vsftpdを使おうとして困ったこと

#工事中

rasperry pi でftpをインストールし、母艦となっているwindows 7 とFTP 経由でファイルをやり取りしたい。

###インストール
`#apt-get install vsftpd`
設定前に一旦停止
`#sudo service vsftpd stop`

###config file を編集
困らないようにconfigファイルを保存
`#sudo cp /etc/vsftpd.conf /etc/vsftpd.conf-BAK`
編集
`#sudo vi /etc/vsftpd.conf`

http://park12.wakwak.com/~eslab/pcmemo/linux/vsftpd/vsftpd6.html
http://www.aconus.com/~oyaji/ftp/vsftpd_rpm.htm
http://www.nina.jp/server/redhat/vsftpd/vsftpd.conf.html
を参考にさせていただきました。

```ruby:vsftpd.conf
anonymous_enable=NO   #匿名ユーザのFTPログインを許可しない
local_enable=YES      #ローカルユーザ(例えば、pi)のログインが可能となる。　
write_enable=YES      #書き込み系のコマンド(STOR, DLE, RNFR, RNTO, MKD, APPE,
                      # SITE)を使えるようにする。
local_umask=022       #一般的な022とし、パーミションが755となるよう変更する。??
dirmessage_enable=YES #ディレクトリ毎にメッセージファイル(デフォルトのファイル名：
                      #.message) を置いておくと、そのディレクトリ一覧を表示すると
                      #きに当該メッセージをコマンドのレスポンスとして表示できる。
connect_from_port_20=YES #Activeモード時のデータコネクションポートを20番に固定
                      #するかどうかの設定
xferlog_enable=YES    #ファイルのアップロードとダウンロードをログファイルに記録する。
#xferlog_file=/var/log/vsftpd.log #指定したファイルに wu-ftpd スタイルでログ
                      #を記録する。
xferlog_std_format=NO #ログの取得形式.
                      # YES: xferlog (wu-ftpd互換) 形式.
                      # NO : vsftpd 形式.
vsftpd_log_file=/var/log/vsftpd.log # vsftpd 形式ログのファイル名を指定する
                      #(ディレクティブ追加)ディレクティブ無しでも下記ファイルが
                      #指定されているがファイル名を明示する.
idle_session_timeout=300     # 制御コネクションのタイムアウト値.　デフォルトは 600
#data_connection_timeout=120 #指定した時間、データを転送しなかった場合、切断する。
#nopriv_user=ftpsecure       #vsftpdが使用する非特権ユーザを指定する。
#async_abor_enable=YES #"async ABOR"コマンドを有効にする。
                       #ファイル転送のキャンセル時のハングアップを回避??
ascii_upload_enable=YES   # ASCII モードによるアップロードを許可する.
ascii_download_enable=YES # ASCII モードによるダウンロードを許可する.
#ftpd_banner=Welcome to blah FTP service.
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd.banned_emails
chroot_local_user=YES　#ユーザのルートディレクトリを制御 (chroot) する.　(ディレクティブ追加)
                       #ユーザのルートディレクトリを、そのホームディレクトリヘ変更する.
chroot_list_enable=YES #ただし、chroot_list_enable を YES としてリストアップ ユーザはその対象から除外する.
chroot_list_file=/etc/vsftpd.chroot_list
                       #除外対象ユーザは chroot_list_file で指定する.
                       #(default follows)
                       #chroot 制御の除外ユーザをリストアップしたファイル名を指定.
                       #編集しなくても有効だが、コメントアウト記号を外して明示する.
local_root=/home/pi    #ユーザのログイン ディレクトリを指定する
#ls_recurse_enable=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.user_list
listen=YES
tcp_wrappers=YES
use_localtime=YES      #ローカルタイムを使用する. (ディレクティブ追加)
force_dot_files=YES    #ファイル一覧要求の応答にドットファイルを含める. (ディレクティブ追加)
pasv_enable=YES        #Passive mode の使用を許可する. (ディレクティブなしでも有効だが、明示するため追加)
chmod_enable=YES       #パーミッション変更コマンドを許可する. (ディレクティブなしでも有効だが、明示するため追加)
```

この設定で、vsftpdをスタートする。
`#sudo service vsftpd start`

試しにvsftpdをリスタートしてみる。
`#sudo service vsftpd restart`

もしこの時、以下のようにエラーが表示されたとする。
`Stopping FTP server: vsftpd No /usr/sbin/vsftpd found running; none killed.`

ストップに失敗した、すなわちちゃんとスタートできていない。
この場合にはコマンドから直接 vsftpd を起動する
`#sudo vsftpd`

vsftpd は vsftpd.conf を読み込んで立ち上がろうとするが、もし vsftpd.confに間違いがあると、例えば以下のように表示してくれる。

> # vsftpd
> 500 OPOPS: unrecogised variable in config file:allow_writeable_chroot

***
Windows 7のコンソールからFTP でraspberry pi につないでみた。次のようなエラーが発生。

> ftp 192.168.xx.yy
ftp 192.168.xx.yy に接続しました。
500 OOPS: cannot read user list file:/etc/vsftpd.user_list
500 OOPS: priv_sock_get_cmd500 OOPS: child died
ユーザー ( 192.168.xx.yy:(none)): pi
接続がリモート ホストによって閉じられました。

/etc/vsftpd.user_listの利用することをconfで宣言したにも関わらず、ファイルを作りわすれていた。

`sudo vi /etc/vsftpd.user_list`
> myname

を記載した。けれどまだつながらない。

> ftp 192.168.xx.yy
ftp 192.168.xx.yy に接続しました。
200 (vsFTPd 2.3.5)
ユーザー ( 192.168.xx.yy:(none)): pi
530 Permission denied
ログインできませんでした。

vsftpd.user_listの記載をpiに変更

`sudo vi /etc/vsftpd.user_list`
> pi

でもまだつながりません。

ｃ
以下のコマンドを config に書き込んで試しましたが、エラーになってvsftpdは起動してくれません。ダメでした。

`allow_writeable_chroot=YES`
`allow_writable_chroot=YES`
`allow_writeable_root=YES`
`allow_writable_root=YES`

`# vsftpd
500 OPOPS: unrecogised variable in config file:allow_writeable_chroot`

あちこち見させていただいて、root のモードを変更
`chmod a-w /home/pi`

やっとつながりました。ところが今度は書き込めません。

> put readne.txt
200 PORT command successful, Consider using PASV
552 Could not create file.

WindowsのFTPクライアントはPASVモードに対応していない ...
http://iamapen.hatenablog.com/entry/2014/09/12/201331

ということで、FFFTP を使ったところ読み書きができるようになりました。