#工事中
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
を参考にさせていただきました。
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
でもまだつながりません。
c
以下のコマンドを 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 を使ったところ読み書きができるようになりました。