目录
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 添加删除文件权限
新建文件夹已被删除