vsFTPD编译安装使用实用手册

实验环境:系统 CENTOS5.5,用户 root,软件 vsftpd-2.3.4
实验以自行编安装为基础,与通过yum方式安装存在一些差异。

lykyl原创,转载请注明出处)


一、编译安装
1、获取并解压缩源码
wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.3.4.tar.gz /usr/local/src/
tar -xvzf /usr/local/src/vsftpd-2.3.4.tar.gz

2、系统环境设置
添加vsftpd的服务启动用户,只给最低权限且不允许登录系统
useradd -g nobody -M -s /sbin/nologin nobody
添加基本空目录,用于FTP用户登录后基本定位
mkdir /usr/share/empty

建立FTP的默认目录
mkdir /var/ftp/
添加FTP用户的映射本机帐号,强制设定home目录为/var/ftp,不允许登录系统
useradd -d /var/ftp -s /sbin/nologin ftp
设定家目录所有者以及默认权限
chown root:root /var/ftp
chmod go-w /var/ftp

3、编译设置是否支持TCP WRAPPERS和SSL
vi /usr/local/src/vsftp-d.2.3.4/builddefs.h
/*默认值如下:*/
#undef VSF_BUILD_TCPWRAPPERS  /*是否支持TCP WRAPPERS*/
#define VSF_BUILD_PAM  /*是否支持自定义虚拟用户登录*/
#undef VSF_BUILD_SSL  /*是否支持SSL传输*/
/*支持则将对应项设为define,否则设为undef,建议全部define*/

4、编译部署
cd /usr/local/src/vsftp-d.2.3.4
make
make install
运行后,系统会尝试进行以下操作:
cp vsftpd /usr/local/sbin/vsftpd
cp vsftpd.conf.5 /usr/local/man/man5
cp vsftpd.8 /usr/local/man/man8
如果运行中有cp报错,可以手动将这些文件cp到对应目录。
需要注意的是,系统不会自动将vsftp.conf文件cp到/etc目录,需要手动cp或直接vi生成。

二、虚拟用户访问设置
1、建立虚拟用户(这里只介绍针对Berkeley DB建立虚拟用户的方法)
A、安装DB4组合工具(Berkeley DB)
yum install db4-utils

B、建立虚拟用户名文本文件/tmp/logins.txt
格式为奇数行是用户名,偶数行是对应密码,形式如下:
username1
password1
username2
password2

C、建立虚拟用户库文件
db_load –T –t hash –f /tmp/logins.txt /etc/vsftpd_login.db
rm -f /tmp/logins.txt
chmod 600 /etc/vsftpd_login.db

D、在/var/ftp/目录下为每个虚拟用户建立FTP默认根目录。目录名与用户同名,并改变所有者为ftp,设置权限为700(此项不是必须要做,根据用户自定义设置中local_root值而定)
mkdir /var/ftp/<username>
chown ftp:ftp /var/ftp/<username>
chmod 700 /var/ftp/<username>

E、获取数据库中用户信息至文本文件
db_dump -da /etc/vsftpd_login.db | grep " data" |sed 's/^.*data: //g' >/tmp/logins.txt
*注意命令中的空格

三、vsftpd设置
1、编辑 /etc/vsftpd.conf
ftpd_banner=CentOS.Test1 FTP
connect_from_port_20=YES
listen=YES
background=YES
max_clients=20
max_login_fails=3
max_per_ip=3
pasv_min_port=50000
pasv_max_port=54500
#local_max_rate=200000    #视具体情况决定是否限速
idle_session_timeout=700
data_connection_timeout=200
tcp_wrappers=YES
#-------------------------------------
guest_enable=YES
guest_username=ftp
local_enable=YES
chroot_local_user=YES
user_sub_token=$USER
#virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf.d
check_shell=NO
write_enable=NO
anonymous_enable=NO
anon_upload_enable=NO
anon_world_readable_only=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
dirlist_enable=NO
write_enable=NO
download_enable=NO
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd_allow_users
#-------------------------------------
use_localtime=YES
chown_uploads=YES
chown_username=ftp
dirmessage_enable=YES
pam_service_name=vsftp
anon_umask=027
local_umask=027
#-------------------------------------
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
#-------------------------------------
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/usr/share/ssl/certs/vsftpd.pem

2、生成SSL证书

openssl req -new -x509 -nodes -out /usr/share/ssl/certs/vsftpd.pem -keyout /usr/share/ssl/certs/vsftpd.pem

3、配置iptables
iptables -A INPUT -i eth0 -p tcp --dport 20:21 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 50000:54500 -j ACCEPT

4、添加允许访问FTP的用户
编辑/etc/vsftpd_allow_users,添加允许访问FTP的用户名,每行一个。注意,如果设定为虚拟用户及本地用户都可以访问,则允许混合添加这两类用户名,只是要注意,不能重名。

四、vsftpd的pam模块
1、虚拟用户认证
vi /etc/pam.d/vsftp
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

2、虚拟用户及本地用户认证
vi /etc/pam.d/vsftp
auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd_login
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd_login
auth required /lib/security/pam_listfile.so item=user sense=allow file=/etc/vsftpd_allow_users onerr=fail
auth required /lib/security/pam_unix.so shadow nullok
auth required /lib/security/pam_shells.so
account required /lib/security/pam_unix.so
session required /lib/security/pam_unix.so

五、用户个性化设置
在/etc/vsftpd_user_conf.d目录下建立与用户同名的文件,在其中设置每个帐号的具体权限。以下仅列出有代表性的几个权限设置,更具体的设置请参考VSFTPD.CONF说明以及FTP协议常用命令
1、所有权限
local_root=/var/ftp/$USER
write_enable=YES
dirlist_enable=YES
download_enable=YES
virtual_user_local_Privs=YES
cmds_allowed=ABOR,ACCT,ALLO,APPE,CDUP,CWD,DELE,HELP,LIST,MDTM,MODE,MKD,NLST,NOOP,PASS,PASV,PORT,PWD,QUIT,REIN,REST,RETR,RMD,RNFR,RNTO,SITE,SIZE,SMNT,STAT,STOR,STOU,STRU,SYST,TYPE,USER

2、只允许上传
local_root=/var/ftp/$USER
write_enable=YES
dirlist_enable=YES
virtual_user_local_Privs=YES
cmds_allowed=ABOR,APPE,CDUP,CWD,HELP,LIST,MDTM,MODE,MKD,NLST,NOOP,PASS,PASV,PORT,PWD,QUIT,REIN,REST,RETR,SITE,SIZE,STAT,STOR,STOU,STRU,TYPE,USER

3、只允许下载
local_root=/var/ftp/$USER
write_enable=NO
dirlist_enable=YES
download_enable=YES
virtual_user_local_Privs=YES
cmds_allowed=ABOR,CDUP,CWD,HELP,LIST,MDTM,MODE,NLST,NOOP,PASS,PASV,PORT,PWD,QUIT,REIN,REST,RETR,SITE,SIZE,STAT,STRU,TYPE,USER

六、守护服务设置
1、超级守护进程设置
确保/etc/vsftpd.conf中,listen=NO
编辑 /etc/xinet.d/vsftpd,内容如下:
service ftp
{
        disable = no
        socket_type             = stream
        wait                    = no
        user                    = root
        server                  = /usr/local/sbin/vsftpd
        nice                    = 10
}

2、独立启动进程
确保/etc/vsftpd.conf中,listen=YES,background=YES
编辑/etc/rc.d/rc.local,在文件最后插入下列内容:
/usr/local/sbin/vsftpd

七、一些问题
?安装DB4(Berkeley DB)后,每次启动FTP都报下面的错:
Please login with USER and PASS.
Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
!DB4安装后会创建可执行文件/usr/kerberos/bin/ftp。在未指定目录的情况下运行ftp,系统会优先执行/usr/kerberos/bin/ftp,因为认证问题会报一些警告信息。可以使用绝对路径来运行系统默认ftp程序
# which -a ftp
/usr/kerberos/bin/ftp
/usr/bin/ftp

?vsftpd启动时报XX配置不正确
!确保vsftpd.conf中每一项设置的值前后都不能有空格。



?为什么按你的手册配置后,有的文件下载、覆盖或删除会失败
!下列条件至少要符合一条才能保证文件操作成功

1、文件所有者是ftp(vsftpd的映射帐号,虚拟用户和本地用户登录后都会映射到此帐号)。

2、文件的other权限为rw。

原文地址:https://www.cnblogs.com/lykyl/p/1989709.html