ftp服务及配置
目录
FTP介绍
FTP文件传输协议(File Transfer Protocol),用于Internet上的控制文件的双向传输,是一个应用程序。工作在TCP/IP协议族的应用层,其传输层协议是TCP协议,目的在于提高文件传输的共享性和可靠性,是基于客户/服务器模式工作的
FTP协议
FTP会建立两个连接,将命令与数据分开传输,正是因为这样,提高了传输效率。
连接端口 | 作用 |
---|---|
控制端口:21 | 基于tpc协议,建立控制连接 |
传输端口:20 | 上传/下载文件 |
每一个FTP命令发送后,FTP服务器就会返回一个字符串,其中包含一个响应码和一些说明信息,其中响应码主要用于判断命令是否被成功执行。
FTP客户端与服务端的沟通流程
步骤:
- 建立控制连接
客户端以一个随机端口(大于1023)以TCP层根据服务器的IP,三次握手之后与服务端的21端口建立连接。这个TCP连接称为控制连接,用户发出的FTP命令和服务器的回应都是依靠该连接来传送的,在用户退出前一直存在。
- 建立数据连接
在控制连接的基础上,客户端会以控制连接的随机端口+1的端口号来对服务端进行连接
- 关闭FTP
当用户退出FTP时,客户端发送退出命令,之后控制连接被关闭,FTP服务结束。
文件传输方式
传输方式 | 解释 |
---|---|
ASCLL传输方式 | 文件传输时FTP会自动调整文件的内容以便于把文件解析为另外那台计算机存储文本文件的格式。 |
二进制传输方式 | 二进制传输时,在拷贝任何非文本文件时,FTP会逐字拷贝,不会对这些文件进行处理。 |
文件传输模式
Port模式(主动模式)
- 三次握手建立控制连接,PortA 为随机端口号
- 由于客户端的端口是随机的,所以客户端要先告知服务端自己的控制传输的端口号
- 服务端根据提供的端口号主动连接客户端
Passive模式(被动模式)
- 客户端传输PASV给服务端,表明这是一次被动传输
- 由于被动模式的服务端端口号是随机的,所以服务端需要告知客户端传输控制的端口号
- 客户端得知端口号后,访问服务端
认证方式
- 匿名登录
- 服务器上系统用户登录
- 虚拟账户登录
三种登录方式的服务配置及实例
匿名登录
[root@localhost ~]# yum install -y vsftpd 安装服务 [root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf 修改主配置文件 ...... anonymous_enable=YES ...... local_umask=022 anon_umask=022 为上传的文件设置默认权限 ...... anon_upload_enable=YES 设置上传权限 # ...... # new directories. anon_mkdir_write_enable=YES 为ftp用户设置写权限 anon_other_write_enalbe=YES 为ftp账户设置删除权限 [root@localhost vsftpd]# setfacl -m u:ftp:rwx /var/ftp/pub/ 设置文件特殊控制,将匿名用户ftp设置与共享文件的高级权限 [root@localhost vsftpd]# getfacl /var/ftp/pub/ getfacl: Removing leading '/' from absolute path names # file: var/ftp/pub/ # owner: root # group: root user::rwx user:ftp:rwx group::r-x mask::rwx other::r-x [root@localhost vsftpd]# systemctl enable --now vsftpd 启动服务
windows效果
windows上传文件
系统用户登录
[root@localhost vsftpd]# useradd ftp_user 添加用户,共享用户的家目录 [root@localhost vsftpd]# id ftp_user uid=1002(ftp_user) gid=1002(ftp_user) groups=1002(ftp_user) [root@localhost vsftpd]# passwd ftp_user 为用户设置密码 Changing password for user ftp_user. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully
windows效果
上传文件
linux服务端查看上传的文件
[root@localhost vsftpd]# ll /home/ftp_user total 0 drwxr-xr-x. 2 ftp_user ftp_user 6 Oct 14 16:09 新文件夹
虚拟账户登录
[root@localhost ~]# useradd -d /var/ftproot/ -s /sbin/nologin test [root@localhost ~]# id test uid=1003(test) gid=1003(test) groups=1003(test) 创建系统用户。家目录即为共享目录 vsftpd配置目录下新建虚拟账户及密码 [root@localhost vsftpd]# vim vu.list it 123456 it2 123456 it3 123456 [root@localhost vsftpd]# db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db 对虚拟账号进行加密操作 [root@localhost vsftpd]# chmod 600 vu.* 安全起见,为两个用户文件设置权限 [root@localhost vsftpd]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak 备份用户配置文件 [root@localhost pam.d]# vim vsftpd #%PAM-1.0 auth required pam_userdb.so db=/etc/vsftpd/vu account required pam_userdb.so db=/etc/vsftpd/vu 为虚拟用户进行认证 [root@localhost pam.d]# cd /etc/vsftpd/ [root@localhost vsftpd]# vim vsftpd.conf ....... # Make sure, that one of the listen options is commented !! listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES guest_enable=YES guest_username=test 指定用户名 user_config_dir=/etc/vsftpd/share_dir 指定虚拟账户配置文件的地址 allow_writeable_chroot=YES [root@localhost vsftpd]# cd /etc/vsftpd/share_dir/ [root@localhost share_dir]# touch it 在配置文件下新建单个虚拟账户的配置文件 [root@localhost share_dir]# vim it anon_upload_enable=YES 为虚拟用户it配置上传权限 anon_mkdir_write_enable=YES 写入权限
windows效果
利用虚拟用户it登录共享目录,并写入123文件
ftp服务常见参数
参数名称 | 含义 |
---|---|
anonymous_enable=YES | 允许匿名用户登录 |
anon_upload_enable=YES | 允许匿名用户上传 |
anon_mkdir_write_enable=YES | 允许匿名用户创建目录 |
anon_other_write_enable=YES | 允许匿名用户删除目录 |
allow_writeable_chroot=YES | 允许被禁锢的用户家目录有写权限 |
local_umask=022 | 设置上传遮罩码 |
chroot_local_user=YES | 禁锢所有的ftp本地用户于家目录中 |
参数实例
anonymous_enable 是否允许匿名登录
默认不允许匿名方式登录
修改配置文件
[root@localhost pam.d]# !vim vim /etc/vsftpd/vsftpd.conf ...... # # Allow anonymous FTP? (Beware - allowed by default if you comment this out). anonymous_enable=YES 设置为YES ......
anon_upload_enable 是否允许匿名用户上传文件
默认并无权限上传文件
修改配置文件
...... # When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_ full_access anon_upload_enable=YES 允许用户上传 ......
anon_mkdir_enable 是否允许匿名用户创建文件
修改配置文件
...... [root@localhost pam.d]# !vim vim /etc/vsftpd/vsftpd.conf # Uncomment this if you want the anonymous FTP user to be able to create # new directories. anon_mkdir_write_enable=YES 修改为允许上传 ......
anon_other_write_enable 是否允许匿名用户删除文件
修改配置文件
[root@localhost pam.d]# !vim vim /etc/vsftpd/vsftpd.conf ...... # Uncomment this if you want the anonymous FTP user to be able to create # new directories. anon_mkdir_write_enable=YES anon_other_write_enable=YES 添加删除文件权限
新建文件夹已被删除
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
· 从 Windows Forms 到微服务的经验教训