一、了解ftp
FTP(File Transfer Protocol)是一个非常古老并且应用十分广泛的文件传输协议,FTP协议是现今使用最为广泛的网络文件共享协议之一,我们现在也一直有在用着FTP协议来进行各种文件的传输,FTP为我们提供了一种可靠的方式在网络上进行文件的共享。
二、准备虚拟机
本地镜像使用centos-1908。也就是说挂载的镜像是centos-1908,点开你的虚拟机设置看看配置的对不对。

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
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
源标识 源名称 状态
!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
查看配置文件里的内容。
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 进入这个文件
文件里面写用户名和密码,第一行是用户名第二行是密码(默认:奇数列是用户名、偶数列是密码)
给密码加密
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 //修改里面的文件
放到这里的话会避免很多的错误。
3)修改主配置文件
vim /etc/vsftpd/vsftpd.conf //修改主配置文件
现在配置的是 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 你们还可以使用其他的软件去链接。链接上之后直接就可以直接去测试了,上传一下文件啊、下一下啊什么的。
六、Linux下使用ftp
yum install -y lftp //现在 lftp
lftp [email protected] //输入后回车 会让输入密码
输入密码后 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
七、黑白名单
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
Case 4: userlist_enable=NO,userlist_deny=YES
当且仅当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