linux系统的ftp文件传输协议
简介:FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
一、FTP的安装
1.安装的环境配置
该实验以server虚拟机的超级用户操作
(1)设置网络
vim /etc/sysconfig/network-scripts/ifcfg-eth0 #编写网络配置文件
systemctl restart network #重启网络
ping 172.25.254.60 # ping真机id,测试网络
(2)配置yum源
cd /etc/yum.repos.d/
vim rhel_dvd.repo #编写yum源配置文件
yum clean all #清空yum源缓存
2.安装FTP
yum install vsftpd -y #安装vsftpd
火墙策略
firewall-cmd --permanent --add-service=ftp #给火墙加ftp
firewall-cmd --reload #更改火墙加载
firewall-cmd --list-all #查看防火墙状态
systemctl start vsftpd #开启服务
systemctl enable vsftpd #开机启动服务
yum install lftp -y #安装lftp软件
测试:
lftp 本机id #匿名访问
能登录且显示,表示安装完成!
文件信息
默认发布目录: /var/ftp
协议接口: 21/tcp
服务配置文件: /etc/vsftpd/vsftpd.conf
匿名用户默认的登陆目录为/var/pub/
本地用户默认的登陆目录为/home
报错id
500 #文件权限过大
530 #用户认证失败
550 #服务本身功能未开放
553 #本地文件系统权限过小
二、vsftpd服务的配置参数
1. 允许匿名用户上传
29 anon_upload_enable=YES #允许匿名用户上传
测试:
chgrp ftp /var/ftp/pub #将/var/ftp/pub目录的组用户设置为ftp
chmod 775 /etc/passwd #修改/etc/passwd的执行权限
vim /etc/vsftpd/vsftpd.conf #编辑vsftpd配置文件
systemctl restart vsftpd #重启vsftpd服务
vim /etc/sysconfig/selinux #编写selinux配置文件(SELINUX=disabled)
setenforce 0 #关闭selinux防火墙
lftp 172.25.254.202 #匿名登录
上传成功!
2. 匿名用户限速上传
30 anon_max_rate=10240 #允许匿名用户上传的速度
测试:
dd if=/dev/zero of=/mnt/bigfile bs=1M count=2000 #截取
lftp 172.25.254.202 #匿名登录
cd pub/
put /mnt/bigfile #上传/mnt/bigfile
ls
vim /etc/vsftpd/vsftpd.conf #编辑vsftpd配置文件
systemctl restart vsftpd #重启vstpd
lftp 172.25.254.202 #匿名登录
cd pub/
put /mnt/bigfile #上传/mnt/bigfile
可以看到上传速度变慢
限速完成!
3. 允许匿名用户删除
24 anon_other_write_enable=YES #是否允许匿名用户删除
测试:
lftp 172.25.254.202 #匿名登录172.25.254.202
cd pub/
rm -fr bigfile #删除pub目录里的文件,无法删除
vim /etc/vsftpd/vsftpd.conf #编辑vsftpd配置文件
systemctl restart vsftpd #重启vsftpd服务
删除成功!
4. 禁止本地用户连接
16 local_enable=NO #禁止允许本地用户连接
测试:
lftp 172.25.254.202 -u student #以student用户的身份登录172.25.254.202
ls
vim /etc/vsftpd/vsftpd.conf #编辑vsftpd配置文件
systemctl restart vsftpd #重启vsftpd服务
5. 允许本地用户写入
19 write_enable=YES #允许本地用户读写
测试:
lftp 172.25.254.202 -u student #以student用户的身份登录172.25.254.202
上传/etc/passwd文件失败,因为没有权限
vim /etc/vsftpd/vsftpd.conf #编辑vsftpd配置文件
systemctl restart vsftpd #重启vsftpd服务
6.设置创建文件的umask值
23 local_umask=077 #设置本地用户创建文件的umask值
24 anon_umask=022 #设置匿名用户创建文件的umask值
测试:
vim /etc/vsftpd/vsftpd.conf #编辑vsftpd配置文件
systemctl restart vsftpd #重启vsftpd服务
本地用户
lftp 172.25.254.202 -u student #以student用户的身份登录172.25.254.202
put /etc/inttab #上传/etc/inttab文件
ls #查看inttab权限信息
匿名用户
lftp 172.25.254.202 #匿名登录172.25.254.202
cd pub/
put /etc/group #上传group文件
ls #查看group文件权限信息
可以看出本地用户和匿名用户上传文件的权限不同
创建文件的umask值设置成功!
7. 是否允许所有本地用户访问上层目录
(1)禁止所有本地用户访问上层目录
102 chroot_local_user=YES #禁止所有本地用户访问上层目录
测试:
lftp 172.25.254.202 -u student #以student用户的身份登录172.25.254.202
cd /
ls
vim /etc/vsftpd/vsftpd.conf #编辑vsftpd配置文件
systemctl restart vsftpd #重启vsftpd服务
报错500表示权限过大,系统提示用户有可写入权限
chmod u-w /home/* #删除写入权限
禁止本地用户访问上层目录设置成功!
(2)黑名单
102 chroot_local_user=NO #允许所有本地用户访问上层目录
103 chroot_list_enable=YES #开启黑名单
105 chroot_list_file=/etc/vsftpd/chroot_list #黑名单所在目录
测试:
vim /etc/vsftpd/vsftpd.conf #编辑vsftpd配置文件
systemctl restart vsftpd #重启vsftpd服务
lftp 172.25.254.202 -u student #以student用户的身份登录172.25.254.202
cd /
lsvim /etc/vsftpd/chroot_list #编辑黑名单(student)
在黑名单中写入student后,student用户无法查看上层目录,但其他用户可以查看
(3)白名单
102 chroot_local_user=NO #禁止所有本地用户访问上层目录
103 chroot_list_enable=YES #开启白名单,开启后所有用户禁止访问上层目录
105 chroot_list_file=/etc/vsftpd/chroot_list #白名单所在目录
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
vim /etc/vsftpd/chroot_list #编辑白名单(student)
操作完成后,只有在白名单的用户才可以查看上层目录
8.用户黑白名单
(1)黑名单
ftpusers 为永久黑名单
user_list 为暂时黑名单
测试:
vim /etc/vsftpd/ftpusers #编辑用户永久黑名单(student)
student 用户无法登录,其他用户可以
vim /etc/vstftpd/user_list #编辑用户暂时黑名单(student)
student 用户无法登录,其他用户可以
(2)白名单
129 userlist_deny=NO #加入这条参数后临时黑名单将变成白名单
测试:
vim /etc/vsftpd/vsftpd.conf
vim /etc/vstftpd/user_list #编辑用户白名单(westos)
只有在白名单中的westos可以登录,其他用户均不可登录
若在永久黑名单和白名单同时写入同一用户,ftpuser优先级更高,所以该用户还是在黑名单中
测试:
以student为例:在ftpuser和user_list写入student
student用户无法登录
9.ftp虚拟用户设定
yum whatprovides */pam_userdb.so #查找软件名称并下载
vim /etc/vsftpd/vsftpd.conf
vim /etc/vsftpd/ftpusers #删除永久黑名单里新添加的本地用户
vim /etc/vstftpd/user_list #删除暂时黑名单里新添加的本地用户
注释掉129行
操作方法:
1.创建虚拟帐号身份
[[email protected] ~]# cd /etc/vsftpd/
[[email protected] vsftpd]# vim userdb
2.加密文件
[[email protected] vsftpd]# db_load -T -t hash -f userdb userdb.db #加密(userdb为明文文件,不安全,需要加密)
[[email protected] vsftpd]# file userdb #查看文件类型(非必须操作)
userdb: ASCII text
[[email protected] vsftpd]# file userdb.db
userdb.db: Berkeley DB (Hash, version 9, native byte-order)
3.设定策略文件
[[email protected] pam.d]# vim ftpuser
account required pam_userdb.so db=/etc/vsftpd/userdb
auth required pam_userdb.so db=/etc/vsftpd/userdb
account #帐号
auth #密码
required #必须要通过验证,否则失败
pam_userdb.so #模块
db=/etc/vsftpd/userdb #名单
4.修改文件配置
vim /etc/vsftpd/vsftpd.conf
127 pam_service_name=ftpuser #指定PAM配置文件,文件在第3步已经创建
128 userlist_enable=YES #允许匿名用户同时登录
129 guest_enable=YES #启动匿名用户
130 guest_username=ftp #虚拟帐号身份指定,ftp是真实存在的用户
systemctl restart vsftpd.service
测试:
排错:
1.密码输入错误
2.虚拟帐号信息未加密
3.策略文件中将加密文件名称写错
4.配置文件编辑错误(后面的YES|NO必须大写,否则重启vsftpd会提示:job of vsftpd.service failed)
5.传输时名称输入错误
10.虚拟帐号家目录设定
(1)虚拟帐号登录使用同一个家目录
[[email protected] pam.d]# mkdir /vftpdir #建立虚拟用户家目录
[[email protected] pam.d]# touch /vftpdir/vftpfile #建立虚拟用户目录
[[email protected] pam.d]# vim /etc/vsftpd/vsftpd.conf
131 local_root=/vftpdir #对虚拟用户默认目录进行设置
[[email protected] pam.d]# systemctl restart vsftpd.service
测试:
(2)虚拟帐号家目录独立设定
131 local_root=/vftpdir/$USER #对虚拟用户目录进行设置
132 user_sub_token=$USER #安全认证
操作步骤:
[[email protected] pam.d]# mkdir /vftpdir #建立虚拟用户家目录
[[email protected] pam.d]# cd /vftpdir/
[[email protected] vftpdir]# mkdir user{1..3} #建立虚拟用户的独立目录
[[email protected] vftpdir]# ll
total 0
drwxr-xr-x 2 root root 6 May 11 10:38 user1
drwxr-xr-x 2 root root 6 May 11 10:38 user2
drwxr-xr-x 2 root root 6 May 11 10:38 user3
[[email protected] vftpdir]# touch user1/user1file #建立属于user1的文件
[[email protected] vftpdir]# touch user2/user2file
[[email protected] vftpdir]# touch user3/user3file
[[email protected] vftpdir]# vim /etc/vsftpd/vsftpd.conf
[[email protected] vftpdir]# systemctl restart vsftpd.service
测试:
11.虚拟帐号配置的独立设置
133 user_config_dir=/etc/vsftpd/conf_dir #虚拟用户权限配置文件/etc/vsftpd/conf_dir目录下
操作步骤:[[email protected] vftpdir]# mkdir /vftpdir/user{1..3}/pub
[[email protected] vftpdir]# vim /etc/vsftpd/vsftpd.conf
[[email protected] vftpdir]# systemctl restart vsftpd.service
[[email protected] vftpdir]# chgrp ftp user{1..3}/pub #改变组为配置文件中已经存在的组
[[email protected] vftpdir]# chmod 775 user{1..3}/pub #修改权限
[[email protected] vftpdir]# mkdir -p /etc/vsftpd/conf_dir
[[email protected] vftpdir]# vim /etc/vsftpd/vsftpd.conf #注释掉上传文件功能,因为虚拟用户使用的是匿名用户,可以查看效果
[[email protected] vftpdir]# systemctl restart vsftpd.service
[[email protected] vftpdir]# vim /etc/vsftpd/conf_dir/user2 #编辑user2的配置文件,只对user2可用,此文件比主配置文件优先级高
anon_upload_enable=YES #可以上传
测试:
匿名用户除了user2可以上传,其他匿名用户都没有权限上传