Linux复习笔记(四) 网络服务配置(ftp)

 遇到的问题,都有解决方案,希望我的博客能为你提供一点帮助。

二、网络服务配置

2.4 ftp服务配置

2.4.1 ftp服务基础概览(了解)

FTP(File Transfer Protocol,文件传输协议)定义了一个在远程计算机系统和本地计算机系统之间传输文件的标准,工作在应用层使用TCP传输控制协议在不同的主机之间提供可靠的数据传输。由于TCP是一种面向连接的、可靠的传输协议,因此FTP可提供可靠的文件传输。FTP支持断点续传功能,可以大幅地减低CPU和网络带宽的开销。

​2.4.1.1 ftp的作用

​跨平台文件传输​

  • FTP支持异构系统间的文件传输(如Windows与Linux),允许用户通过客户端软件对远程服务器进行文件操作(上传、下载、删除、重命名等),解决了不同操作系统文件格式兼容性问题

​高效资源共享​

  • ​公共资源分发​​:通过匿名FTP(用户名为“anonymous”,密码为邮箱地址),用户无需注册即可访问服务器上的公共目录,常用于软件、文档等资源的开放共享
  • ​企业内部分享​​:企业可通过FTP服务器集中管理项目文档、设计图纸等,员工通过权限控制访问特定目录,提升协作效率

​网站维护与内容更新​

  • 开发者常利用FTP将网页文件上传至Web服务器,确保网站内容的实时更新。其高传输效率尤其适合大文件(如图片、视频)的批量上传

​网络管理优化​

  • FTP支持带宽控制和用户权限分级(如Real账户、Guest用户),管理员可限制不同用户的文件操作权限,增强服务器安全
2.4.1.2 ​​安全性缺陷​

FTP未加密传输数据(包括密码),易受中间人攻击,因此衍生出FTPS(SSL/TLS加密)和SFTP(基于SSH)等安全协议 

2.4.2 ftp的工作原理​(掌握)

FTP基于​​客户-服务器模型(c/s),依赖TCP协议保障传输可靠性,通过两个独立连接实现功能

2.4.2.1 客户端-服务器模型(c/s)(了解)

​服务器端​

  • FTP服务器运行服务软件(如vsftpd),监听TCP端口21(控制连接)
  • 负责用户身份验证(如Real账户、Guest用户、Anonymous匿名用户)及权限管理
  • 支持文件存储、目录操作(创建/删除/重命名)和文件传输任务

​客户端​

  • 通过客户端软件(如FileZilla、WinSCP)或命令行工具连接服务器
  • 发送FTP命令(如USERPASSRETRSTOR)并接收服务器响应
2.4.2.2 ​​双连接机制​(掌握)
  • ​控制连接​​:默认使用TCP 21端口,用于传输命令(如USER、PASS)和响应码(如200表示成功)。该连接在会话期间持续保持
  • ​数据连接​​:负责实际文件传输,端口根据工作模式动态分配。传输完成后立即关闭,避免资源占用
2.4.2.3 ​​两种工作模式​(掌握)

​主动模式(PORT)​

  • 客户端通过控制连接告知服务器自身的数据端口(如随机端口X),服务器主动从20端口向X端口发起数据连接。此模式在客户端防火墙拦截入站连接时可能失败

​被动模式(PASV)​

  • 客户端发送PASV命令后,服务器开启随机高端口(如5000)并返回给客户端,客户端主动连接该端口。此模式穿透防火墙能力更强,适用于NAT环境

主动模式工作原理图示:

当需要传递数据的时候,由客户端发送PORT指令通知服务器建立数据连接的端口。 服务器主动建立数据连接,且每次数据传递完毕后,连接都被拆除,当有下一次数据传递时,FTP server必须和客户端建立一个新的连接用来传送数据。 主动模式下服务器使用的数据连接端口为20。 

被动模式工作原理图示:

 被动模式下,数据连接有客户端主动创建,服务器被动接受; 被动模式下,服务器的数据连接端口不是20,而是一个随机端口。  很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式。

​2.4.2.4 文件类型与传输控制​(了解)
  • ​传输类型​​:支持ASCII(文本文件自动转换行尾符)、二进制(非文本文件原样传输)、EBCDIC(大型机专用)三种模式
  • ​错误处理​​:通过响应码(如550表示文件不可用)反馈操作状态,客户端可据此调整策略(如重试或终止)
2.3.2.5 ftp经典消息 (了解)
消息号含义
120服务在多少分钟内准备好
125数据连接已经打开,开始传送
150文件状态正确,正在打开数据连接
200命令执行正确
202命令未被执行,该站点不支持此命令
211系统状态或系统帮助信息回应
212目录状态
213文件状态
214帮助消息。关于如何使用本服务器或特殊的非标准命令
220对新连接用户的服务已准备就绪
221控制连接关闭
225数据连接打开,无数据传输
226正在关闭数据连接。请求的文件操作成功
消息号含义
227进入被动模式
230用户已登录。如果不需要可以退出
250请求的文件操作完成
331用户名正确,需要输入密码
332需要登录的账户
350请求的文件操作需要更多的信息
421服务不可用,控制连接关闭或连接超时
425打开数据连接失败
426连接关闭,传送中止
450请求的文件操作未被执行
451请求的操作中止。发生本地错误
452请求的操作未被执行。系统存储空间不足。文件不可用
500语法错误,命令不可识别。可能为命令行过长
501因参数错误导致的语法错误
502命令未被执行
503命令顺序错误
504由于参数错误,命令未被执行

2.4.3 ​​用户认证与权限管理​(掌握)

​用户分类​​:

  • Real账户:拥有完整权限(上传、删除等),通常对应系统真实用户
  • Guest用户:权限受限,仅能访问指定目录
  • Anonymous用户:仅允许下载公共资源
用户模式定义权限特点安全性适用场景优点缺点
匿名用户模式无需提供有效凭据,用预设通用用户名(如 anonymous 或 ftp),无需密码访问 FTP 服务器仅允许下载公共目录文件,禁止上传、删除、修改风险较高,因无需认证且操作受限易被攻击公共资源分发(如软件下载、文档共享)配置简单,便于快速共享资源功能受限,存在恶意上传等滥用风险
本地用户模式使用服务器操作系统中真实用户账户登录,账户信息存于 /etc/passwd 和 /etc/shadow可访问系统用户家目录,权限由系统账户权限决定,支持读写、删除等操作较高,但权限配置不当可能导致系统级安全漏洞企业内部文件管理、需精细权限控制场景灵活性强,支持复杂权限分配(如限制登录时间、带宽)需维护系统账户,用户管理成本高,存在系统入侵风险
虚拟用户模式独立于系统账户的专用 FTP 用户,通过数据库或文件存储认证信息,映射到某个系统用户(如 virftp)每个虚拟用户可绑定独立目录和权限(如仅允许上传到指定文件夹)最高,虚拟用户无系统级权限,凭证泄露也难操作服务器其他资源多用户共享环境(如企业客户文件托管)、需严格隔离权限场景安全性强,用户隔离性好,配置灵活配置复杂(需数据库管理或 PAM 认证),维护成本较高

2.4.4 ftp服务配置过程

2.4.4.1 安装vsftp服务
sudo yum install vsftpd 
​2.4.4.2主配置文件参数(/etc/vsftpd/vsftpd.conf)
参数解析
anonymous_enable是否允许匿名访问,yes 为允许,no 为拒绝
anon_upload_enable是否允许匿名用户上传文件,yes 为允许,no 为拒绝
anon_mkdir_write_enable是否允许默认用户创建文件夹,yes 为允许,no 为拒绝
anon_umask匿名用户上传文件的 umask 值
anon_other_write_enable允许匿名用户修改目录名称或删除目录
guest_enable是否开启用户身份验证,yes 为开启,no 为关闭
guest_username映射登录的用户的身份为 guest,配合上面选项生效
anon_root设定匿名用户登录的主目录位置
anon_max_rate匿名用户的最大传输速率
参数解析
chown_uploads值为 YES 时,需与 chown_username 成对出现。表示上传文件后,文件所有者变为 chown_username 指定的值(此处为 whoever),且不能重新上传覆盖该文件
chown_username需与 chown_uploads 成对出现。值为 whoever,即上传文件后文件所有者变为 whoever,且不能重新上传覆盖该文件
pam_service_name列出与 vsftpd 相关的 PAM 文件,值为 vsftpd
userlist_enable是否启用用户列表,值为 YES 表示启用
userlist_deny

如果userlist_deny=YES,那么在userlist_file(默认为/etc/vsftpd/users_list)文件中列出的用户将被拒绝访问 FTP 服务器,即这些用户为黑名单用户。

如果userlist_deny=NO(这是默认值),那么userlist_file中列出的用户则为白名单用户,只有在这个文件中列出的用户才能访问 FTP 服务器,其他未列出的用户将被拒绝访问。

userlist_file指定用户列表文件为 /etc/vsftpd/users_list
local_enable是否允许本地用户登录,值为 YES 表示允许,值为 NO 表示拒绝
write_enable全局用户是否可以读写,值为 YES 表示允许,值为 NO 表示拒绝
local_umask默认掩码,创建文件权限为 777 减去该值(此处为 022),即文件权限为 755;创建目录权限为 666 减去该值,即目录权限为 644 ,值为 022
参数解析
local_root设定本地用户登录的主目录位置,值为 /var/ftp
pasv_enable是否启用被动模式,值为 YES 表示启用
port_enable此参数在注释中提到,port 为主动模式(与 pasv 被动模式不能同时使用),但未设置具体值,仅作说明
pasv_min_port使用被动模式时,端口范围的最小值,值为 9000
pasv_max_prot使用被动模式时,端口范围的最大值,值为 9200(你原文可能是 “pasv_max_port” 拼写错误),且只能在被动模式下使用
use_localtime是否使用本地时间,值为 YES 表示使用,值为 NO 表示不使用
chroot_local_user是否锁定所有系统用户在家目录中,值为 YES 表示锁定
dirmessage_enable是否在进入目录时显示.message 文件的内容,值为 YES 表示显示
xferlog_enable默认上传或者下载的日志是否记录在 /var/log/vsftpd.log 中,值为 YES 表示记录
connect_from_port_20是否用 20 端口作为数据传输端口,值为 YES 表示使用
参数解析
chroot_list_enable是否锁定用户在家目录。取值为 YES 时,chroot_list 文件中列出的用户不被锁定;取值为 NO 时,chroot_list 文件中列出的用户会被禁锢在其家目录中,有默认值(未明确默认值具体是什么)
ftpd_banner用于自定义 ftp 登录时显示的提示信息,当前设置为 "welc ftp server" (可能是 "welcome ftp server" 的拼写错误)
max_clients表示 FTP 服务器允许的最大并发连接数,值为 0 表示不限制(一般来说,0 常表示无限制)
max_per_ip表示每个 IP 地址同时可以发起的最大连接数,值为 0 表示不限制
local_max_rate表示本地用户的最大传输速率,值为 0 表示不限制传输速率
2.4.4.3 设置匿名登录

FTP的访问地址为:ftp://localhost

ftp服务器端:
#修改主配置文件
/etc/vsftpd/vsftpd.conf

匿名用户配置文件: 

# 启用FTP服务器监听功能,使其可以接收外部连接请求
listen=YES
# 允许匿名用户登录FTP服务器
anonymous_enable=YES
# 指定匿名用户登录后所处的根目录
anon_root=/var/ftp/user
# 开启全局写权限,允许用户执行上传等写操作
write_enable=YES
# 允许匿名用户进行文件上传操作
anon_upload_enable=YES
# 设置匿名用户上传文件或目录的默认权限掩码(文件644,目录755)
anon_umask=022
# 允许匿名用户创建新目录
anon_mkdir_write_enable=YES
# 禁止匿名用户执行除上传和创建目录之外的其他写操作(如删除、重命名)
anon_other_write_enable=NO
#创建匿名用户的根目录
sudo mkdir /var/ftp/user/anonymous
#设置权限
sudo chown ftp.ftp /var/ftp/user
#在匿名用户根目录里添加测试上传用的文件
sudo vim  /var.ftp/user/anonymous/anonymous.txt
#为了测试先关闭SELinux
sudo setenforce 0
#重启vsftpd
sudo systemctl restart vsftpd 
ftp客户端:
#安装ftp
sudo yum install ftp
#创建本地下载路径(用来存放从ftp服务器上下载的文件)
sudo mkdir /home/download
#创建本地文件用于测试上传
sudo vim /home/download/a.txt
#ftp 连接 实际需要是  ftp 服务器的IP
ftp localhost 
#输入用户名
annoymous
#密码一般直接回车就行

上传和下载测试:

#下载 定位的先前设置的下载路径
lcd /home/download
#列出ftp服务器目录下文件
ls
#前往需要下载的文件所处的位置
cd anonymous 
#下载测试
get anonymos.txt
#上传测试
put a.txt
测试结果:

2.4.4.4 设置实名用户登录

FTP的访问地址为:ftp://localhost:2222

部署要求:

目录属主权限
/var/ftp/deprootrootrwxr-xr-x
/var/ftp/dep/jsygjsrwxrwxr-x
用户部门家目录
yg技术部js /var/ftp/dep/js
服务器端:
#创建js组
sudo groupadd js
#创建实名用户并指定组和根目录
sudo useradd -m -d /var/ftp/dep/js -g js yg
#设置密码
sudo echo 88888888 | passwd --stdin yg
#设置实名用户根目录属主和组
sudo chown yg.js /var/ftp/dep/js

创建实名用户配置文件

#创建实名用户配置文件
sudo vim /etc/vsftpd/vsftpd2222.conf
# 使FTP服务器监听在指定的IP地址和端口上(监听IPv4),开启监听功能
listen=YES
# 允许本地用户登录FTP服务器
local_enable=YES
# 开启写权限,允许用户执行上传等写操作,此处疑似有误(正确值应为YES ,当前为VFS )
write_enable=YES
# 设置本地用户上传文件或创建目录时的默认权限掩码,002意味着上传文件权限为664,目录权限为775
local_umask=002
# 指定PAM(可插拔认证模块)服务名称,用于用户认证
pam_service_name=vsftpd
# 设置本地用户登录后的根目录为/var/ftp/dep
local_root=/var/ftp/dep
# 启用用户列表功能
userlist_enable=YES
# 如果为YES,用户列表中的用户将被拒绝访问;如果为NO,只有用户列表中的用户能访问
userlist_deny=YES
# 指定用户列表文件的路径,该文件包含允许或拒绝访问的用户名单
userlist_file=/etc/vsftpd/user_list
# 指定用户配置文件所在目录,可针对不同用户设置特定配置
user_config_dir=/etc/vsftpd/userconf
# 将本地用户限制在其家目录中,增强安全性
chroot_local_user=YES
# 启用chroot列表功能
chroot_list_enable=YES
# 指定chroot列表文件路径,列在该文件中的用户不会被限制在其家目录
chroot_list_file=/etc/vsftpd/chroot_list
# 设置FTP服务器监听的端口号为2222
listen_port=2222

创建专属用户配置目录和文件,并向其中分别输入根目录

#创建实名用户配置目录
mkdir /etc/vsftpd/userconf
#实名用户配置文件
vim /etc/vsftpd/userconf/gy
#设置根目录
local_root=/var/ftp/dep/js
#允许在根目录上传
allow_writeable_chroot=YES
#允许yg 不在家目录
echo "yg" >  /etc/vsftpd/chroot_list
#使用实名用户配置文件
sudo vsftpd /etc/vsftpd/vsftpd2222.conf
#启动
sudo systemctl restart vsftpd
客户端: 
#登录
ftp localhost 2222
#其他测试在测试结果中
 测试结果如下:

2.4.4.5 设置虚拟用户登录

FTP的访问地址为:ftp://localhost:8080

服务器端: 
#创建虚拟用户文件 / 目录下
sudo vim company.txt

 虚拟用户文件

虚拟创建存放虚拟用户的文件添加虚拟用户时,单行写用户名,双行写密码

yg
88888888
yy
88888888
#生成虚拟用户数据库文件
sudo db_load -T -t hash -f ~/company.txt /etc/vsftpd/vusers.db

一点小基础: 

  • 虚拟用户本身不是系统真实用户,需要映射到一个系统中存在的账号才能正常工作。可以创建 ftpvuser 这样的实名用户提供这样一个映射载体,让虚拟用户有对应的实体依托,以便 FTP 服务器通过它来管理虚拟用户的访问、权限等相关事宜 。

#创建虚拟映射用户
sudo useradd -m -d /var/ftp/company ftpuser
#创建公司目录
sudo mkdir -p /var/ftp/comany/{js,cp}
#设置属主和组
sudo chown -R ftpuser.ftpuser /var/ftp/company
#设置权限
sudo chmod 775 -R /var/ftp/company
#如果需要设置用户被限制在根目录的话需要移除w
sudo chmow a-w /var/ftp/company

 为虚拟用户建立PAM认证文件/etc/pam.d/vsftpd.virtual

#为虚拟用户建立PAM认证文件/etc/pam.d/vsftpd.virtual
sudo vim /etc/pam.d/vsftpd.virtual
#%PAM-1.0
auth    required    pam_userdb.so db=/etc/vsftpd/vusers
account required    pam_userdb.so db=/etc/vsftpd/vusers

 创建vsftpd服务的主配置文件/etc/vsftpd/vsftpd_vuser.conf

#创建vsftpd服务的主配置文件/etc/vsftpd/vsftpd_vuser.conf
sudo vim /etc/vsftpd/vsftpd_vuser.conf

配置文件: 

# 监听IPv4地址,设置为YES表示开启监听
listen=1
 
listen_port=8080

# 不监听IPv6地址,设置为NO表示关闭监听
listen_ipv6=NO
 
# 允许从20端口发起连接,设置为YES表示开启
connect_from_port_20=YES
 
# 启用异步支持
async_abor_enable=YES

# 启用ASCII模式上传
ascii_upload_enable=YES

# 启用ASCII模式下载
ascii_download_enable=YES
 
# 禁止匿名用户登录,设置为NO表示关闭匿名登录功能
anonymous_enable=NO
 
# 启用本地用户登录,设置为YES表示允许本地用户登录
local_enable=YES
 
# 设置本地用户登录后的根目录为 /var/ftp/depcenter/unions
local_root=/var/ftp/dep/company

# 启用写权限,设置为YES表示允许用户进行写操作
write_enable=YES
 
# 禁止匿名用户上传文件,设置为NO表示关闭匿名上传功能
anon_upload_enable=NO
 
# 禁止匿名用户创建目录并写入,设置为NO表示关闭相关功能
anon_mkdir_write_enable=NO
 
# 禁止匿名用户其他写操作,设置为NO表示关闭相关功能
anon_other_write_enable=NO
 
# 设置本地用户创建文件的默认权限掩码为022
local_umask=022
 
# 不改变上传文件的属主,设置为NO表示关闭相关功能
chown_uploads=NO
 
# 启用用户列表功能,设置为YES表示开启
userlist_enable=YES
 
# 用户列表为黑名单模式,设置为YES表示userlist_file中的用户禁止登录FTP
userlist_deny=YES
 
# 指定用户列表文件路径,该文件中的用户登录会受上述规则限制
userlist_file=/etc/vsftpd/user_list
 
# 不禁用本地用户的家目录登出(不锁定本地用户在家目录),设置为NO表示不锁定
chroot_local_user=NO
 
# 启用chroot列表功能,设置为YES表示开启
chroot_list_enable=YES
 
# 指定chroot列表文件路径,该文件中的用户会被锁定在家目录
chroot_list_file=/etc/vsftpd/chroot_list
 
# 不支持递归列出目录(不支持ls -R),以优化服务器性能,设置为NO表示关闭该功能
ls_recurse_enable=NO
 
# 设置PAM服务名称,指定用户认证相关配置文件为/etc/pam.d/vsftpd.virtual
pam_service_name=/etc/pam.d/vsftpd.virtual
 
# 启用目录消息功能,设置为YES表示开启
dirmessage_enable=YES
 
# 启用传输日志功能,设置为YES表示开启
xferlog_enable=YES
 
# 传输日志采用标准格式,设置为YES表示开启
xferlog_std_format=YES
 
# 指定传输日志文件路径
xferlog_file=/var/log/vsftpd.log
 
# 启用虚拟用户功能,设置为YES表示开启
guest_enable=YES
 
# 设置虚拟用户对应的系统用户名(映射账号)为ftpvuser
guest_username=ftpvuser
 
# 虚拟用户使用本地用户权限,设置为YES表示开启
virtual_use_local_privs=YES
 
# 指定用户个性化配置文件所在目录
user_config_dir=/etc/vsftpd/vconf

 配置FTP虚拟用户的个性化权限

 创建配置模板:

#vsftpd 目录下
sudo vim js.conf.template
# 注释,表明该配置文件模板的名称
#js. c o n f. t e m p l a t e 
# 设置本地用户登录后的根目录为 /var/ftp/depcenter/unions/xzunion
local_root=/var/ftp/dep/company/js
# 禁止匿名用户登录,设置为NO表示不允许匿名用户访问
anonymous_enable=NO 
# 启用写权限,设置为YES表示允许用户进行写操作,如上传文件等
write_enable=YES 
# 设置本地用户创建文件的默认权限掩码为002,即文件默认权限为664
local_umask=002 
# 禁止匿名用户上传文件,设置为NO表示不允许匿名上传
anon_upload_enable=NO 
# 禁止匿名用户创建目录并写入,设置为NO表示不允许相关操作
anon_mkdir_write_enable=NO 
# 设置空闲会话超时时间为600秒,超过该时间未活动的会话将被断开
idle_session_timeout=600 
# 设置数据连接超时时间为120秒,超过该时间未进行数据传输的连接将被断开
data_connection_timeout=120 
# 设置最大并发连接数为10,即同时最多允许10个客户端连接
max_clients=10 
# 设置每个IP地址同时发起的最大连接数为5
max_per_ip=5 
# 设置本地用户的最大传输速率为50000字节每秒
local_max_rate=50000 
#vsftpd 目录下
sudo vim cp.conf.template
#cp 虚拟用户配置模板
# 指定用户登录后的根目录(chroot目录)
local_root=/var/ftp/dep/company/cp

# 禁用匿名访问,仅允许虚拟用户登录
anonymous_enable=NO

# 允许用户上传/修改文件
write_enable=YES

# 设置文件创建掩码(umask 002 → 文件权限 664,目录权限 775)
local_umask=002

# 不禁用所有用户的chroot(由chroot_list控制)
chroot_local_user=NO

# 启用chroot列表功能
chroot_list_enable=YES

# 指定chroot列表文件路径(该文件中的用户将被限制在家目录)
chroot_list_file=/etc/vsftpd/chroot_cp_list

# 禁止匿名用户上传文件
anon_upload_enable=NO

# 禁止匿名用户创建目录
anon_mkdir_write_enable=NO

# 空闲会话超时时间(秒)
idle_session_timeout=600

# 数据连接超时时间(秒)
data_connection_timeout=120

# 最大并发连接数
max_clients=10

# 每个IP的最大连接数
max_per_ip=5

# 本地用户最大传输速率(字节/秒)
local_max_rate=50000
#创建用户配置目录
sudo mkdir /etc/vsftpd/vconf/
#用模板配置用户
sudo cp -p cp.conf.template /etc/vsftpd/vconf/cp
sudo cp -p js.conf.template /etc/vsftpd/vconf/js

 创建/etc/vsftpd/chroot_cp_list

#创建/etc/vsftpd/chroot_cp_list
sudo vim /etc/vsftpd/chroot_cp_list
yy
#使用配置文件
 sudo vsftpd /etc/vsftpd/vsftpd_vuser.conf
#暂时关闭SELinux
sudo setenforce
#重启
sudo systemctl restart vsftpd
客户端:
#登录
ftp localhost 8080
测试结果如下: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愚戏师

多谢道友

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值