Centos7下FTP服务器的搭建
一、FTP的作用
文件传输协议(File Transfer Protocol,FTP),是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用 20、21 号端口,其中20端口是数据端口用于进行数据传输,21端口为命令端口,用于接收客户端发出的相关FTP命令和参数
FTP协议工作模式有两种:主动模式和被动模式,其中被动模式是默认的工作模式
A.主动模式:FTP 服务器主动向客户端发起连接请求
B.被动模式:FTP 服务器等待客户端发起连接请求
由于FTP一般部署在企业内网,如果开启并配置了防火墙,有时候需要将FTP的工作模式设置为主动模式,才可以传输数据
二、vsftpd(FTP守护进程)三种认证模式
1.匿名开放模式:任何人都可以无需密码验证而直接登录到FTP服务器
2.本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式
3.虚拟用户模式:需要为FTP服务单独 建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在 服务器系统中实际上是不存在的,仅供 FTP 服务程序进行认证使用。是三种模式中最安全的一种认证模式,用的最多
三、vsftpd.conf的主要参数(根据实际情况来进行配置权限)
四、搭建流程
1.服务器端vsftpd的安装
① 通过rpm命令查看是否已经安装过vsftpd,如果没有安装则通过yum命令安装
rpm - q vsftpd #查看是否安装vsftpd
yum -y install vsftpd #下载vsftpd
②安装完成后,是否成功查看配置文件/etc/vsftpd/
rpm -q vsftpd #查看是否安装vsftpd
ll /etc/vsftpd #查看配置文件
2.匹配认证模式
(1)匿名开放模式:匿名用户可以上传、下载、创建、删除、更名文件的权限
A.服务器端:
① 把主配置文件备份,删除注释的参数,再重定向将其覆盖到主配置文件
cat /etc/vsftpd/vsftpd.conf #查看配置文件(注释看多不好看,把注释删除)
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak #配置文件备份
ll /etc/vsftpd #查看文件(夹)
grep -v "#" /etc/vsftpd/vsftpd.conf.bak >/etc/vsftpd/vsftpd.conf #删除注释的参数,再重定向将其覆盖到配置文件
cat /etc/vsftpd/vsftpd.conf #查看配置文件(已没有注释参数)
②写入相应的权限
vim /etc/vsftpd/vsftpd.conf #编辑配置文件
anon_umask=022 #匿名用户上传文件的umask的值
anon_upload_enable=YES #允许匿名用户上传文件
anon_mkdir_write_enable=YES #允许匿名用户创建目录
anon_other_write_enable=YES #允许匿名用户其他的权限(重命名,删除)
③重启vsftpd服务,并添加到开机启动
systemctl restart vsftpd #重启服务
systemctl enable vsftpd #添加到开机启动
④在/var/ftp/pub/下创建文件
cd /var/ftp/pub/ #切换路径
touch 文件名 #创建文件
⑤清除防火墙的默认策略(或直接关掉防火墙)
systemctl stop firewalld #关闭防火墙
yum -y install iptables-services #下载iptables
systemctl enable iptables #开启自启
systemctl start iptables #启动iptables
iptables -F #清除策略
service iptables save #保存配置
若直接关闭防火墙则不需要以上的操作,因为实际工作当中为了安全防火墙是开启的,而防火墙默认禁止了ftp传输的端口,因此清除防火墙的默认策略,centos7中没有service iptables save指令来保存防火墙的规则,所有采用以上的方式来实现
⑥修改ftp用户的权限
ll -d /var/ftp/pub #查看pub目录
chown -Rf ftp /var/ftp/pub #改变ftp用户的权限
ll -d /var/ftp/pub #查看pub目录
通过查看pub目录发现只有root用户才有写入的权限,所以直接把pub目录所有者改为ftp用户,让ftp用户也拥有写入的权限
⑦修改ftp域相关的规则(或直接关掉SELinux,方法见17)
getenforce #查看SELinux的状态
getsebool -a | grep ftp #查看ftp的规则
setsebool -P ftpd_full_access=on #修改ftpd_full_access为永久打开
实际工作中SELinux一般都是开启的,当SELinux状态为开启,查看与ftp域相关的策略,修改当中的规则
B.客户机端:
①通过rpm命令查看是否已经安装过ftp,如果没有安装则通过yum命令安装
rpm -q ftp #查看是否安装ftp
yum -y install ftp #下载ftp
②用ftp连接下载文件
ftp 服务器地址 #连接服务器端
匿名开放认证模式下,账户统一为 anonymous,密码为空,进入后
ls #查看文件/目录
cd pud #切换路径
ls #查看文件/目录
get 文件名 #下载文件
quit(exit) #退出
ll #可以查看到刚下载的目录
③用ftp连接创建目录
ftp 服务器地址 #连接服务器端
anonymous 用户名 密码为空
mkdir 文件名 #创建目录
ls #查看刚创建的目录
rmdir 文件名 #删除目录
回服务器端,用 ll /var/ftp/pub可以查看刚从客户机端创建的目录
(2)本地用户模式
A.服务器端:
①关闭匿名模式,开启本地匿用户模式,并添加相应的参数
anonymous_enable=NO #关闭匿名模式登录
local_enable=YES #允许本地用户登录
write_enable=YES #可写权限
local_umask=022 #本地用户模式创建文件的 umask 值
userlist_enable=YES #启用“禁止用户名单”
userlist_deny=YES #开启用户作用名单文件功能
vsfftpd服务默认开启了匿名模式和本地用户模式,如果没有手动配置一下
②重启vsftpd服务
systemctl restart vsftpd #重启
systemctl enable vsftpd #自启
③创建用户设置密码
useradd 用户名 #添加用户
passwd 用户名 #给用户设置密码
输入密码指令后,会提示输入密码和确认密码
B.客户机端
用ftp连接服务器后,用刚创建的用户密码登录就可以进行操作。
注意:
a.本地用户模式不用修改用户的权限,因为连接后默认访问的是该用户的家目录(/home/ftptest)
b.该模式下默认禁止root和大部分系统用户登录,如果非登不可,就在服务器端删除/etc/vsftpd/user_list和/etc/vsftpd/ftpusers路径下的同个用户名
(3)虚拟用户模式
A.服务器端
①在vuser.list中创建用户信息
cd /etc/vsftpd/ #切换路径
vim vuser.list #创建用户信息
用户1
密码
用户2
密码
②转换用户文件格式(db_load命令)
db_load #查看是否安装此命令(若有显示如下)
usage: db_load [-nTV] [-c name=value] [-f file]
[-h home] [-P password] [-t btree | hash | recno | queue] db_file
usage: db_load -r lsn | fileid [-h home] [-P password] db_file
yum -y install db4 #若没有则下载(有就略过此步)
db_load -T -t hash -f vuser.list vuser.db #明文的vuser.list文件转换为了vuser.db格式的文件
file vuser.db #看是否转换成功(成功如下)
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
ll vuser.db #查看
chmod 600 vuser.db #降低该文件的权限
rm -rf vuser.list #删除明文文件
③创建PAM文件
vim /etc/pam.d/vsftpd.vu #创建并编辑.du文件
auth required pam_userdb.so db=/etc/vsftpd/vuser #db参数
account required pam_userdb.so db=/etc/vsftpd/vuser #db参数
.vu的文件名可以任意,用于虚拟用户认证,db参数为上一步db_load命令生成的数据库文件的路径,不用写后缀名
④创建本地用户来映射虚拟用户
useradd -d /var/ftpdir -s /sbin/nologin virtual #创建虚拟用户的映射账户
chmod -Rf 755 /var/ftpdir/ #修改权限
创建本地用户来映射虚拟用户,避免 系统无法处理虚拟用户所创建文件的属性权限
⑤添加虚拟用户模式的参数
anonymous_enable=NO #禁止匿名开放模式
local_enable=YES #允许本地用户模式
guest_enable=YES #开启虚拟用户模式
guest_username=virtual #指定虚拟用户账户
pam_service_name=vsftpd.vu(将vsftpd修改为vsftpd.vu) #指定PAM文件,存放于/etc/pam.d/目录下
allow_writeable_chroot=YES #允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求
在本地模式的基础上添加虚拟用户模式的参数,必须关闭匿名模式,开启本地模式,且修改pam_service_name参数为vsftpd.vu
⑥设置虚拟用户的权限
mkdir /etc/vsftpd/a(任意) #创建用户目录,此目录对应之前创建的用户
cd a/ #切换到创建的目录路径
touch 用户1(默认查看权限) #创建之前一样的用户并写入相应的权限
vim 用户2 #创建之前一样的用户并写入相应的权限
anon_upload_enable=YES #上传权限
anon_mkdir_write_enable=YES #写的权限
anon_other_write_enable=YES #重命名,删除权限 vim /etc/vsftpd/vsftpd.conf #定义虚拟用户不同权限的配置文件所存放的路径
user_config_dir=/etc/vsftpd/a(文件中添加)
⑦重启vsftpd服务
systemctl restart vsftpd
B.客户机端
ftp连接用虚拟用户1和用户2登录进行测试了,实现各自之前设置的权限即可
总结:
1.涉及到服务的配置,要考虑防火墙和SELinux的因素
2.配置了服务,都要加入开机启动中,让其每次重启自动生效
3.出现问题从用户权限、目录权限、网络防火墙、SELinux服务几个方面去考虑