RaspberryPi FTP接続

ラブパイにファイルを転送するのに、ftpサーバを立てて、接続する方法を記載する。

まず、ラズパイへのftpサーバのインストール

–Vsftpdインストール
$ sudo apt-get update
$ sudo apt-get install vsftpd

–vsftpd.conf の編集、とりあえず書き程度を修正すれば接続できるようになる。

—- 変更箇所
anonymous_enable=NO #匿名ユーザー(anonymous)のログイン禁止

local_enable=YES #ローカルユーザーを許可

write_enable=YES #書き込み許可

local_umask=022 #ファイル作成時のパーミッション755

サービスのスタート
service vsftpd start ※stop restart で停止、リスタート

これで接続しようとしたが接続できない。調べるとラズバイのルートでは接続できないようだ。ということでユーザーを追加

$ sudo useradd User_name
$ sudo passwd User_name
Enter new UNIX password:
Retype new UNIX password:

このユーザーでLinuxBean fileZillaで接続できた。

LINUX lftpによるミラーリング

同期やミラーリングをやってみよと考えたが、相手側がftp接続しか準備していないので、調べたが、lftpが良さそうだ。

スクリプトで下記のようにすれば、ミラーリングを可能にする。

#!/bin/sh

USER=’****’
PASSWORD=’****’
HOSTNAME=’****’

lftp <

LINUX FTPの自動化転送

下記のスクリプトで、実行すれば、設定したディレクトリに転送したいファイルが転送される。実際に実験したが、コマンドからやると一瞬で作業が完了して、処理しているか不安になるくらいだ。

ftp [-ginv] [host]

-g 正規表現によるファイル名展開を無効にする
-i 複数のファイルの転送中に,プロンプトを出力しない
-n .netrcを使用した自動ログインを行わない
-v リモート・サーバーから送られたすべての情報を表示する
host 接続するリモート・ホストを指定する

#!/bin/sh
HOST_NAME=”ホスト名またはIPアドレス”
USER_NAME=”ftpユーザー名”
PASSWORD=”パスワード”
LOCAL_DIR=”ローカル側の作業ディレクトリ”
GET_DIR=”ftp先の作業ディレクトリ”
FILE_NAME=”getするファイル名”

ftp -n ${HOST_NAME} << _EOF_ user ${USER_NAME} ${PASSWORD} bin lcd ${LOCAL_DIR} cd ${GET_DIR} get ${FILE_NAME} bye _EOF_

PASSIVE FTP

Windows10プロフェッショナルを使っているが、DOSプロンプトで使用するFTPクライアントは、パッシブモードが使えないらしい。時間をかけて調査してみたが、結局は、海外の有料ソフトを使う事にした。まったく同じように使えるようだ。

http://passive-ftp.com/

なぜ、DOSで動くFTPを探していたかというと、あるサーバーにFTP接続して、特定のファイルをこちら側のサーバーに持ってくるためである。それを自動化させたかったので、このような調べ物をやっていた。

後ほどスクリプトなども記載するが、ちょっと理解できないくらいのもの。結局WindowsのDOS上で動くようなバッチファイルにするしかないのだが、今の時代でバッチファイルを使うのかとおもうと寂しい。GUIで全てできればいいのに。

SQLサーバーも無料版じゃなく有料なら、FTP接続マネージャーなるものがあるようだが、とにかく高い。なので、時間をかけて無料で対応するしかない。

vsftpd、FTPでフォルダ内が見えない場合

httpdサーバーを立ててFTPにてアクセスしたが、/var/www/htmlまでたどりつけない。つまり、見えないのでおかしいって感じで先に進めずにいた。

いろいろと調べてみるとセキュリティの問題で、SElinuxが制限をかけているらしいという事にたどり着いた。

SELinuxとは、簡単に言えば、セキュリティを強化する為にアクセスの制御をしているモジュールらしい。今一つ分からない。

でも、htmlファイルを転送できないのは辛い。ということで、解除?することでアクセスできるようにする方法である。

★SELinuxの設定変更

変更するのは「allow_ftpd_full_access」で、apacheでwebサーバーを構築した際、デフォルトのドキュメントルートになっている「/var/www/html」へアクセス可能にするためのポリシーです。

このポリシーの変更を行わないと、ftpクライアントから「/var」以下のディレクトリが、一切閲覧できない状態(ファイルやディレクトリが全く見えない状態)に陥ってしまいます。

# getsebool allow_ftpd_full_access
allow_ftpd_full_access –> off
# setsebool -P allow_ftpd_full_access 1
# getsebool allow_ftpd_full_access
allow_ftpd_full_access –> on
上記のようになっていれば成功です。

なお、「setsebool -P allow_ftpd_full_access 1」を実行した際に少し時間がかかる。

SELinux変更箇所の補足
もし、FTPからユーザーのホームディレクトリ内の変更を行いたい。と言う場合は「ftp_home_dir」のポリシーも変更する必要がある。

先ほどと同じ手順で以下のように変更、および確認を行う。

# getsebool ftp_home_dir
ftp_home_dir –> off
# setsebool -P ftp_home_dir 1
# getsebool ftp_home_dir
ftp_home_dir –> on
vsftpdの起動とドキュメントルートのアクセス権の変更

以上で、基本的な準備は完了です。最後にvsftpdの起動と動作確認を行う。

# service vsftpd start
Starting vsftpd for vsftpd: [OK]
[OK]が表示されれば成功です。

★必要に応じてapacheのドキュメントルートのアクセス権を変更。

ドキュメントルートは「/var/www/html」。

# chmod 777 -R /var/www/html
これで、htmlの直下の読み書きは自由にできる。

FTPサーバー(vsftpd)の設定

CentOS7でFTPの設定をしました。

●vsftpdインストール
# yum -y install vsftpd

●vsftpd設定
# vi /etc/vsftpd/vsftpd.conf

この設定がメンドクサイです。

1.匿名ユーザアクセス禁止
anonymous_enable=NO

2.アスキーモードアップロード・ダウンロード許可
ascii_upload_enables=YES
ascii_download_enables=YES

3.ホームディレクトリより上層へのアクセスを禁止(chroot_list記載者以外)
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

4.chrootを有効にするとホームディレクトリが書き込み権限のあるディレクトリ(/var/www/html等)のユーザがログイン出来なくなるので、ログイン出来るようにする
allow_writeable_chroot=YES

5.ディレクトリごと削除出来るようにする
ls_recurse_enable=YES

6.タイムスタンプを日本時間にする
use_localtime=YES

7.ログイン出来るユーザをuser_listで指定する
userlist_enable=YES
userlist_deny=NO

●ログインを許可するユーザ(vic)を登録
# vi /etc/vsftpd/user_list
vic

●ログインを許可しないユーザを登録
# vi /etc/vsftpd/ftpusers
許可しないユーザ名を記述

●ホームディレクトリから上層に移動出来るユーザを登録(必要な場合のみ)
# vi /etc/vsftpd/chroot_list
許可するユーザ名

●FTP接続出来る接続元をLAN内に制限(セキュリティの為必須)
# vi /etc/hosts.deny
vsftpd:all
# vi /etc/hosts.allow
vsftpd:127.0.0 192.168.1.

※外部から接続するときは接続を許可するIPアドレスを指定
# vi /etc/hosts.allow
vsftpd:127.0.0 192.168.1. 接続元のIPアドレス

●vsftpd起動
# systemctl start vsftpd

●vsftpd自動起動設定
# systemctl enable vsftpd

ftpサーバなどへのログインアカウント・パスワードは、そのサーバに作られたユーザアカウントと同じものです。

ユーザアカウントhogeを作成する時は、
# useradd hoge <ENTER>

ユーザアカウントhogeにパスワードを与える時は
# passwd hoge <ENTER>

とします。
ftp(vsftpd)にログインする時も、そのアカウント・パスワードを利用します。

 

fftpで接続試すも、500エラー、530エラー、PASVモードのチェックを外したら接続できるようになった。

 

パッシブモードってのは、クライアントからサーバーに20ポートで通信し要求あったら、別のランダムポートで転送するらしい。ファイヤーウォールが掛かっているとはじかれますね。