1.什么是FTP协议?
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一
FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端
其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源
在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上
由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议
默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息
但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关
如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定
同大多数Internet服务一样,FTP也是一个客户/服务器系统
用户通过一个客户机程序连接至在远程计算机上运行的服务器程序
依照 FTP 协议提供服务,进行文件传送的计算机就是 FTP服务器
而连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端
用户要连上FTP 服务器,就要用到 FTP 的客户端软件,通过lftp命令连接
2.ftp服务的基本信息
软件安装包 | vsftpd |
---|---|
默认发布目录 | /var/ftp |
默认发布目录的子目录 | /var/ftp/pub/ |
协议接口 | 21/tcp |
服务配置文件 | /etc/vsftpd/vsftpd.conf |
3.安装ftp服务(搭建ftp服务器)以及进行测试 ,lftp其实是一个客户端
测试可以用真机, 也可以用所安装ftp服务的本机进行测试
一台主机可以同时当客户端和服务端
步骤一:yum install vsftpd lftp -y 安装vsftpd服务 与 lftp客户端
步骤二:systemctl start vsftpd 开启vsftpd服务,
systemctl enable vsftpd 设置开机启动
步骤三:rpm -ql vsftpd 看该服务的安装目录 /var/ftp /var/ftp/pub
rpm -qc vsftpd 看该服务的配置文件 /etc/vsftpd/vsftpd.conf
步骤四:在火墙里面添加ftp服务
firewall-cmd --list-all
firewall-cmd --perman ent --add-service=ftp
firewall-cmd --relaod
步骤五:验证ftp服务器是否搭建成功
lftp 172.25.254.111 登陆ftp服务器相当于以匿名用户身份登陆
这里的匿名用户就相当于ftp用户
4.vsftpd服务的配置参数
主机以什么样的身份登陆ftp服务器,这些均需要在ftp服务器的客户端配置文件里面设置 在配置文件/etc/vsftpd/vsftpd.conf当中修改配置参数,每次修改完配置文件重启才会生效 vim /etc/vsftpd/vsftpd.conf systemctl restart vsftpd
报错id的解析:
500 | 文件系统权限过大 |
---|---|
530 | 用户认证失败 |
550 | 服务本身功能未开放 |
553 | 本地文件系统权限过小 |
(1)匿名用户的相关设定
匿名用户登陆限制
编辑 : vim /etc/vsftpd/vsftpd.conf 文件
anonymous_enable=YES|NO
注意:修改完参数需重启服务 systemctl restart vsftpd
当参数为NO,表示匿名用户不可登陆
当参数为YES,表示匿名用户可以登陆
local_enable=YES #表示本地用户可以登陆
local_enable=NO #表示本地用户不能登陆
write_enable=YES #本地用户可写
write_enable=NO #本地用户不可写
anon_upload_enable=YES #表示匿名用户可写,YES表示开启,但默认不开启
chmod 775 /var/ftp/pub/ #修改该目录对组用户可写
chgrp ftp /var/ftp/pub #修改该目录组用户为ftp
anon_upload_enable=NO #表示匿名用户不可写,默认不开启
anon_world_readable_only=NO #设定为no,表示匿名用户可以下载,默认没有,需手动添加
anon_world_readable_only=YES #设定为YES,表示匿名用户不可以下载
anon_mkdir_write_enable=YES #匿名用户可建立目录
anon_other_write_enable=YES #匿名用户可删除目录,或对目录重命名
anon_umask=022 #修改默认上传文件的权限,默认为600,修改后为744
anon_root=/westos #修改匿名用户登陆的默认所在的目录
anon_max_rate=102400 #设置最大传输速率为100k
max_clients=2 #限制最多可以连接服务器的客户端的数量为2
当连接第三个时,会显示连接不上
本地用户相关参数的设定
local_root=/westos #修改本地用户登陆的家目录为/westos
chroot_local_user=YES #将本的用户锁在家目录,不能浏览家目录之外的目录
chmod u-w /home/* #将/home目录下的uid写写权限去掉
chroot_local_user=NO #将本地用户可以浏览家目录之外的目录
限制某个用户只能访问家目录,不能访问其他目录,但对其他用户不影响
首先创建一个新用户,并修改用户密码,
将lee用户uid 可写权限消除,要不然不能登陆
chmod u-w /home/lee
设定限制特定用户锁定家目录参数
chroot_local_user=NO #设定所有用户都可以访问其他目录
chroot_list_enable=YES #
chroot_list_file=/etc/vsftpd/chroot_list #设定用户不可以访问其他目录名单
/etc/vsftpd/chroot_list这个文件默认不存在,需手动建立/etc/vsftpd/chroot_list,添加限制用户锁定家目录黑名单用户lee
重启服务systemctl restart vsftpd ,使其生效,黑名单建立成功
为启用限制用户锁定黑名单lee之前,可以访问根目录
启用限制用户锁定黑名单lee之后,不能访问根目录
但student 用户不受限制,可以访问根目录
设定限制特定用户可以访问其他目录,默认用户限制锁定 家目录
chroot_local_user=YES #设定所有用户都不可以登陆
chroot_list_enable=YES #
chroot_list_file=/etc/vsftpd/chroot_list #设定用户可以登陆名单
/etc/vsftpd/chroot_list这个文件默认不存在,需手动建立/etc/vsftpd/chroot_list,添加不受限制锁定家目录的白名单用户lee
重启服务systemctl restart vsftpd ,使其生效,白名单建立成功
未启用白名单之前lee用户不可访问根目录,其他用户可以访问,启用之后,只有lee用户可以访问根目录,其他用户不能访问根目录,只能锁定在家目录
设定登陆用户的黑白名单
永久黑名单:/etc/vsftpd/ftpusers #添加黑名单用户,eg:student
即该即生效 ,不需重启服务
临时黑名单:/etc/vsftpd/user_list ##添加黑名单用户,eg:lee
即该即生效 ,不需重启服务
将临时黑名单user_list修改为白名单
临时黑名单:/etc/vsftpd/user_list ##添加白名单用户,eg:lee
vim /etc/vsftpd/vsftpd.conf 文件
添加:userlist_deny=NO
重启服务:systemctl restart vsftpd
可以看到只有lee用户可以登陆,student用户不可以登陆
ftp虚拟用户的设定,创建虚拟帐号身份
步骤一:vim /et c/vsftpd/v_users #文件名称任意,编辑以下内容(虚拟用户名,以及密码)
步骤二:对 /etc/vsftpd/v_users 文件进行加密
db_load -T -t hash -f v_users v_users.db
步骤三:将加密文件v_users.db 指定到策略文件中
编辑 vim /etc/pam.d/ftpuser #文件名称任意
添加 account required pam_userdb.so db=/etc/vsftpd/v_users
auth required pam_userdb.so db=/etc/vsftpd/v_users
步骤三:编辑vsftpd主配置文件,更改认证方式
vim /etc/vsftpd/vsftpd.conf 添加以下内容
pam_service_name=ftpuser
guest_enable=YES
guest_username=ftp
重启服务:systemctl restart vsftpd.service
测试
虚拟用户家目录独立设定
步骤一:准备工作:
mkdir /var/ftpuserdir/user{1..3} -p
mkdir /var/ftpuserdir/user{1..3}/pub -p
touch /var/ftpuserdir/user1/user1file
touch /var/ftpuserdir/user2/user2file
touch /var/ftpuserdir/user3/user3file
步骤二:编辑配置文件
vim /etc/vsftpd/vsftpd.conf
添加:
local_root=/var/ftpuserdir/$USER #将虚拟用户的家目录分别指向自己的家目录
user_sub_token=$USER #使$USER参数生效
重启服务:systemctl restart vsftpd.service
测试
虚拟用户授权独立
chmod 775 /var/ftpuserdir/user{1..3}/pub #更改虚拟用户家目录下的pub目录权限
chgrp ftp /var/ftpuserdir/ -R #修改虚拟用户家目录所属组
到此任一虚拟用户都可以上传文件
如何指定虚拟用户上传,其他虚拟用户不可上传呢?
步骤一:
编辑vim /etc/vsftpd/vsftpd.conf 文件
注释掉之前对任意用户设定参数的影响
添加: user_config_dir=/dir/vsftpd/user_config
步骤二:
mkdir -p /dir/vsftpd/user_config #建立设置目录
cd /dir/vsftpd/user_config
vim user2 #建立你所需要指定用户为名的文件,写入上传功能的参数 anon_upload_enable=YES
重启服务:systemctl restart vsftpd.service
测试:可见只有用户user2可以上传,用户user1和user2不可以上传