23.Linux : ftp服务及配置详解

发布于:2025-08-15 ⋅ 阅读:(16) ⋅ 点赞:(0)

Linux : ftp服务及配置详解

FTP 基本概念
  • 定义:文件传输协议(File Transfer Protocol),采用 C/S 模式工作。
  • 端口
    • 控制端口:21
    • 数据端口:20
FTP 工作原理
模式 工作流程 连接发起方
主动模式 (Standard) 1. 客户端从随机高端口 N 发送 PORT 命令到服务端 21 端口 2. PORT 命令包含客户端数据端口 N+1 3. 服务端用 20 端口连接客户端的 N+1 端口,如果传输数据则需要重新与客户端建立新的连接传输数据 服务端 → 客户端
被动模式 (Passive) 1. 客户端发送 PASV 命令到服务端 21 端口 2. 服务端随机开启高端口 P,并通过 PORT 命令告知客户端 3. 客户端用 N+1 端口连接服务端的 P 端口,被动模式不需要重新与服务器建立新连接 客户端 → 服务端

不同点:
传输数据的连接方式不同:主动模式是服务端向客户端发起数据连接,
而被动模式是客户端向服务端发起数据连接。

相同点:
都是使用21号控制端口进行用户验证和管理。

FTP服务部署

关闭防火墙和selinux

1.安装vsftpd软件包

yum install vsftpd -y
rpm -q vsftpd
vsftpd-3.0.2-25.el7.x86_64 #查看是否安装

2.vsftpd的主配置文件

vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES  #是否允许匿名用户登录
local_enable=YES 	#允许本地用户登录ftp
write_enable=YES	#ftp用户是否有写入权限
local_umask=022		#创建文件的umask值
anon_upload_enable=YES	#是否允许匿名用户上传文件
anon_mkdir_write_enable=YES  #是否允许匿名用户创建目录
anon_other_write_enable=YES	 #是否允许匿名用户能够删除或者重命名文件,目录
xferlog_enable=YES      #控制文件在传输过程中是否被日志记录
connect_from_port_20=YES	#使用20端口传输
chown_uploads=YES       #匿名用户上传文件的所有者为FTP
chown_username=whoever  #whoever修改为ftp用户,匿名用户上传文件的所有者将变成该FTP用户。
xferlog_file=/var/log/xferlog #设置传输文件日志的位置
idle_session_timeout=600   #超过600s空闲自动断开连接
data_connection_timeout=120   #控制数据连接建立后120秒内无交互时,自动断开连接。
deny_email_enable=YES   #禁止下载文件到邮箱
chroot_local_user=YES   #ftp用户是否能够离开自己的家目录,yes表示禁止ftp用户离开自己的家目录
chroot_list_enable=YES  #列表中的ftp用户能否离开家目录,通常与下条命令配合使用
chroot_list_file=/etc/vsftpd/chroot_list #ftp的用户列表

如果想要单个ftp用户能够访问其他目录,其他所有ftp用户只能在自己的家目录,则开启上面三条命令,并且在ftp用户列表中写上能够访问其他目录的ftp用户,如果chroot_local_user=YES和chroot_list_enable=YES都是yes,则只有用户列表中的用户能够访问其他目录;如果chroot_local_user=YES,chroot_list_enable=NO,则所有用户都不能离开自己的家目录;
如果chroot_local_user=NO,chroot_list_enable=YES,则只有用户列表中的用户不允许访问其他目录,其他用户都能够访问其他目录

方法2:

[root@xieyuhui vsftpd]# ls
chroot_list  ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh

查看/etc/vsftpd/目录下的文件,ftpusers和user-list是ftp用户黑名单,默认禁止列表里的这些用户访问ftp,如果想要个别用户能够访问ftp,需要在user-list中写下这个用户,ftpusers中不写这个用户,然后在在vsftpd.conf配置文件中写入userlist_deny=NO,拒绝访问的优先级>允许访问的优先级,所以原来的用户依旧不能访问ftp,而新用户因为不在ftpusers里面,所以能够访问ftp服务

练习

在FTP服务器创建3个用户分别为ftpuser1 ,ftpuser2,ftpuser3,密码设置为redhat

在客户端安装lftp软件包

在这里插入图片描述

1.设置允许匿名用户访问FTP服务器(本次使用centos7版本,默认允许匿名用户访问ftp服务器,因此不做更改)

2.设置允许匿名用户访问FTP服务器时能够在/var/ftp/pub目录下进行文件上传

首先需要让/var/ftp/pub的其他用户有对此目录的写入权限,但如果直接给其他用户权限就太大了,我们可以直接设置ftp用户有对此目录的读写权限

setfacl -m u:ftp:rwx /var/ftp/pub/

修改配置文件

vim  /etc/vsftpd/vsftpd.conf
write_enable=YES  	#写入权限
anon_upload_enable=YES	#匿名用户上传文件的权限

重启服务

systemctl restart vsftpd

在这里插入图片描述

匿名用户成功上传文件

3,设置允许匿名用户访问FTP服务器时能够在/var/ftp/pub目录下创建目录

编辑vsftpd配置文件

vim /etc/vsftpd/vsftpd.conf
     anon_mkdir_write_enable=YES  #允许匿名用户创建目录

重启服务

在这里插入图片描述

成功创建目录(不能创建文件)

4.设置允许匿名用户访问FTP服务器时能够对/var/ftp/pub目录中的文件或目录进行重命名或删除操作

编辑vsftpd配置文件

vim /etc/vsftpd/vsftpd.conf
		anon_other_write_enable=YES  #允许匿名用户进行重命名或删除

重启服务

在这里插入图片描述

在这里插入图片描述

5.设置允许FTP用户访问FTP服务器(默认允许访问,因此不做配置)

6.设置FTP用户访问FTP服务器时,将部分FTP用户访问的目录限制在自己的主目录中,其他FTP用户仍然可以访问其他目录

将ftpuser1和ftpuser2限制,ftpuser3可以访问其他目录

方法1:

编辑ftp用户列表,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了
如果检查发现还有写权限,就会报该错误。

cd /etc/vsftpd/
vim chroot_list
	ftpuser1
	ftpuser2  #一行一个用户

编辑vsftpd配置文件

vim vsftpd.conf
	chroot_list_enable=YES
   chroot_list_file=/etc/vsftpd/chroot_list
   allow_writeable_chroot=YES #列表中的用户不允许访问其他目录

重启服务

在这里插入图片描述

在这里插入图片描述

方法2:

在ftpusers里面写上ftpuser1和ftpuser2,在user-list里面写上ftpuser3,然后在配置文件里面加上userlist_deny=NO

在这里插入图片描述

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到