文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,也是网络上常用的最老的网络协议之一,它使用客户/服务器模式。它属于网络传输协议的应用层。
FTP服务器的名称为vsftpd,它代表Very Secure File Transfer Protocol Damon。默认配置文件让anonymous用户(匿名用户)只能下载位于chroot目录中的内容。
/var/ftp/这意味着远程ftp客户端能以anonymous用户或ftp身份连接到服务器(无需密码),并从ftp服务器上的/var/ftp/目录下载文件(其本地ftp用户可以读取这些文件)
与大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。
匿名FTP
使用FTP时必须首先登录,在远程主机上获得相应的权限以后,方可下载或上传文件。也就是说,要想同哪一台计算机传送文件,就必须具有哪一台计算机的适当授权。换言之,除非有用户ID和口令,否则便无法传送文件。这种情况违背了Internet的开放性,Internet上的FTP主机何止千万,不可能要求每个用户在每一台主机上都拥有帐号。匿名FTP就是为解决这个问题而产生的。
当远程主机提供匿名FTP服务时,会指定某些目录向公众开放,允许匿名存取。系统中的其余目录则处于隐匿状态。作为一种安全措施,大多数匿名FTP主机都允许用户从其下载文件,而不允许用户向其上传文件,也就是说,用户可将匿名FTP主机上的所有文件全部拷贝到自己的机器上,但不能将自己机器上的任何一个文件拷贝至匿名FTP主机上。即使有些匿名FTP主机确实允许用户上传文件,用户也只能将文件上传至某一指定上传目录中。随后,系统管理员会去检查这些文件,他会将这些文件移至另一个公共下载目录中,供其他用户下载,利用这种方式,远程主机的用户得到了保护,避免了有人上传有问题的文件,如带病毒的文件。
1)部署前我们需要先关闭selinux【内核级加强型火墙】
vim /etc/sysconfig/selinux ##disabled
getenforce ##查看状态是否改变
reboot ##重启系统
yum install vsftpd -y ##需提前搭建好yum源,详情可参考作者前面关于yum源搭建的博客
systemctl start vsftpd
systemctl enable vsftpd ##设置服务开机自启
systemctl status vsftpd
yum install lftp -y
3)设置火墙永久允许ftp服务
方法一:命令设置
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
![firewall-config](https://img-blog.csdnimg.cn/2019021401024415.png)
在下图中选择【Permanent】,在【Options】中选择第一项
firewall-cmd --list-all ##查看是否设置成功
lftp 172.25.254.106
lftp 172.25.254.106:~> ls
软件安装包:vsftpd
默认发布目录:/var/ftp
协议接口:21/tcp
服务配置文件: /etc/vsftpd/vsftpd.conf
报错id解析:
id | 含义 |
---|---|
500 | 文件系统权限过大 |
530 | 用户认证失败 |
550 | 服务功能未开放 |
553 | 本地文件系统权限过小 |
配置文件内容解释
vim /etc/vsftpd/vsftpd.conf ------>配置文件
命令 | 功能 |
---|---|
anonymous_enable=YES/NO | 匿名用户是否可以登陆 |
local_enable=YES/NO | 本地用户是否可以登陆 |
write_enable=YES | ftp是否对登陆用户可写 |
anon_upload_enable=YES/NO | 匿名用户是否可以上传 |
anon_root=/direcotry | 匿名用户家目录修改 |
anon_mkdir_write_enable=YES | 匿名用户建立目录 |
anon_other_write_enable=YES | 匿名用户删除 |
anon_umask=xxx | 匿名用户上传文件默认权限修改 |
anon_world_readable_only=YES/NO | 匿名用户下载,设定参数为NO表示匿名用户可以下载 |
chown_uploads=YES | |
chown_username=student | 匿名用户使用的用户身份修改 |
anon_max_rate=102400 | 最大上传速率 |
下面我们将用实验来一一验证
@@@@匿名用户相关设定@@@@
1)设定匿名用户是否可以登陆
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO ##设定匿名用户不可登陆
systemctl restart vsftpd ##重启服务
local_enable=YES/NO ##本地用户是否可以登录
3)修改匿名用户上传权限
关闭时,出现550报错——功能未开放
write_enable=NO
anon_upload_enable=NO
write_enable=YES
anon_upload_enable=YES
chgrp ftp /var/ftp/pub
chmod 775 /var/ftp/pub
anon_root=/mnt ##配置文件里没有该信息,需要自行添加设置
anon_umask=022 ##配置文件里没有该信息,需要自行添加设置
修改前
修改后——之前上传的文件权限和修改后上传的文件权限不同
6)匿名用户建立文件
anon_mkdir_write_enable=YES
anon_world_readable_only=YESdd|NO ##no表示匿名用户可以下载,配置文件里没有该信息,需要自行添加设置
anon_other_write_enable=YES|NO ##配置文件里没有该信息,需要自行添加设置
chown_uploads=YES
chown_username=student
chown_upload_mode=0777 ##配置文件里没有该信息,需要自行添加设置
anon_max_rate=102400 ##102400大概200KB的速度
max_clients=2 ##一次最多连接2个用户
@@@@本地用户相关设定@@@@
1)登陆权限和写权限
local_enable=YES/NO ##本地用户登录限制
write_enable=YES/NO ##本地用户写权限限制
修改后:成功执行删除操作
local_root=/dir ##配置文件里没有该信息需自行添加
local_umask=777
4)限制本地用户浏览/目录
chroot_local_user=YES ##所有用户被锁定到自己的家目录中
用户不能有写的权限否则会报错500
chmod u-w /home/*
5)本地用户黑名单的建立
chroot_local_user=NO ##NO表示下面的路径为黑名单
chroot_list_enable=YES ##表示开启黑白名单功能
chroot_list_file=/etc/vsftpd/chroot_list ##黑名单路径
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
7)限制本地用户登陆
/etc/vsftpd/ftpusers ##永久黑名单
vim /etc/vsftpd/vsftpd.conf
userlist_deny=NO ##临时黑名单变为白名单
1.创建虚拟用户身份
1)建立虚拟用户名单
vim /etc/vsftpd/userfile ##文件名随意
2)将其用hash加密变为db
db_load -T -t hash -f /etc/vsftpd/userfile /etc/vsftpd/userfile.db
vim /etc/pam.d/ftpuser ##名称随便写
account required pam_userdb.so db=/etc/vsftpd/userfile
帐号 认证方式 认证插件 db文件
auth required pam_userdb.so db=/etc/vsftpd/userfile
认证 认证方式 认证插件 db文件
4)改动主配置文件
vim /etc/vsftpd/vsftpd.conf
pam_service_name=ftpuser ##认证方式(改变认证方式后之前的用户无法登录,可将其之前的认证文件 加入新的文件中即可)
guest_enable=YES ##打开虚拟用户功能
guest_username=ftp ##给虚拟用户一个身份
systemctl restart vsftpd
2.虚拟用户指定家目录
1)建立家目录内容
mkdir /var/ftpuserdir/westos{1..3} -p ##【-p】表示同步权限
mkdir /var/ftpuserdir/westos{1..3}/pub
mkdir /var/ftpuserdir/westos1/snow1
mkdir /var/ftpuserdir/westos2/snow2
mkdir /var/ftpuserdir/westos3/snow3
2)改写主配置文件
local_root=/var/ftpuserdir/$USER ##登陆后查看自己的家目录
user_sub_token=$USER ##认证shell内的$
3)重启ftp服务
systemctl restart vsftpd
测试:
3.虚拟帐户配置独立的功能
1)给/pub相应的权限
ls -lr /var/ftpuserdir/ftpuser{1..3}
chmod 775 /var/ftpuserdir/westos*/pub
chgrp ftp /var/ftpuserdir/westos*/pub
下图中可见 /var/ftpuserdir/westos*文件所属组以已更改,且登陆后文件所属组ID为50,查看可知为ftp
2)建立新的一个配置文件
mkdir -p /etc/vsftpd/user_config
vim /etc/vsftpd/user_config/westos1 ##westos1为新建文件,文件名随意
3)改写主配置文件,重启服务
vim /etc/vsftpd/vsftpd.conf ##设置虚拟用户独立配置路径
测试:仅有westos1上传文件成功