FTP文件传输协议(File Transfer Protocol),用于Internet上的控制文件的双向传输,是一个应用程序。工作在TCP/IP协议族的应用层,其传输层协议是TCP协议,目的在于提高文件传输的共享性和可靠性,是基于客户/服务器模式工作的
FTP会建立两个连接,将命令与数据分开传输,正是因为这样,提高了传输效率。
连接端口 | 作用 |
---|---|
控制端口:21 | 基于tpc协议,建立控制连接 |
传输端口:20 | 上传/下载文件 |
每一个FTP命令发送后,FTP服务器就会返回一个字符串,其中包含一个响应码和一些说明信息,其中响应码主要用于判断命令是否被成功执行。
步骤:
客户端以一个随机端口(大于1023)以TCP层根据服务器的IP,三次握手之后与服务端的21端口建立连接。这个TCP连接称为控制连接,用户发出的FTP命令和服务器的回应都是依靠该连接来传送的,在用户退出前一直存在。
在控制连接的基础上,客户端会以控制连接的随机端口+1的端口号来对服务端进行连接
当用户退出FTP时,客户端发送退出命令,之后控制连接被关闭,FTP服务结束。
传输方式 | 解释 |
---|---|
ASCLL传输方式 | 文件传输时FTP会自动调整文件的内容以便于把文件解析为另外那台计算机存储文本文件的格式。 |
二进制传输方式 | 二进制传输时,在拷贝任何非文本文件时,FTP会逐字拷贝,不会对这些文件进行处理。 |
[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 新文件夹
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=ftp_user 指定用户名
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文件
原文:https://www.cnblogs.com/sawyer95/p/13816637.html