准备工作
检查是否有安装vsftpd
# 执行命令无输出,表示没有安装
rpm -qa | grep vsftp
如果已经安装,则不需要再重复安装,到此结束。
检查是否有db_load
# 执行命令有输出,表示已安装
db_load

如果没有安装,则执行命令进行安装
yum -y install db4
关闭SElinux
# 临时关闭
setenforce 0
# 永久关闭
vi /etc/sysconfig/selinux
# SELINUX=enforcing 改为 SELINUX=disabled

下载vsftpd( 这 是 我 使 用 的 版 本 v s f t p d − 3.0.2 − 25. e l 7. x 86 _ 64. r p m \color{red}{这是我使用的版本 vsftpd-3.0.2-25.el7.x86\_64.rpm} 这是我使用的版本vsftpd−3.0.2−25.el7.x86_64.rpm)并上传到服务器
安装vsftpd
# 注意需要将安装包名称替换成自己下载的包名称
rpm -ivh vsftpd-3.0.2-25.el7.x86_64.rpm

如
果
安
装
报
错
\color{red}{如果安装报错}
如果安装报错
error: Failed dependencies:
xxxxxx is need by ${vsftpd包名}
则执行如下命令,进行安装时不再分析包之间的依赖关系(自己试过不分析包的方式安装,暂未发现问题)
rpm -ivh vsftpd-3.0.2-25.el7.x86_64.rpm --nodeps --force
配置vsftpd
新建一个宿主用户,用于vsftpd虚拟用户登录关联映射
# 添加名为ftpuser的宿主用户
useradd -g root -M -d /home/vsftpd -s /sbin/nologin ftpuser
# 给宿主用户设置密码
passwd ftpuser
mkdir /home/vsftpd
chown -R ftpuser.root /home/vsftpd
生成虚拟用户数据文件
- 进入vsftpd配置文件目录
cd /etc/vsftpd/ vi vuser_passwd添加虚拟用户数据, 奇 数 行 为 用 户 名 , 偶 数 行 为 用 户 名 密 码 \color{red}{奇数行为用户名,偶数行为用户名密码} 奇数行为用户名,偶数行为用户名密码readwriteUser 123 readUser 123
- 使用db_load生成用户数据文件
db_load -T -t hash -f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db
配置虚拟用户验证文件
- 备份文件/etc/pam.d/vsftpd,
注
意
:
文
件
名
可
能
不
叫
这
个
,
需
要
进
入
到
/
e
t
c
/
p
a
m
.
d
目
录
进
行
查
看
具
体
文
件
名
\color{red}{注意:文件名可能不叫这个,需要进入到/etc/pam.d目录进行查看具体文件名}
注意:文件名可能不叫这个,需要进入到/etc/pam.d目录进行查看具体文件名,因为在网上看到有叫vsftpd.vu的
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak vi /etc/pam.d/vsftpd清空vsftpd的内容,加如下内容
说明:/etc/vsftpd/vuser_passwd路径是刚才生成的用户数据文件去掉**.db**后缀后的路径#%PAM-1.0 auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd account required pam_userdb.so db=/etc/vsftpd/vuser_passwd
配置vsftpd
- 备份文件/etc/vsftpd/vsftpd.conf
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak - 清空/etc/vsftpd/vsftpd.conf的内容
echo '' > vsftpd.conf - 添加如下内容
local_enable=YES # 这里的写包括了执行命令,所以不能直接设置为NO write_enable=YES anon_umask=022 # 不允许匿名登录 anonymous_enable=NO # ** 启用宿主用户 ** guest_enable=YES # ** 宿主用户名 ** guest_username=ftpuser # ** 刚才配置的虚拟用户验证文件的名字 ** pam_service_name=vsftpd # 将用户限制在其主目录下 chroot_local_user=NO # 当用户被限制在其主目录下时,允许执行写操作 allow_writeable_chroot=YES chroot_list_enable=NO # ftp根目录 local_root=/data/ftp/ # 日志文件保存路径 xferlog_file=/etc/vsftpd/logs/xferlog # 用户单独配置文件存放目录,该目录下用户的文件名就是对应用户名 user_config_dir=/etc/vsftpd/vuser_conf - 如果需要对用户进行特殊的配置,可在 vsftpd.conf中的user_config_dir对应的目录, 新建一个和虚拟用户名相同的文件,进行单独处理。
由于我的虚拟用户有readwriteUser和readUser
分别进行配置
readwriteUser
- 进入虚拟用户配置文件存放目录
cd /etc/vsftpd/vuser_conf - 新建readwriteUser文件
vi readwriteUser - 加入如下内容
local_root=/data/ftp/ anon_world_readable_only=NO chroot_local_user=YES write_enable=YES local_umask=022 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
readUser
- 新建readUser文件
vi readUser - 加入如下内容
# 设置readUser的根目录 local_root=/data/ftp/aa anon_world_readable_only=NO local_umask=022 # 不允许上传 anon_upload_enable=NO # 不允许新建文件夹 anon_mkdir_write_enable=NO # 不允许其他的写操作 anon_other_write_enable=NO
启动
# 为什么执行restart而不是start,因为restart的时候,没有启动会自己启动,启动了会停掉服务重新启动
systemctl restart vsftpd.service
测试
-
添加测试数据
cd /data/ftp echo "this is index" > index.txt mkdir aa echo aa > aa/aa.txt mkdir aa/bb echo bb > aa/bb/bb.txt chown -R ftpuser /data/ftp -
使用readwriteUser登录并上传文件

-
使用readUser登录并测试上传文件

问题总结
1、pam_service_name设置存在问题,因为/etc/pam.d/下面对应的文件可能不是vsftpd.vu,而是vsftpd
2、500 OOPS: vsftpd: refusing to run with writable root inside chroot (),因为vsftpd的检查机制,使得被限制用户主目录的用户,不能拥有写权限。 需 要 加 上 a l l o w _ w r i t e a b l e _ c h r o o t = Y E S \color{red}{需要加上allow\_writeable\_chroot=YES} 需要加上allow_writeable_chroot=YES
3、虚拟用户登录后,出现空白页。因为SELinux开启的原因,所以需要关闭SELinux
本文详述了如何在服务器上安装和配置VSFTPD,包括检查与安装VSFTPD,关闭SELinux,创建虚拟用户,生成用户数据文件,配置PAM认证,设置vsftpd.conf文件,以及处理配置过程中遇到的问题,如读写权限和SELinux影响等。

1538

被折叠的 条评论
为什么被折叠?



