redhat 7.4下使用vsftpd搭建FTP服务器

环境版本

# cat /etc/redhat-release

Red Hat Enterprise Linux Server release 7.4 (Maipo)

# rpm -qa | grep vsftpd

vsftpd-3.0.2-22.el7.x86_64

1.安装并运行vsftpd

安装vsftpd:

# yum -y install vsftpd

启动服务:

# systemctl start vsftpd.service

设置开机自启:

# systemctl enable vsftpd.service

2.有关vsftpd默认设置及匿名访问FTP的说明

安装并运行vsftpd后,默认允许匿名用户访问并提供下载功能,但从安全性的角度考虑,匿名用户默认无法上传。

vsftpd中的匿名用户有两个:anonymous和ftp,在客户端可以用这两个匿名用户中的任意一个访问服务器。

vsftpd的默认主目录是/var/ftp,其中已有一个默认的子目录pub,可以把要共享的文件放在/var/ftp/pub目录中。

vsftpd的主配置文件是/etc/vsftpd/vsftpd.conf。

vsftpd的默认设置如下:

# egrep -v ‘^#|^$’ /etc/vsftpd/vsftpd.conf

anonymous_enable=YES

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=NO

listen_ipv6=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

注:为避免干扰,关闭防火墙及禁用selinux

# systemctl stop firewalld && systemctl disable firewalld

# setenforce 0

# sed -i “s#SELINUX=enforcing#SELINUX=disabled#g” /etc/sysconfig/selinux

3.ftp需求及配置步骤

需求

ftpserver工作于被动模式,侦听端口:4200,ftp被动模式数据连接端口范围10300-10310,新建系统用户ftpuser1,ftpuser2用于ftp连接(用户只用于ftp连接,不能shell登录),新建目录/ftp用于ftp上传下载。

所有ftp用户都可以上传下载文件,并能更新删除ftp目录中的所有文件(自己上传的以及他人上传的)。

不允许匿名访问。

配置步骤如下:

3.1建立FTP目录/ftp及FTP账号ftpuser1,ftpuser2

建立FTP目录:

# mkdir /ftp

建立FTP账号(设置账号家目录为/ftp):

# useradd -d /ftp -s /sbin/nologin ftpuser1

# useradd -d /ftp -s /sbin/nologin ftpuser2

设置FTP账号密码(示例密码为password):

# echo password | passwd –stdin ftpuser1

# echo password | passwd –stdin ftpuser2

3.2备份默认配置文件:

mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

3.3根据上述需求,新建配置文件,内容如下(配置项上一行标#为新增项或修改项,没标#为默认配置文件自带配置项):

# vi /etc/vsftpd/vsftpd.conf

#默认设置为YES,修改为NO,不允许匿名访问

anonymous_enable=NO

local_enable=YES

write_enable=YES

#默认设置为022,修改为000,确保所有ftp用户能更新删除ftp目录中的所有文件

local_umask=000

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=NO

listen_ipv6=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

#新增配置项,设置为NO,仅允许user_list列表中的用户账户登录

userlist_deny=NO

#新增配置项,让系统用户在登录FTP时也是访问FTP的主目录/ftp

local_root=/ftp

#新增配置项将用户禁锢在自己的家目录中

chroot_local_user=YES

#新增配置项

allow_writeable_chroot=YES

#新增配置项

listen_port=4200

#新增配置项

pasv_enable=YES

#新增配置项

pasv_min_port=10300

#新增配置项

pasv_max_port=10310

保存配置文件,并重启vsftpd服务:

# systemctl restart vsftpd

3.4在/etc/vsftpd/user_list文件中添加FTP账号ftpuser1 、ftpuser2

echo ftpuser1 >> /etc/vsftpd/user_list

echo ftpuser2 >> /etc/vsftpd/user_list

(同时注意检查/etc/vsftpd/ftpusers文件中不能存在FTP账号ftpuser1 、ftpuser2,否则FTP账号ftpuser1 、ftpuser2无法ftp连接。此文件中默认不会存在新建的账号)

3.5设置FTP目录权限

# setfacl -m u:ftpuser1:rwx /ftp

# setfacl -m u:ftpuser2:rwx /ftp

(不作此设置,ftpuser1、ftpuser2无法上传文件)

配置完毕,此时可使用ftp客户端进行ftp连接(端口:4200)

附录1:若需求中无此要求:ftpserver工作于被动模式,侦听端口:4200,ftp被动模式数据连接端口范围10300-10310。可以去掉如下配置项:

listen_port=4200

pasv_enable=YES

pasv_min_port=10300

pasv_max_port=10310

附录2:若需求中只需要使用一个FTP账号ftpuser1,则上述配置步骤可作如下调整(建议):

主要调整之处:

(1)local_umask无需设置为000,保持默认配置022即可:local_umask=022

(2)建FTP账号时,设置FTP账号的家目录为/ftp(前提是/ftp原先不存在):# useradd -d /ftp/ -s /sbin/nologin ftpuser1

(3)因(2)设置原因,无需作如下设置:setfacl -m u:ftpuser1:rwx /ftp

附录3:若需求中无此要求:所有ftp用户都能更新删除ftp目录中的所有文件(自己上传的以及他人上传的)。则上述配置步骤可作如下调整(建议):

主要调整之处:

(1)local_umask无需设置为000,保持默认配置022即可:local_umask=022

这样配置后,ftp用户只能更新删除自己上传的目录/文件,但可以查看下载所有文件。

附录4:若需要临时禁止ftpuse1或ftpuser2连接,user_list文件中注释或删除此账号即可。(无需重启vsftpd服务)

附录5:有关Chroot jail的说明

You may specify an explicit list of local users to chroot() to their home directory. If chroot_local_user is YES, then this list becomes a list of users to NOT chroot().

(Warning! chroot’ing can be very dangerous. If using chroot, make sure that the user does not have write access to the top level directory within the chroot)

chroot_local_user=YES

chroot_list_enable=YES

# (default follows)

chroot_list_file=/etc/vsftpd.chroot_list

设置之前,需手动添加vsftpd.chroot_list文件,此文件内存储ftp用户,其代表的含义根据chroot_local_user和chroot_list_enable不同而不同。

 chroot_local_user=YESchroot_local_user=NO
chroot_list_enable=YES仅允许vsftpd.chroot_list内用户离开默认目录仅拒绝vsftpd.chroot_list内用户离开默认目录,其他ftp用户可以访问其它目录
chroot_list_enable=NOvsftpd.chroot_list无效,拒绝所有ftp用户离开默认目录vsftpd.chroot_list无效,所有ftp用户均可访问其它目录

附录6:有关阻止用户登陆

可以通过如下设置阻止部分用户访问ftp服务器。

userlist_enable=YES

userlist_file=/etc/vsftpd.user_list

userlist_deny=NO

手动添加此三项到配置文件,同时创建vsftpd.user_list。与chroot jail配置参数相似,不同的设置导致不同的效果。

 userlist_deny=YESuserlist_deny=NO
userlist_enable=YES仅拒绝vsftpd.user_list内用户访问ftp仅允许vsftpd.user_list内用户访问ftp
userlist_enable=NOvsftpd.user_list无效vsftpd.user_list无效