当前位置: 首页 > backend >正文

Linux:ftp 配置实验

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

操作系统:rocky Linux 9.5

实验目的:
1. 了解 FTP 服务器工作原理
2. 能够安装 FTP 服务器的软件
3. 能够配置常用 FTP 服务

一、安装vsftpd服务

# 安装vsftpd(用于虚拟用户)
sudo yum install vsftpd  -y# 启动服务并设置开机自启(可选)
sudo systemctl start vsftpd
sudo systemctl enable vsftpd# 开放防火墙FTP服务(可选)
sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --reload


二、配置匿名用户访问

1.修改配置文件 /etc/vsftpd/vsftpd.conf

sudo vim /etc/vsftpd/vsftpd.conf

找到并修改以下参数:

# 允许匿名登录
anonymous_enable=YES
# 允许匿名用户上传          
anon_upload_enable=YES
# 允许匿名用户创建目录       
anon_mkdir_write_enable=YES   
# 匿名用户上传文件权限掩码(文件644,目录755)
anon_umask=022
# 允许匿名用户其他写操作              
anon_other_write_enable=YES

2.创建匿名用户上传目录并设置权限

sudo mkdir -p /var/ftp/pub
sudo chown ftp:ftp /var/ftp/pub    # 目录所有者设为ftp用户
sudo chmod 777 /var/ftp/pub        # 确保目录可执行(比较危险,这只是为了实验的测试)

3. 创建匿名用户本地目录并设置权限

sudo mkdir -p /home/download
sudo chmod 777 /home/download    # 确保目录可执行(比较危险,这只是为了实验的测试)

4.处理SELinux(若未启用可以跳过,有部分是没有这个问题的)

sudo setsebool -P allow_ftpd_anon_write=1  # 允许匿名写入
sudo restorecon -Rv /var/ftp/pub           # 重置SELinux上下文
#如果遇到登录成功并且可以下载但是无法上传(553)再使用以下命令
sudo setsebool -P ftp_home_dir on
#或者临时关闭
setenforce 0
处理前:可以登录下载,但是无法上传 

处理后:可以登录下载和上传

5.重启服务

sudo systemctl restart vsftpd

6.测试匿名登录

# 使用ftp客户端连接(用户名为anonymous,密码为空直接按enter就行)
ftp localhost

7.上传和下载完整的操作(我下载的是a.txt上传的是mylocal.txt):

测试之前确保有所需的文件,如果没有的话需要先创建如/home/download下需要有mylocal.txt, /var/ftp/pib 下需要有a.txt文件

连接到 FTP 服务器

定位到自己的下载目录(就是下载的文件要存在哪里)
lcd /home/download      #本地的下载目录
  定位到需要下载内容的目录(就是需要的资源在的地址)
dir #默认在根目录的情况
#或者知道地址的话直接
cd 资源地址

然后选择需要的资源位置
cd pub #进入资源下载目录

 开始测试下载和上传(结果如下)

三、配置本地用户访问

1.修改配置文件 /etc/vsftpd/vsftpd.conf

sudo vim /etc/vsftpd/vsftpd.conf

添加或修改以下参数:

#chroot_local_user=YES        # 将用户锁定在家目录(可选)
#allow_writeable_chroot=YES   # 允许chroot目录可写(可选)#以下应该是默认的,需要检查一下是不是有,注意不要直接粘贴配置(如有重复会报错的)
# 启用本地用户登录FTP服务器,设为YES表示允许
local_enable=YES 
# 设置本地用户创建文件的默认权限掩码,022表示创建文件权限为644,目录权限为755
local_umask=022 
# 指定PAM服务名称为vsftpd,用于用户认证等相关功能
pam_service_name=vsftpd 

注意:如果自己配置不好用户列表的话请不要启用

因为,用户列表的工作模式

vsftpd 的用户列表有两种工作模式,这取决于 userlist_deny 配置项的值:

拒绝模式(userlist_deny=YES,默认)

在这种模式下,userlist_file 文件里列出的用户会被禁止登录 FTP 服务器。例如,若 userlist_file 文件内容如下:

user1
user2

那么 user1 和 user2 就无法登录 FTP 服务器,而其他用户只要通过身份验证就可以登录。

允许模式(userlist_deny=NO

在这种模式下,只有 userlist_file 文件里列出的用户才能登录 FTP 服务器。比如 userlist_file 文件内容如下:

user3
user4

那么只有 user3 和 user4 可以登录 FTP 服务器,其他用户即使身份验证通过也无法登录。

2.创建本地用户并限制登录Shell

# 创建用户ftpuser,禁止其登录系统  
#用户的登录 shell 模式设定为:/sbin/nologin 
sudo useradd -m -s /sbin/nologin ftpuser  
sudo passwd ftpuser  # 设置密码(如12345678)

注意:ftpuser 在 /home/ftpuser 

3.重启服务

sudo systemctl restart vsftpd

有可能会无法登录或者是密码验证失败, 概率最大的问题可能是PAM的配置(如果登录失败请按如下设置,成功的话请忽略):

 调整 PAM 配置
编辑 /etc/pam.d/vsftpd,将 auth required pam_shells.so 注释掉或修改为 auth required pam_nologin.so,允许 nologin shell 的用户认证:

sudo vi /etc/pam.d/vsftpd

找到相关行,添加 # 注释:

# auth required pam_shells.so

4.测试本地用户登录

ftp localhost
# 输入用户名ftpuser和密码,测试上传/下载

登录成功结果:

下载测试和上传测试:

四、配置虚拟用户访问

安装数据库工具

sudo dnf install libdb-utils -y

创建虚拟用户账号文件

sudo vim /etc/vsftpd/users.txt
# 格式:单数行用户名,双数行密码(例如):
user1
password1
user2
password2
#例子(密码至少8位否则会报错的这个错误查了1个多小时才发现。开始设置成6位一直报错,难绷)U001
11111111
U002
22222222
U003
33333333

 生成虚拟用户数据库文件

sudo db_load -T -t hash -f /etc/vsftpd/users.txt /etc/vsftpd/users.db
sudo chmod 600 /etc/vsftpd/users.*  # 限制文件权限(可选)

配置PAM认证

sudo vim /etc/pam.d/vsftpd
# 注释所有原有内容,添加以下两行:
auth    required    pam_userdb.so db=/etc/vsftpd/users
account required    pam_userdb.so db=/etc/vsftpd/users

创建映射的本地用户(用于虚拟用户文件存储)

sudo useradd -d /var/ftp/virtual -s /sbin/nologin virtual_ftp
sudo mkdir -p /var/ftp/virtual
sudo chown virtual_ftp:virtual_ftp /var/ftp/virtual
#sudo chmod 755 /var/ftp/virtual  #保证绝对可用(仅测试)对于不知道权限的可以这样,知道的话可以按需求来

修改配置文件 /etc/vsftpd/vsftpd.conf
添加以下参数:

guest_enable=YES                
# 启用虚拟用户
guest_username=virtual_ftp     
# 虚拟用户映射到本地用户virtual_ftp
pam_service_name=vsftpd         
# 指定PAM配置文件
virtual_use_local_privs=YES

 

重启服务

sudo systemctl restart vsftpd

测试虚拟用户登录(注意请确保 (临时关闭SELinux))

ftp localhost
# 输入用户名user1和密码password1,测试上传/下载

结果如下: 

 

http://www.xdnf.cn/news/2762.html

相关文章:

  • terraform使用workspace管理多工作环境
  • List--链表
  • 【C++ 核心知识点面试攻略:从基础到实战(上位机开发视角)】
  • Linux调试器 - gdb使用指南
  • 【虚幻5蓝图Editor Utility Widget:创建高效模型材质自动匹配和资产管理工具,从3DMax到Unreal和Unity引擎_系列第二篇】
  • Rabbitmq下载和安装(Windows系统,百度网盘)
  • SQL Server 存储过程开发规范
  • 普通IT的股票交易成长史--20250428晚
  • InferType和_checked_type的区别?
  • 开发vue项目所需要安装的依赖包
  • leetcode128-最长连续序列
  • 聊天室系统:多任务版TCP服务端程序开发详细代码解释
  • Qt C++数据库实验
  • FPGA-数字时钟
  • whois为什么有时会返回两个不同的域名状态
  • 【Linux】Java 开发者的 Linux 常用命令指南
  • 2024ICPC成都题解
  • Golang实现函数默认参数
  • 人工智能数学基础(一):人工智能与数学
  • 动态规划问题 -- 斐波那契数列模型(解码方法)
  • etcd 的安装及使用
  • 软件评测师考点重点知识
  • ubuntu安装docker,conda,tmux,btop,nvitop
  • 一种用于从视网膜图像中识别疾病的 BERT 式自监督学习 CNN
  • 大模型训练平台:重构 AI 研发范式的智慧基建
  • MCU内存映射技术详解
  • python数据分析(五):Pandas 数据检索技术
  • 鸢尾花(Iris)数据集的多模型分类与可视化分析工具
  • openai agents sdk实战-基于Ollama+qwen2.5+milvus+bge-large-zh-v1.5实现本地知识库
  • 在 C# .NET 中驾驭 JSON:使用 Newtonsoft.Json 进行解析与 POST 请求实战