一、了解ftp



FTP(File Transfer Protocol)是一个非常古老并且应用十分广泛的文件传输协议,FTP协议是现今使用最为广泛的网络文件共享协议之一,我们现在也一直有在用着FTP协议来进行各种文件的传输,FTP为我们提供了一种可靠的方式在网络上进行文件的共享。

二、准备虚拟机



本地镜像使用centos-1908。也就是说挂载的镜像是centos-1908,点开你的虚拟机设置看看配置的对不对。

 FTP 共享资源库系统资源_上传

三、vsftpd部署安装



systemctl stop firewalld                              //关闭防火墙
setenforce 0 //关闭se


1)配置 yum 源 

把 yum 源去掉换成本地的 yum 源。把新的 yum 源输入进去就行。



mv/etc/yum.repos.d/* /media/                                    //移除原有的yum源
vim /etc/yum.repos.d/lcoal.repo //在这个文件里添加yum源
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1


FTP 共享资源库系统资源_上传_02



mkdir -p /opt/centos                 //创建一个目录mount /dev/sr0 /opt/centos             //将那个镜像挂在到cetos这个目录
//查看挂载情况
[root@ftp ~]# ls /opt/centos
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL

//查看 yum 源是否正常


[root@ftp ~]# yum repolist

已加载插件:fastestmirror

Loading mirror speeds from cached hostfile

Loading mirror speeds from cached hostfile

Loading mirror speeds from cached hostfile

Loading mirror speeds from cached hostfile

Loading mirror speeds from cached hostfile

源标识 源名称 状态

!base/7/x86_64 CentOS-7 - Base 0

centos centos 0

!extras/7/x86_64 CentOS-7 - Extras 0

!updates/7/x86_64 CentOS-7 - Updates 0

repolist: 0


这样 yum 源已经弄好了。

 2)下载vsftp

查看完端口后是21端口就对了。



//下载 vsftpd net-tools
[root@ftp ~]#yum install -y vim vsftpd net-tools

//启用vsftpd
[root@ftp ~]#systemctl start vsftpd

//查看端口
[root@ftp ~]# netstat -ntlp |grep vsftpd
tcp6 0 0 :::21 :::* LISTEN 1769/vsftpd


 FTP 共享资源库系统资源_配置文件_03

查看配置文件里的内容。



listen=YES:是否以独立运行的方式监听服务

listen_address=192.168.x.x:设置监听的 IP 地址

listen_port=21:设置监听 FTP 服务的端口号

write_enable=YES:是否启用写入权限

download_enable=YES:是否允许下载文件

userlist_enable=YES:是否启用 user_list 列表文件

userlist_deny=YES:是否禁用 user_list 中的用户

max_clients=0:限制并发客户端连接数

max_per_ip=0:限制同一 IP 地址的并发连接数

guest_enable=YES:启用虚拟用户

user_config_dir=/etc/vsftpd/vsftpd_user_conf :虚拟用户使用的配置文件目录

allow_writeable_chroot=YES:允许写入用户主目录

常用的匿名 FTP 配置项:

anonymous_enable=YES:启用匿名访问

anon_umask=022:匿名用户所上传文件的权限掩码

anon_root=/var/ftp:匿名用户的 FTP 根目录

anon_upload_enable=YES:允许上传文件

anon_mkdir_write_enable=YES:允许创建目录

anon_other_write_enable=YES:开放其他写入权

anon_max_rate=0:限制最大传输速率(字节/秒)

常用的本地用户 FTP 配置项:

local_enable=YES:是否启用本地系统用户

local_umask=022:本地用户所上传文件的权限掩码

local_root=/var/ftp:设置本地用户的 FTP 根目录

chroot_local_user=YES:是否将用户禁锢在主目录


 四、配置虚拟用户

1)配置用户名密码

进入配置文件里创建一个存放密码的文件



vim /etc/vsftpd/users.conf                            //创建 users.conf 进入这个文件


FTP 共享资源库系统资源_上传_04

文件里面写用户名和密码,第一行是用户名第二行是密码(默认:奇数列是用户名、偶数列是密码)

FTP 共享资源库系统资源_配置文件_05

 给密码加密



db_load -T -t hash -f /etc/vsftpd/users.conf /etc/vsftpd/users.db   //密码加密
vim /etc/vsftpd/users.conf         //查看密码被加密后的情况
chmod 600 users.db              //给 users.db 授权(只有这里面的用户去读写)
chmod 600 users.*               //授权(文件里面的用户授权)


2)创建系统用户



useradd vsftpd -d /home/vsftpd -s /sbin/nologin                    //创建用户  (-d:指定用户所在目录 -s:指定一下不能登录 )
chmod -R 777 /home/vsftpd //给上面的文件授权(777:可以上传、下载)



vim /etc/pam.d/vsftpd                               //修改里面的文件


放到这里的话会避免很多的错误。

FTP 共享资源库系统资源_centos_06

3)修改主配置文件



vim /etc/vsftpd/vsftpd.conf                 //修改主配置文件


FTP 共享资源库系统资源_vim_07

现在配置的是 yunjisuan 如果还要使用那个就也把那个这样配置一下即可。



// 创建子配置文件目录
[root@localhost ~]# mkdir -p /etc/vsftpd/vsftpd_user_conf

//进入创建的文件
[root@localhost ~]# cd !$
cd /etc/vsftpd/vsftpd_user_conf

//进入文件里添加配置
[root@localhost vsftpd_user_conf]# vim yunjisuan
local_root=/home/vsftpd/xmcsxy # 当本地用户登入时,将被更换到定义的目录下。默认值为各用户的家目录。
anon_upload_enable=YES # 是否允许登陆用户有上传权限。
write_enable=YES # 是否允许登陆用户有写权限。



# 重启服务,使配置文件生效
[root@localhost vsftpd_user_conf]# systemctl restart vsftpd
[root@localhost vsftpd_user_conf]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.w


 五、链接ftp

我使用的是 xftp 你们还可以使用其他的软件去链接。链接上之后直接就可以直接去测试了,上传一下文件啊、下一下啊什么的。

FTP 共享资源库系统资源_centos_08

 六、Linux下使用ftp



yum install -y lftp                                        //现在 lftp
lftp liao1@127.0.0.1 //输入后回车 会让输入密码
输入密码后 ls 查看能否查看,能查看即为成功。


LFTP内部命令:

​ ls 显示远端文件列表(!ls 显示本地文件列表)。

​ cd 切换远端目录(lcd 切换本地目录)。

​ get 下载远端文件。

​ mget 下载远端文件(可以用通配符也就是 *)。

​ pget 使用多个线程来下载远端文件, 预设为五个。

​ mirror 下载/上传(mirror -R)/同步 整个目录。

​ put 上传文件。

​ mput 上传多个文件(支持通配符)。

​ mv 移动远端文件(远端文件改名)。

​ rm 删除远端文件。

​ mrm 删除多个远端文件(支持通配符)。

​ mkdir 建立远端目录。

​ rmdir 删除远端目录。

​ pwd 显示目前远端所在目录(lpwd 显示本地目录)。

​ du 计算远端目录的大小

​ ! 执行本地 shell的命令(由于lftp 没有 lls, 故可用 !ls 来替代)

​ lcd 切换本地目录

​ lpwd 显示本地目录

​ alias 定义别名

​ bookmark 设定书签。

​ exit 退出ftp

七、黑白名单

FTP 共享资源库系统资源_用户名_09

ftpusers:

如果创建了用户,设置了密码,将用户名添加到ftpusers中,则无法登录ftp服务。

user_list:

根据配置,可以是白名单,也可以是黑名单。userlist_enable和userlist_deny两个选项联合起来针对的是:本地全体用户(除去ftpusers中的用户)和出现在user_list文件中的用户以及不在在user_list文件中的用户这三类用户集合进行的设置。

userlist_enable和userlist_deny两个选项联合起来针对的是:本地全体用户(除去ftpusers中的用户)和出现在user_list文件中的用户以及不在在user_list文件中的用户这三类用户集合进行的设置。

为了说明这个问题,我们来建立两个测试用户:

test1: 在user_list中

test2:不在user_list中

然后我们分别给两个配置项取不同的值,分4种Case进行测试:

Case 1: userlist_enable=YES, userlist_deny=YES

test1: 拒绝登入

test2: 允许登录

Case 2: userlist_enable=YES, userlist_deny=NO

test1: 允许登录

test2:拒绝登录(如user_list文件开头的注释所述,甚至不会提示输入密码,即无登入提示框,直接拒绝连接)

Case 3: userlist_enable=NO,userlist_deny=NO

test1: 允许登录

test2: 允许登录

Case 4: userlist_enable=NO,userlist_deny=YES

test1: 允许登录

test2: 允许登录

当且仅当userlist_enable=YES时:userlist_deny项的配置才有效,user_list文件才会被使用;当其为NO时,无论userlist_deny项为何值都是无效的,本地全体用户(除去ftpusers中的用户)都可以登入FTP

当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入;

当userlist_enable=YES时,userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入);另外需要特别提醒的是:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous