参考URL:http://centossrv.com/vsftpd.shtml 修正:2014ー07ー27 vsftpdインストール # yum -y install vsftpd vsftpd設定 # gedit /etc/vsftpd/vsftpd.confanonymous_enable=NO ← noに変更
xferlog_file=/var/log/vsftpd.log ← #を取り、右辺の変更
xferlog_std_format=NO ← noに変更
ascii_upload_enable=YES ← コメントを外す
ascii_download_enable=YES ← コメントを外す
ftpd_banner=Welcome to blah FTP service. ← コメントを外す
chroot_local_user=YES ← コメントを外す
chroot_list_enable=NO ← コメントを外し、右辺を変更
chroot_list_file=/etc/vsftpd/chroot_list ← コメントを外す
userlist_deny=NO ← 追記
ls_recurse_enable=YES ← コメントを外す
以下を最下行へ追加
use_localtime=YES
port_promiscuous=YES
pasv_addr_resolve=NO
pasv_address=192.168.xx.xx ← 自分のIPアドレス
pasv_min_port=60000 ← PASVモード接続時の最小ポート番号
pasv_max_port=60030 ← PASVモード接続時の最大ポート番号
ssl_enable=YES ← SSLの有効化
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem ← サーバー証明書を指定
force_local_logins_ssl=YES ← ログイン時にSSL接続を強制
force_local_data_ssl=YES ← データ転送時にSSL接続を強制
上記は変更箇所のみリストアップ port_promiscuous=YESから3行は参考にしたhttp://centossrv.com/vsftpd.shtml とは少し違う。オリジナルではFTPのIPアドレスが牽けるDNSのホスト名を設定するようになっているが、これだとテストをする時に問題がでた。と言うのはテストはLAN内のホストから行ったが、FTPサーバーが他に動いていたので、ルーターの設定は動いているFTPサーバーのIPにフォワードしている。当然DNSが返して来るIPはグローバルIPなのでルーターに着てもテスト中のFTPサーバーでは無く、動いている現行のFTPサーバーに行ってしまう。上記の設定のようにすれば同じ状態も問題ない。 ホームディレクトリより上層へのアクセスを許可しないユーザの登録 # echo ホームしかアクセスさせないユーザー名 >> /etc/vsftpd/chroot_list ホームディレクトリより上層へのアクセスができないユーザのタイムスタンプを日本時間にする 新規ユーザ対処 # mkdir /etc/skel/etc # cp /etc/localtime /etc/skel/etc/ 既存ユーザ対処 # gedit localtimset
#!/bin/bash
for user in `ls /home`
do
id $user > /dev/null 2>&1
if [ $? -eq 0 ]; then
grep $user /etc/vsftpd/chroot_list > /dev/null 2>&1
if [ $? -ne 0 ] && [ ! -f /home/$user/etc/localtime ]; then
mkdir -p /home/$user/etc
cp /etc/localtime /home/$user/etc
echo $user
fi
fi
done
localtimeセットアップスクリプト実行 # sh localtimset localtimeセットアップスクリプト削除 # rm -f localtimset FTPサーバーへのアクセスを禁止するユーザの登録 # echo 禁止するユーザー名 >> /etc/vsftpd/ftpusers サーバー証明書作成 # cd /etc/pki/tls/certs/ # make vsftpd.pem
前略
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Ota-ku
Organization Name (eg, company) [Default Company Ltd]:kinryokai.net
Organizational Unit Name (eg, section) []:空Enter
Common Name (eg, your name or your server's hostname) []:ftp.kinryokai.net
Email Address []:root@kinryokai.net
ホームディレクトリへ戻る # cd vsftpd起動 # service vsftpd start # chkconfig vsftpd on FTPで使うportを開ける(tcp21, パッシブ用 tcp 60000:60030,このポートは”サーバー制作 : 8:ファイアウォール構築(iptables)”で設定している) /root/iptables.sh の設定と外部から受け付けるため、マイグレーション時にルーターのポートもこのホストにフォワードする アクセス制限は外部からこのWEBにFTPでアップする必要がある複数のユーザーがおり、特定するのが難しいためアクセス制限は行っていません。 ************* このFTPに接続するクライアントの設定 テストの為にこのサブホストの親ホスト(同じCenOS)にFTPクライアントをインストールします。 # yum -y install filezilla ←この時EPELのレポジトリーを有効にしておく必要があります。 これでアプリケーション→インターネット→FileZilla が出来ていますので、クリックし、ファイル→サイトマネージャーをクリックしますと図の様にサイトマネージャーが開きますので、赤線の所を設定していきます。今は実験段階なのでホスト名にはIP(一部伏せてあり)を設定しています。一般以外のタブはデフォルトでもOKでしたが、転送設定タブの転送モードはパッシブにしておいた方がいいかも。 ************* ここからはvsftpを入れたサーバーの設定 実は私自身頭がスパゲッティーになった部分があり、一つ目は暗号化の問題。FileZillaの設定で sftpはSSHを使いFTPにアクセス、だからSSHにアクセス出来るユーザーのみ可能、(OSへのログインを許可しなければならないと思う) fptで"明示的なFTP over TLSが必要"はFTPでTLSを使い(この設定を使用)ftpポートの21にアクセスする。(OSへのログインを不許可でも可) ftpで"暗黙のFTP over TLSが必要"はFTPでTLSを使い、ftpポートの990にアクセスすると思う。(OSへのログインを不許可でも可) これらはFileZillaのポートの設定をブランクにした場合。 次はlogの関連 http://www.nina.jp/server/redhat/vsftpd/vsftpd.conf.htmlのvsftpd の設定(ログ)にわかりやすい表がありますので見ておいて下さい。 次ににユーザーのリスト関係を整理しておきます。 1:/etc/vsftpd/ftpusers に設定してあるユーザーはFTPサーバーの設定に関わらずアクセスが認められない 2:設定に userlist_deny=NO なら、設定してあるユーザーはアクセスが認められるユーザー 3:設定に userlist_deny=YES なら、設定してあるユーザーはアクセスが認められないユーザー但し、ftpusersに設定すればいいので、これは意味が無いと思う。 上記の設定を施せばデフォルトの設定にある”local_enable=YES”はNOにしてもいいのかもと思い、やってみると見事にエラー
レスポンス: 500 OOPS: vsftpd: both local and anonymous access disabled!
次はchrootの関係 http://www.aconus.com/~oyaji/ftp/vsftpd_rpm.htmの11。アクセスディレクトリの制限 ( chroot )に見やすい表がありますので参考にして下さい。私の設定は上記ですがこの設定ですと chroot_list に記入するユーザーはホームページ以下にしかアクセスできなくなり、そのホームページをアクセスを許すWEB内のdirectoryにしておけばよい。 FTPサーバーだけにアクセス可能なユーザーの作成は -d でアクセスさせるWEBのdirectory -s /sbin/nologin でシステムへのログインを許可しない。 例:useradd -d /path/to/web/directory -s /sbin/nologin ユーザー名 で作成後 passwd ユーザー名でパスワードを設定する 最後に少し問題があります。その問題とは 1:このテストしているFTPサーバーとは物理的に別ですが同じLAN内のCentOS6.5(KVMを使った親ホスト)からは問題なく、又同じLAN内にあるwindows7からも、外部からアクセスした(ルーター越え、もちろんこの時のルーターの設定はこのテストサーバーにフォワードしています)Windows7も問題ありませんが、 2:アクセスできたKVM下のサブホストやこのFTPサーバーの親ホストであるKVM(CentOS6.5)からはエラーが出て接続できません。これは暗号化を外せばアクセス出来るので、LAN内でもあり、これらのホストは暗号化をしていません。(force_local_logins_ssl= と force_local_data_ssl= はNOにします)そのエラーは11:06:29 状態: TLS を初期化しています...
11:06:29 エラー: GnuTLS error -50 in gnutls_priority_set_direct: The request is invalid.
11:06:29 エラー: TLS の初期化に失敗しました.
11:06:29 エラー: サーバに接続できませんでした。
正常につながるときはTLSの初期化後は状態: 証明書を検証中になります。アンインストールしたり色々やりましたが出来ませんでした。 つながっているホストもあるので、FTPサーバーの問題では無く、クライアントの方だと思うのですが、どこをいじればいいのかさっぱり?もちろんftpクライアントのバージョンはwindows7は3.8.1 CentOSは全て3.7.3で同じです。google先生に聞いたら、ここにあったが、パッチを入れるといいとあるが、ソースからやらないといけないのでやめた。あと他のWEBでssl_cipher=HIGHと入れるとよいとありましたが、私の場合は入れても出来ませんでした。 2014-08-04追記:このエラーはGnuTLSの問題だと思います。そこでGnuTLSのバージョンを調べると OKなホスト:gnutls.x86_64 2.8.5-10.el6_4.2 ダメなホスト:gnutls.x86_64 2.8.5-14.el6_5 でした。OKなホストはCentOSの6.4でGnuTLSのバージョンは2.8.5-10だった。この辺が問題みたいだが、gnutlsの2.8.5-10のありかが分からない。ちなみにVSFTPDが動いているホストの分はダメなホストと同じ2.8.5-14.el6_5です 又、FTP用のバーチャルユーザーを作る方法もありますが、一部のユーザーでエラーが出て、うまくいきませんでした。エラーは状態: TLS/SSL 接続が確立されました.
レスポンス: 331 Please specify the password.
コマンド: PASS *********
エラー: GnuTLS error -8: A record packet with illegal version was received.
接続が出来るがパスワードでパケットがイリーガルバージョンだとはねられている。他のユーザーは問題ないし、パスワードも何回見ても間違っていないし、もし違って入れば、エラーメッセージが違うと思う。google先生に聞いてもGnuTLS error -8は出て来ない。 2014-07-28追記: 今まではスタンドアローンでvsftpを走らせていましたが、FTPでデーターが転送されるのはそんなに多くないので、xinetd 経由でRQがあってからvsftpを走らすようにします。 CentOSではデフォルトでxinetdはインストールされ無いのでyumからインストールして下さい。私はサーバー制作 : 14:VNCサーバーの設定でインストール済みです。まずはvsftpdを止め、xinetdの設定ファイルを作ります。 # service vsftpd stop # chkconfig vsftpd off # gedit /etc/xinetd.d/vsftpd
service ftp {
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
server_args = /etc/vsftpd/vsftpd.conf
nice = 10
disable = no
flags = IPv4
}
CentOSの場合は /etc/services にftp-data 20/tcp
ftp-data 20/udp
# 21 is registered to ftp, but also used by fsp
ftp 21/tcp
ftp 21/udp fsp fspd
と設定済みなので上記の設定ファイルだけでOKです。 設定を変えたのでxinetdを再起動 # service xinetd restart これでFTPクライアントからやるとエラー状態: 接続を確立しました, ウェルカム メッセージを待っています...
エラー: サーバによって接続が閉じられました
そうだ、vsftpd.confを変更するのを忘れてた。 これでつながった。
|