FTP服务器搭建详解(vsftpd)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/GX_1_11_real/article/details/85248006

前言


在Linux系统中,vsftpd是专门用于搭建FTP服务器的软件。我们要下面总结的就是搭建FTP服务器详细操作及FTP三种登陆方式的配置。



一、FTP的登录方式



【1】匿名用户登陆


实际上,当我们使用默认安装的时候,系统就默认会提供匿名用户访问了,无需另外的配置,但是如果需要更多细节的配置,可额外添加

任何处于同一局域网或可联通FTP服务端的用户都可访问

通过web端访问时,要在地址栏输入 ftp://ftp服务器IP,登陆该ftp服务器,查看或下载文件(无需提供用户名和密码)

通过FTP客户端访问时,要先安装ftp客户端



【2】本地用户登陆


当我们配置了本地用户登陆时,FTP会以/etc/passwd中的用户名为认证方式

即可以通过创建本地用户和设置密码的方式,控制登陆FTP的用户、密码文件存放目录



【3】虚拟用户登陆


当我们配置了虚拟用户登陆时,FTP会将保存在文件或数据库中虚拟出的用户,映射到指定的系统账号(/sbin/nologin)来访问资源,其中这些虚拟用户是FTP的用户

可以通过修改配置的虚拟账号文件,来控制用户的登陆,安全性更高




二、FTP防火墙配置与软件安装



【1】网络环境(可选)


当我们搭建服务时,要先注意一下网络环境和看具体的情况。

如果是在局域网内部提供服务时,可以设置防火墙规则,也可以关闭防火墙;
如果是向外网提供服务时,必须要配置防火墙规则(硬件防火墙或软件防火墙);
如果使用的云服务器,必须要配置安全组开放相关端口。



iptables防火墙配置


<1>在/etc/sysconfig/iptables-config文件,添加以下两行:

IPTABLES_MODULES="ip_conntrack_ftp"
IPTABLES_MODULES="ip_nat_ftp"


<2>在/etc/sysconfig/iptables 文件,添加以下三行:

-A -INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT 
-A -INPUT -p tcp -m state --state NEW -m tcp --sport 21 -j ACCEPT 
-A -INPUT -P tcp --dport 20 -j ACCEPT


<3>重启iptables,使配置生效

service iptables restart


<4>iptables防火墙关闭操作(可选)

/etc/init.d/iptables stop
chkconfig iptables off


firewalld防火墙配置


<1>selinux设置

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce 0


<2>firewalld防火墙设置

firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --permanent --zone=public --add-ports=21/tcp
firewall-cmd --permanent --zone=public --add-ports=22/tcp
firewall-cmd --reload

<3>firewalld防火墙关闭操作(可选)

systemctl stop firewalld 
systemctl disable firewalld


【2】vsftpd安装


本文vsftpd版本:version 3.0.2


<1>vsftpd安装:

yum -y install  vsftpd 


<2>使用虚拟登陆账户时,安装依赖包:

yum -y install  pam* db4* 



【3】vsftpd主要配置文件详解


下图为安装后生成的配置文件:
在这里插入图片描述

下图为安装后的默认配置:
在这里插入图片描述

  • ftpusers为黑名单,文件中包含的用户将被绝对禁止登录ftp服务器(主配置文件任何设置,无法影响黑名单)

  • user_list为白名单或黑名单,文件中包含的用户可能被禁止登录,也可能被允许登录(与主配置文件设置有关)

  • vsftpd.conf为主配置文件,控制用户及登陆方式,存放位置等

  • 当主配置文件中存在userlist_enable=YES配置项时,user_list才会生效

  • 当主配置文件中存在userlist_enable=ON或user_list文件不存在,user_deny任何配置不会生效

  • 当主配置文件中存在userlist_enable=YES配置项,且user_deny=YES,则仅禁止列表中的用户登录

  • 当主配置文件中存在userlist_enable=YES配置项,且user_deny=NO,则仅允许列表中的用户登录,匿名用户将无法登陆




三、FTP的匿名用户登陆配置


实际上,当我们使用默认安装的时候,系统就默认会提供匿名用户访问了,无需另外的配置,但是如果需要更多细节的配置,可额外添加

任何处于同一局域网或可联通的网络中的用户都可通过web端的地址栏输入 ftp://ftp服务器IP,登陆该ftp服务器,查看或下载文件(无需提供用户名和密码)

使用ftp访问该FTP服务器时,默认用户和密码都为ftp,默认无上传权限,默认访问位置为/var/ftp/

配置完成后,都要重启vsftpd服务,使配置生效
systemctl restart vsftpd


【1】配置文件


下面为基础的匿名用户访问的配置(如需更多配置可直接添加):
grep -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             设定端口20进行数据连接
xferlog_std_format=YES               设定日志使用标准的记录格式
listen=NO                            如果启用,vsftpd将以独立(standalone)模式运行,不依赖于xinetd,直接运行自己去监听服务
listen_ipv6=YES                      启用后vsftpd去监听IPV6套接字,这个设置和listen的设置互相排斥(一方为YSS,另一方要设为NO,否则启动ftp时会报错)

pam_service_name=vsftpd              设定pam服务下的vsftpd验证配置文件名,PAM验证会根据/etc/pam.d/下的vsftpd文件配置
userlist_enable=YES                  启用user_list列表文件
tcp_wrappers=YES                     设定支持TCPwrappers



四、FTP的本地用户登陆配置


本地用户登陆,顾名思义就是要先在服务端创建本地用户,然后配置FTP配置文件,使其可以通过本地用户登陆FTP服务端


【1】本地用户创建


为了安全,可以创建nologin用户,使此用户不可登录系统,但可登录FTP

必须设置密码,否则无法访问


<1>创建用于ftp远程登录的本地用户


-d 为用户指定家目录。如不使用,其默认家目录为/home/ftptest1,访问FTP的文件存放位置为/home/ftptest1


useradd ftptest1 -s /sbin/nologin 


<2>设置密码

passwd ftptest1


【2】配置文件


下面为基础的本地用户访问的配置(如需更多配置可直接添加):
grep -v "^#" /etc/vsftpd/vsftpd.conf 


anonymous_enable=NO              不允许匿名用户登录 
local_enable=YES                 允许本地用户登录 
write_enable=YES                 开放写权限 
local_umask=022                  设置本地用户上传建立文件夹时的权限掩码 
dirmessage_enable=YES            设定开启目录标语功能 
xferlog_enable=YES               设定开启日志记录功能
connect_from_port_20=YES         设定端口20进行数据连接
xferlog_std_format=YES           设定日志使用标准的记录格式 
listen=YES                       以独立运行方式监听服务 
pam_service_name=vsftpd          设定pam服务下的vsftpd验证配置文件名,PAM验证会根据/etc/pam.d/下的vsftpd文件配置
userlist_enable=YES              启用user_list列表文件 
userlist_deny=NO                 允许user_list文件中的用户登录 
tcp_wrappers=YES                 设定支持TCPwrappers 

chroot_list_enable=YES           启用chroot_list_file配置项指定的用户列表文件
chroot_list_file=/etc/vsftpd/chroot_list    限制用户的家目录的用户配置文件

下列为额外的配置,根据情况使用:

max_clients=20                   限制并发客户连接数最多为20个 
max_per_ip=2                     限制来自同一ip的客户连接数最多为2个 

local_max_rate=102400            限制本地用户的最大传输速率 
pasv_enable=YES                  允许被动模式连接 

pasv_max_port=20000              用于被动连接最大端口号 
pasv_min_port=10000              用于被动连接最小端口号

使用下两行,可以限制用户无法切换或cd到其他目录,只能在自己的主目录中:

chroot_list_enable=YES           启用chroot_list_file配置项指定的用户列表文件
chroot_list_file=/etc/vsftpd/chroot_list    限制用户的家目录的用户配置文件



【3】配置用户


<1>将创建的本地用户写入白名单

echo "ftptest1" >> /etc/vsftpd/user_list

在这里插入图片描述



<2>将创建的本地用户写入限制用户主目录的名单

可以使用户无法切换或cd到其他目录,只能在自己的主目录中

echo "ftptest1" >> /etc/vsftpd/chroot_list


<3>重启服务

systemctl restart vsftpd

配置并重启vsftpd服务后,即可通过该用户访问




【4】用户主目录权限设置



从2.3.5版之后,当用户被限定在了其主目录下时,该用户的主目录不能再有写权限,否则会报错



<1>修改用户主目录的权限

chown -R ftptest1.ftptest1 /home/ftptest1
chmod a-w /home/ftptest1
mkdir /home/ftptest1/life


<2>或在vsftpd的主配置文件中,添加下列

allow_writeable_chroot=YES



五、FTP的虚拟用户登陆配置


虚拟用户登陆是FTP中安全性最高的模式,但也是配置中最容易出现各种问题的。

虚拟用户登陆,是指创建一个普通系统用户,并建立家目录,然后将虚拟的用户映射到该普通用户的家目录中,然后再对各虚拟用户进行权限控制。

网上实际上有各种FTP的虚拟用户登陆的配置,实际上8成都是正确的。但是每个人根据实际情况可能添加了不同的参数,得到的结果对于其是正确的。因此当采用某篇文章的配置时,请一定要按那篇文章的配置走,否则会导致结果出现各种异常。



【1】虚拟用户的创建


<1>创建普通的用户


创建一个不可登录的系统本地用户,并指定家目录
如果不指定家目录,默认家目录在/home下

本文是创建了名为vsftpd的用户,这可能会导致一些误会。请将vsftpd记为一个普通用户

-d为指定家目录


useradd vsftpd -s /sbin/nologin
chown -R vsftpd:vsftpd /home/vsftpd


<2>创建虚拟用户账号文件


第一行为用户,第二行为密码,不可有空格

账号文件名称可为其他名称,并且其内容可写入多个账号及密码


vim /etc/vsftpd/vuser.list

在这里插入图片描述



<3>生成虚拟用户数据文件


使用db_load命令,用hash算法生成vuser.list虚拟用户的数据库文件

每次对虚拟用户的修改操作后,都需要再次执行,使其生成新的数据文件

并且为了安全,将生成的文件赋权,并删除或移动旧文件到其他位置


db_load -T -t hash -f   /etc/vsftpd/vuser.list   /etc/vsftpd/vuser.db
chmod 600 /etc/vsftpd/vuser.db
rm -rf /etc/vsftpd/vuser.list


<4>设置PAM验证文件


本系统为64位的,添加最下面的两行即可

auth:对用户的用户名口令进行验证
accout:对用户的帐户权限和限制进行验证
/lib/security/pam_userdb.so :调用pam_userdb.so这个库函数
db:该虚拟用户数据文件(默认省略db后缀)

本文是将名为vsftpd的pam验证文件修改,也可直接创建一个新的pam验证文件


cat /etc/pam.d/vsftpd

auth       required     /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account    required     /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser


【2】虚拟用户配置文件


虚拟用户的配置文件名必须和虚拟用户名一致(因为在登录ftp时输入相应的用户名后,会根据名称去加载相应的配置文件)


mkdir /etc/vsftpd/vconf

下面为基础的单个虚拟用户访问的配置文件(如需更多配置可直接添加):
vim /etc/vsftpd/vconf/apple

local_root=/home/vsftpd/vuse-apple       指定该虚拟用户主库的路径
write_enable=YES                         允许写的操作
local_umask=022                          上传文件的权限掩码
anon_world_readable_only=NO              关闭只可读
anon_upload_enable=YES                   允许上传
anon_mkdir_write_enable=YES              允许新建目录
anon_other_write_enable=YES              允许修改目录/文件名称,删除

下列为额外的配置,根据情况使用:

 idle_session_timeout=300                 设定空闲链接超时时间
 data_connection_timeout=1000             设定单次传输最大时间
 max_clients=0                            设定并发客户端的访问数量
 max_per_ip=0                             设定客户端的最大线程数
 local_max_rate=0                         设定用户的最大传输速率,单位b/s


【3】vsftpd主配置文件配置


下面为基础的虚拟用户访问的主配置文件(如需更多配置可直接添加):
grep -v "^#" /etc/vsftpd/vsftpd.conf 


anonymous_enable=NO              不允许匿名用户登录 
local_enable=YES                 允许本地用户登录 
write_enable=YES                 开放写权限 
local_umask=022                  设置本地用户上传建立文件夹时的权限掩码 
dirmessage_enable=YES            设定开启目录标语功能 
xferlog_enable=YES               设定开启日志记录功能
connect_from_port_20=YES         设定端口20进行数据连接
xferlog_std_format=YES           设定日志使用标准的记录格式 
listen=YES                       以独立运行方式监听服务 
pam_service_name=vsftpd          设定pam服务下的vsftpd验证配置文件名,PAM验证会根据/etc/pam.d/下的vsftpd文件配置
userlist_enable=YES              启用user_list列表文件 
userlist_deny=NO                 允许user_list文件中的用户登录 
tcp_wrappers=YES                 设定支持TCPwrappers 
chroot_list_enable=YES           启用chroot_list_file配置项指定的用户列表文件
chroot_list_file=/etc/vsftpd/chroot_list    限制用户的家目录的用户配置文件
anon_umask=022                   虚拟用户的umask值设置
allow_writeable_chroot=YES       

guest_enable=YES                 开启虚拟账户功能
guest_username=vsftpd            指定虚拟账号映射到本地哪个用户
user_config_dir=/etc/vsftpd/vconf   指定虚拟用户的单个配置文件位置,下方的文件名必须和虚拟用户名相同


【4】虚拟用户主目录建立及赋权


这是一个重点。如果目录权限配置不当,易导致虚拟用户权限出现各种异常。


<1>映射的用户的主目录的赋权

chown vsftpd:vsftpd /home/vsftpd
chmod 755 /home/vsftpd


<2>创建虚拟用户的主目录并赋权

mkdir -p /home/vsftpd/vuse-apple
chown -R vsftpd /home/vsftpd/vuse-apple
chmod 755 /home/vsftpd/vuse-apple

设置完成后,重启vsftpd服务,即可通过客户端访问




六、FTP客户端访问


【1】访问


任何处于同一局域网或可联通FTP服务端的用户都可访问

通过web端访问时,要在地址栏输入 ftp://ftp服务器IP,登陆该ftp服务器,查看或下载文件(无需提供用户名和密码)

通过FTP客户端访问时,要先安装ftp客户端


访问格式:
ftp ftp服务器IP

命令:
ftp 123.123.123.123

当为匿名模式时,默认用户和密码都为ftp,默认无上传权限

当为另外两种模式时,需要输入设置好的用户名和密码

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/GX_1_11_real/article/details/85248006