大家好,又见面了,我是你们的朋友全栈君。
一、概念 1.1介绍 FTP:File transfer protocol 文件传输协议 端口 TCP21:命令 TCP20:数据
1.2原理 默认采用被动模式 被动模式FTP 为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被 动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N >; 1024和N 1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P >; 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N 1到服务器的端口P的连接用来传送数据。 对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP: FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接) FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令) FTP服务器数据端口(>1023)接受客户端端口(>1023)(客户端初始化数据连接到服务器指定的任意端口) FTP服务器数据端口(>1023)到客户端端口(>1023)(服务器发送ACK响应和数据到客户端的数据端口) NFS,基于主机认证,只是局域网之间文件传输 FTP,可以实现用户之间的认证 Real:本地用户 ,服务端用户 匿名用户 虚拟(游客)用户 (只需要一台服务机)
1.3 配置文件 主配置文件: vim /etc/vsftpd/vsftpd.conf 从配置文件 vim /var/ftp/pub 主配置文件详解 anonymous_enable=YES 是否启用匿名用户 local_enable=YES write_enable=YES 允许写入(无论是匿名用户还是本地用户要实现上传就需要快开启它) local_umask=022 默认本地用户上传文件权限755 dirmessage_enable=YES 显示每个目录下的文件信息 xferlog_enable=YES 日志启用 connect_from_port_20=YES 主动请求的数据端口 chown_uploads=YES 所有匿名用户上传的文件所属用户将会被改成chown_username chown_username=whoever 匿名上传的所属用户名是whoever xferlog_file=/var/log/xferlog 启用的日志文件 xferlog_std_format=YES idle_session_timeout=600 空闲连接超时 data_connection_timeout=120 数据连接超时 nopriv_user=ftpsecure 当服务器运行于最底层时使用的用户名 chroot_list_enable=YES chroot_local_user=YES 所有文件列出用户, 可以切换到其他目录 chroot_list_file=/etc/vsftpd/chroot_list listen=NO 服务将自己监听处理listen_ipv6=YES pam_service_name=vsftpd 设置PAM认证模块使用名称预设为vsftpd userlist_enable=YES tcp_wrappers=YES 服务端和客户端访问控制策略(服务器级别的一种防火墙)
二、实验 2.1匿名用户 默认访问/ftp/pub 2.1.1 准备工作 1)安装vsftpd [root@localhost ~]# mount /dev/sr0 /mnt mount: /dev/sr0 is write-protected, mounting read-only [root@localhost ~]# yum install vsftpd –y
2)关闭起vsftpd服务,关闭防火墙和SE linux [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# setenforce 0 [root@localhost ~]# systemctl restart vsftpd
2.1.2下载 虚拟机Ip为192.168.233.131 [root@localhost ~]# mkdir /var/ftp/pub/{1.3}
- 访问window资源管理器 输入ftp://192.168.233.131
2)或者访问浏览器ftp://192.168.233.131/pub/,进行下载
2.1.3 上传 1)修改配置文件/etc/vsftpd/vsftpd.conf相关选项 [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 内容 anon_umask=022(增加) anon_upload_enable=YES(取消注释) anon_mkdir_write_enable=YES(取消注释)
2)重启vsftpd服务 [root@localhost ~]# systemctl restart vsftpd
3)修改目录/var/ftp/pub权限,给目录写权限 [root@localhost ~]# chmod 777 /var/ftp/pub
4)访问window资源管理器 输入ftp://192.168.233.131,进入pub目录底下上传文件
或者访问浏览器ftp://192.168.233.131/pub/,进行上传
2.1.4删除 1)修改配置文件/etc/vsftpd/vsftpd.conf相关选项 [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 增加内容 anon_other_write_enable=YES
2)重启vsftpd服务测试 [root@localhost ~]# systemctl restart vsftpd
2.2 本地用户 2.2.1下载 1)修改主配置文件/etc/vsftpd/vsftpd.conf开启本地用户权限(关闭匿名用户) [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf anonymous_enable=NO
修改布尔值打开/home目录的权限 [root@localhost haha]# getsebool -a | grep ftp_home_dir ftp_home_dir –> off [root@localhost haha]# setsebool -P ftp_home_dir on 2.2.2上传和删除(一样) 1)修改主配置文件/etc/vsftpd/vsftpd.conf开启本地用户权限(默认开启,不用改) [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf write_enable=YES
2)重启服务vsftpd [root@localhost ~]# systemctl restart vsftpd
3)在浏览器访问地址ftp://192.168.233.138查看。用户密码登陆,默认上来是用户的根目录,在资源管理器访问地址ftp://192.168.233.138,进行上传删除
删除
2.2.3遍历 当前用户来回切换文件系统,如果开启,就不能来回切换目录
- 本地用户不能翻目录 chroot_local_user=YES开启代表本地用户不能访问 首先开启chroot选项,allow_writeable_chroot=YES, 再指定本地用户不能访问 [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 增加内容为:开启chroot选项 allow_writeable_chroot=YES 取消注释 指定本地用户不能翻目录 chroot_local_user=YES
重启服务查看
2)指定用户列表文件中用户访问 chroot_list_enable=YES 开启代表用户列表文件/etc/vsftpd/chroot_list中的用户可以访问(在/etc/vsftpd目录下创建文件chroot_list,在文件中写入用户名),未在文件中列出的用户不能访问
首先开启chroot选项,allow_writeable_chroot=YES, 再指定本地用户不能访问 ,chroot_local_user=YES 最后指定用户列表文件的用户可以访问 chroot_list_enable=YES [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 增加内容为:开启chroot选项 allow_writeable_chroot=YES 取消注释 指定本地用户不能翻目录 chroot_local_user=YES 指定用户列表文件的用户可以访问,未在文件中列出的用户不能访问 chroot_list_enable=YES
重启服务,在/etc/vsftpd目录下创建文件chroot_list,在文件中写入用户名xixi,xigua [root@localhost ~]# systemctl restart vsftpd [root@localhost vsftpd]# cd [root@localhost ~]# cd /etc/vsftpd/ [root@localhost vsftpd]# vim chroot_list xixi xigua
创建用户xixi,xigua(用户在列表文件中),密码为redhat,访问浏览器ftp://192.168.233.138查看,可以访问 [root@localhost vsftpd]# echo redhat | passwd –stdin xigua 更改用户 xigua 的密码 。 passwd:所有的身份验证令牌已经成功更新。 [root@localhost vsftpd]# echo redhat | passwd –stdin xixi 更改用户 xixi 的密码 。 passwd:所有的身份验证令牌已经成功更新。
创建用户hh(用户不在列表文件中)密码为redhat,访问浏览器ftp://192.168.233.138查看,不能访问 [root@localhost ~]# useradd hh [root@localhost ~]# echo redhat | passwd –stdin hh 更改用户 hh 的密码 。 passwd:所有的身份验证令牌已经成功更新。
2.3游客用户(虚拟用户) 2.3.1原理 在linux,使用vsftp建立用户后,默认使用ftp访问的时候,是访问对应的用户家目录。想要多个用户同时访问一个目录,同时对同一目录有着不同的权限,这些设定只能通过vsftp中的虚拟用户来进行设定,普通用户无法达到这样的效果。 首先通过建立一个普通系统用户,建立家目录,然后将所有的虚拟用户映射到对应的普通系统用户家目录,然后对各虚拟用户进行权限控制,虚拟用户没有查看目录的权限。
1)创建系统用户ftp,修改用户ftp家目录权限 [root@localhost ~]# useradd -s /sbin/nologin ftp [root@localhost ~]# chmod 704 /home/ftp
2)修改主配置文件 [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf #增加内容 guest_enable=YES guest_username=ftp #本地虚拟用户特权开启 virtual_use_local_privs=YES 重启服务 [root@localhost ~]# systemctl restart vsftpd
3)创建虚拟用户文件, [root@localhost ~]# cd /etc/vsftpd/ [root@localhost vsftpd]# vim ftp ftp1 redhat ftp2 redhat ftp3 redhat [root@localhost ~]# cd /etc/vsftpd/ [root@localhost vsftpd]# vim ftp [root@localhost vsftpd]# db_load -T -t hash -f ftp ftp.db [root@localhost vsftpd]# chmod 600 ftp.db [root@localhost vsftpd]# ll -Z ftp.db -rw——-. root root unconfined_u:object_r:etc_t:s0 ftp.db
[root@localhost vsftpd]# vim /etc/pam.d/vsftpd auth required pam_userdb.so db=/etc/vsftpd/ftp account required pam_userdb.so db=/etc/vsftpd/ftp
[root@localhost vsftpd]# systemctl restart vsftpd
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/157903.html原文链接:https://javaforall.cn