FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。 FTP是File Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。
VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全。另外,高速与高稳定性也是VSFTP的两个重要特点。
在速度方面,使用ASCII代码的模式下载数据时,VSFTP的速度是Wu-FTP的两倍,如果Linux主机使用2.4.*的内核,在千兆以太网上的下载速度可达86MB/S。
在稳定方面,VSFTP就更加的出色,VSFTP在单机(非集群)上支持4000个以上的并发用户同时连接,根据Red Hat的Ftp服务器的数据,VSFTP服务器可以支持15000个并发用户。
当然也有缺点,在vsftp ,没有处理文件编码转换windows客户端访问时有乱码现象。
默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。
[root@localhost ~]# mount /dev/sr0 /mnt 将光盘镜像挂载到/mnt目录下
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# df -Th 查看挂载情况
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 50G 1.1G 49G 3% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 12M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 146M 869M 15% /boot
/dev/mapper/centos-home xfs 46G 33M 46G 1% /home
tmpfs tmpfs 378M 0 378M 0% /run/user/0
/dev/sr0 iso9660 4.3G 4.3G 0 100% /mnt
[root@localhost ~]# rpm -ivh /mnt/Packages/vsftpd-3.0.2-25.el7.x86_64.rpm 安装vsftpd服务
警告:/mnt/Packages/vsftpd-3.0.2-25.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:vsftpd-3.0.2-25.el7 ################################# [100%]
[root@localhost ~]# rpm -q vsftpd 查看vsftpd是否安装
vsftpd-3.0.2-25.el7.x86_64
[root@localhost ~]# cd /etc/vsftpd/ 到vsftp的配置文件所在目录
[root@localhost vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@localhost vsftpd]# grep -v "#" 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
[root@localhost vsftpd]# setenforce 0 关闭核心防护
[root@localhost vsftpd]# systemctl stop firewalld 关闭防火墙
[root@localhost vsftpd]# systemctl start vsftpd 启动服务
我们用一台win7虚拟机使用ftp连接我们的centos7
这里的pub文件并不是我们centos7根目录下的文件,而是vsftpd服务的一个站点,这个站点路径在/var/ftp/
[root@localhost vsftpd]# ls /var/ftp/
pub
[root@localhost vsftpd]# echo "hello world" > /var/ftp/hello.txt 在站点目录里下新建一个hello.txt文件,并写入内容"hello world"
在win7虚拟中查看
我们在这个目录下新建一个文件,实现上传到centos7
我们在centos7中对配置文件进行修改,使得上传能够成功
[root@localhost vsftpd]# systemctl restart vsftpd 重启服务
但是这时候我们还是不能上传,原因是因为站点目录的权限没有到最大,如果我们将权限调到最大,一旦调到最大,就会自动断开远程连接,vsftpd服务的安全性就能体现出来。
[root@localhost vsftpd]# chmod 777 /var/ftp 将ftp目录的权限设置为777,最高
[root@localhost vsftpd]# ll /var/
总用量 8
drwxr-xr-x. 2 root root 6 4月 11 2018 adm
drwxr-xr-x. 5 root root 44 7月 6 20:40 cache
drwxr-xr-x. 2 root root 6 11月 5 2018 crash
drwxr-xr-x. 3 root root 34 7月 6 20:40 db
drwxr-xr-x. 3 root root 18 7月 6 20:40 empty
drwxrwxrwx. 3 root root 34 7月 19 21:27 ftp
drwxr-xr-x. 2 root root 6 4月 11 2018 games
[root@localhost vsftpd]# chmod 755 /var/ftp/ 恢复ftp目录的权限为755
[root@localhost vsftpd]# chmod 777 /var/ftp/pub/ 将pub目录的权限提升到最高
[root@localhost vsftpd]# ll /var/ftp/
总用量 4
-rw-r--r--. 1 root root 12 7月 19 21:27 hello.txt
drwxrwxrwx. 2 root root 6 10月 31 2018 pub
我们再到win7查看是否可以上传,上传成功
centos7查看上传文件
[root@localhost vsftpd]# ls /var/ftp/pub/
bbq.txt
[root@localhost vsftpd]# useradd zhangsan 新建用户zhangsan
[root@localhost vsftpd]# passwd zhangsan 设置密码
更改用户 zhangsan 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost vsftpd]# useradd lisi 新建用户lisi
[root@localhost vsftpd]# passwd lisi 设置密码
更改用户 lisi 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost vsftpd]#
我们用win7使用本地用户登录,我们发现普通用户的身份可以自由切换目录,这就给系统的安全带来了威胁。
在centos7中对配置文件进行修改
[root@localhost vsftpd]# vi /etc/vsftpd/vsftpd.conf
[root@localhost vsftpd]# systemctl restart vsftpd 重启服务
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@localhost vsftpd]# vi user_list
[root@localhost vsftpd]# systemctl start vsftpd
用户列表功能能使用的前提是在vsftpd.conf文件中,列表功能要开启,这个功能在行尾
vi /etc/vsftpd/vsftpd.conf
shift+G跳到行尾
pam_service_name=vsftpd
userlist_enable=YES 开启用户列表功能
tcp_wrappers=YES
userlist_deny=NO 仅允许列表中的用户进行访问,也就是zhnagsan可以访问,而lisi不可以
[root@localhost vsftpd]# systemctl start vsftpd
首先新建一个vuser文件,文件中写入虚拟用户的账户名和密码
[root@localhost vsftpd]# vi vuser
[root@localhost vsftpd]# db_load -T -t hash -f vuser vuser.db 使用hash算法将vuser转换成数据库文件vuser.db ,-T是转换、-t是类型、-f是指定文件
[root@localhost vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh vuser vuser.db
[root@localhost vsftpd]# chmod 600 vuser 为了安全,虚拟用户只能管理员可见
[root@localhost vsftpd]# chmod 600 vuser.db
接下来创建一个真实用户
[root@localhost vsftpd]# useradd -d /opt/vuser -s /sbin/nologin vuser 创建一个用户为vuser,只当家目录为/opt/vuser,而且不能使用shell登录
[root@localhost vsftpd]# id vuser
uid=1003(vuser) gid=1003(vuser) 组=1003(vuser)
编辑pam认证模块
[root@localhost vsftpd]# vi /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser 这里的两个vuser文件是刚刚创建的数据库文件
account required pam_userdb.so db=/etc/vsftpd/vuser
编辑vsftpd.conf配置文件
[root@localhost vsftpd]# vi vsftpd.conf
#pam_service_name=vsftpd 将原来vsftpd的pam认证注释掉
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES 开启来宾访问
guest_username=vuser 来宾访问的用户名为vuser
pam_service_name=vsftpd.vu vsftp.vu的pam认证开启
[root@localhost vsftpd]# systemctl restart vsftpd 重启服务
[root@localhost vsftpd]# ll /opt/vuser/ 找到了上传文件
总用量 0
-rw-------. 1 vuser vuser 0 7月 20 09:58 123.txt 文件的属主、属组都是vuser
[root@localhost vsftpd]# vi vsftpd.conf 编辑配置文件
user_config_dir=/etc/vsftpd/happy 将这条写进去,为单独用户配置文件夹
[root@localhost vsftpd]# mkdir happy
[root@localhost vsftpd]# cd happy/
[root@localhost happy]# vi tom
anon_umask=022 #指定上传文件的权限
[root@localhost happy]# systemctl restart vsftpd 重启服务