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,测试上传/下载
结果如下: