您的位置:首页 > 编程语言 > PHP开发

FTP服务器三种模式搭建详解(vsftpd)

2018-12-28 18:35 375 查看
版权声明:本文为博主原创文章,未经博主允许不得转载,转载附上原文链接即可。 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,默认无上传权限

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: