前言
虽然FTP是一种比较老的网络共享方式,但是仍有部分单位或个人仍在使用它。我们下面要总结的就是搭建FTP服务器详细操作及FTP三种登陆方式的配置。
网上实际上有各种FTP服务搭建教程,它们8成都是正确的。但是每个人根据实际情况可能添加了不同的参数,得到的结果对于他们是正确的。所以当采用某篇文章时,建议参数一定要按那篇文章的配置走,否则会导致出现各种异常。当然还要注意一下软件的版本,版本不同配置方式也会发生变化。
该篇使用版本:
centos:7.2
vsftpd: 3.0.2
一、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中安全性最高的模式,但也是配置中最容易出现各种问题的。
虚拟用户登陆,是指创建一个普通系统用户,并建立家目录,然后将虚拟的用户映射到该普通用户的家目录中,然后再对各虚拟用户进行权限控制。
【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/vsftpdauth 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/applelocal_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,默认无上传权限
当为另外两种模式时,需要输入设置好的用户名和密码