○ vsftpdのインストール

・FTPサーバの利用
・vsftpd-3.0.3をソースからインストールし、設定します
・listen=YES ipv4 standalone mode で設定しています

・ルータでNAT変換し、外部に公開する場合は"pasv_address"の設定が必要です
・または、ローカル側のFTPクライアントで"アクティブ転送モード"を使います
・動的グローバルIPの場合は、DDNSで名前解決し"xinetd"で起動する必要があります

・ソースの取得、削除は省略します
・エディタ、ファイラーの操作は省略します
・ソースを展開したら説明文を読みましょう
・Enterキーを省略します

・ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
・設定ファイルで "#" で始まる行はコメントとして解釈されます

○関連サイト

:vsftpd-3.0.3.tar.gz  (https://security.appspot.com/vsftpd.html)

○参照ファイル

パッケージの追加

○インストール環境

:OS CentOS 6.8
:selinux disabled or permissive
:インストール先  /etc /usr/local
:作業 ~/src
:言語 LANG=en_US.UTF-8
:ユーザー rootで実行

・メンテナンスの場合は一般ユーザから行います



○vsftpd-3.0.3

○vsftpdの停止・既存のファイルの保存

# cd /etc
[root@venus:/etc]
# cp init.d/vsftpd init.d/vsftpd-ORG
# cp vsftpd.ftpusers vsftpd.ftpusers-ORG
# cp vsftpd.user_list vsftpd.user_list-ORG
# service vsftpd stop
# rpm -e vsftpd

○展開・インストール

・man用のディレクトリを作成しておきます

# cd ~/src
[root@venus:~/src]
# tar zxvf vsftpd-3.0.3.tar.gz
# chown -R root:root vsftpd-3.0.3
# cd vsftpd-3.0.3
[root@venus:~/src/vsftpd-3.0.3]

・builddefs.h、Makefileを修正します (下記参照)

# vi builddefs.h
# vi Makefile

・コンパイル

# make

・インストール

# mkdir -p /usr/local/man/{man5,man8}
# make install

・pam用ファイル等をコピーします

# mkdir /etc/vsftpd
# cp vsftpd.conf /etc/vsftpd
# cp RedHat/vsftpd.log /etc/logrotate.d/vsftpd
# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd

# cd ..
[root@venus:~/src]
# tar jcvf vsftpd-3.0.3-160529.tar.bz2 vsftpd-3.0.3/

:builddefs.h

#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H

#define VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#define VSF_BUILD_SSL

#endif /* VSF_BUILDDEFS_H */

:Makefile

・省略

CFLAGS = -O2 -march=i686 -mtune=atom -fPIE -fstack-protector --param=ssp-buffer-size=4 \
    -Wall -W -Wshadow -Werror -Wformat-security \
    -D_FORTIFY_SOURCE=2 \

・省略


○anonymous接続用のディレクトリを作ります

・ftp接続時に、ftpユーザのホームディレクトリをcheckします
・その後に、anon_rootで設定したディレクトリに移動します
・パーミッションを(0755 root ftp) または (0555 ftp ftp) にします

・ftpのホームディレクトリがない場合、作成します

# cd ~
[root@venus:~]
# mkdir /var/ftp
# mkdir -p /home/ftp/pub
# chown -R root:ftp /home/ftp

○vsftpd.confの修正

:/etc/vsftpd/vsftpd.conf

・ローカルLANでの利用を想定しています

・asciiアップロード・ダウンロードを可能にします
・chrootを有効にします
・pamファイル名をvsftpdにします
・ログインユーザを制限します
・time表示を日本時間にします
・pasvポートはiptablesに合わせます
・uid・gidをネームベースに変更します
・xinetd起動の場合、listen=NOにします
・tcp_wrappersを利用します

default YES
default (none)
default NO
default NO
default 077
default NO
default NO
default NO
default NO
default NO
default NO
default root
default /var/log/xferlog
default NO
default 300
default 300
default nobody
default NO
default NO
default NO
default
default NO
default
default NO
default NO
default
default NO
default ftp
default NO
default /etc/vsftpd.user_list
default NO
default NO
default 0 (use any port)
default 0 (use any port)
default NO
default NO
default NO
anonymous_enable=YES
anon_root=/home/ftp/pub
local_enable=YES
write_enable=YES
local_umask=022
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
#connect_from_port_20=YES
#chown_uploads=YES
#chown_username=whoever
#xferlog_file=/var/log/vsftpd.log
#xferlog_std_format=YES
#idle_session_timeout=600
#data_connection_timeout=120
#nopriv_user=ftpsecure
#async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
#ftpd_banner=Welcome to blah FTP service.
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd.banned_emails
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
use_localtime=YES
text_userdb_names=YES
pasv_min_port=50000
pasv_max_port=50030
listen=YES
#listen_ipv6=YES
tcp_wrappers=YES

○chroot_list_fileの設定

:/etc/vsftpd/chroot_list (root root 600)

・chroot_local_userの設定により意味が変わります
・chroot_local_user=NO (デフォルト) の場合、chroot()jailに置き換えられるユーザ
・chroot_local_user=YESの場合、chroot()jailに置き換えられないユーザ

sola

○ftpusersファイルの作製

:/etc/ftpusers (root root 600)

参考ファイル

・pam認証のときに参照されます

○userlist_fileの作製

:/etc/vsftpd/user_list (root root 600)

参考ファイル

・uselist_enable=YESのときに有効
・userlist_deny=YES(デフォルト)ならば、このリストのユーザはログイン拒否
・userlist_deny=NOならば、このリストのユーザのみログイン

○/etc/hosts.allowで制御します

・ローカルからのみ接続を許可します

ALL: 127.0.0.1
vsftpd: 192.168.0.

○vsftpd自動起動スクリプト

/etc/init.d/vsftpd (詳細別記)

○selinuxヘの対応 (selinxが有効の場合)

:新規インストールファイルのselinuxラベルを修正

[root@venus:~]
# restorecon -Rv /etc
# restorecon -Rv /usr/local
# restorecon -Rv /var/log

○xinetdによるvsftpd起動の停止

・/etc/xinetd.d/vsftpdの修正

service ftp
{
        socket_type             = stream
        wait                    = no
        user                    = root
        server                  = /usr/local/sbin/vsftpd
#       server_args             =
#       log_on_success          += DURATION USERID
#       log_on_failure          += USERID
        nice                    = 10
        disable                 = yes
}

・xinetdの再起動

[root@venus:~]
# service xinetd restart

○vsftpdの起動

[root@venus:~]
# chkconfig --add vsftpd
# service vsftpd start

・起動の確認

# service vsftpd status

・vsftpd.confの既述に誤りがあると起動しません
・vsftpd.lockファイルを削除して、起動をやり直します


○vsftpdログのローテーション

xferlog_enable xferlog_std_format logfile
YES NO (default) /var/log/vsftpd.log
YES YES /var/log/xferlog

・/var/log/vsftpd.logはvsftpd_log_file設定で上書きされます

:/ete/logrotate.d/vsftpd

/var/log/vsftpd.log {
    # ftpd doesn't handle SIGHUP properly
    nocompress
    missingok
}



○参考ファイル

○ftpusers

# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

○vsftpd.user_list

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file,
# and do not even prompt for a password.
# Note that the default vsftpd pam config also checks
/etc/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

○local_port_rangeの調べ方

・ローカルの使用するportの範囲

# cat /proc/sys/net/ipv4/ip_local_port_range
32768    61000

○PASV接続の例

gftpのコネクションログの例では

PASV
227 Entering Passive Mode (134,160,38,1,206,165)

グローバルアドレス 134.160.38.1 port 52901 (256x206+165=52901) で接続しています


○ftp のレスポンスコード

response-code

○ Copyright(c) 528p.com All Rights Reserved.