跳至主要內容

vsftpd

chanchaw大约 4 分钟linuxcentos

概述

文本文档中可通过组合键 esc+gg+dG 清空当前文档中的所有内容 以下方法来自:https://juejin.cn/post/7005405184864026654?searchId=202311140749124794E55F2D4145B1ED2B 注意下面的方法修改了 fpt 默认端口号2110012,同时由于采用了被动模式还有数据传输端口 20011 - 20020 也要在路由器中设置端口转发,做法同转发21端口 外网访问端口转发的内网ftp服务器方法:ftp://你的域名:10012//

安装部署

# 安装,如果之前已经安装想要卸载那么:yum remove vsftpd
yum install -y vsftpd

# 执行下面批量命令修改配置文件 vsftpd.conf 内容,替换为以下选项
# 下面配置中有暂时不存在的目录,没关系后面会有代码创建
cat > /etc/vsftpd/vsftpd.conf << EOF
# 禁止匿名登录(默认为YES)
anonymous_enable=NO
# 允许linux系统用户登录
local_enable=YES
# 允许linux用户上传文件(默认已经有了该项)
write_enable=YES
dirmessage_enable=YES
#从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录
#不能再具有写权限了!如果检查发现还有写权限,就会报该错误,加入如下配置则可解决此问题
allow_writeable_chroot=YES
chroot_list_enable=NO
chroot_local_user=YES
# FTP传输模式分为主动、被动模式
# 主动模式下:服务端默认开启 21连接端口 20数据传输端口(客户端随机生成数据端口与20端口进行数据交互)
# 被动模式下:服务端默认开启 21连接端口 数据传输端口(大于1024,小于5000区间的端口,需开启指定范围内)在配置文件中自己维护
pasv_enable=YES
# 外网地址(如果允许外部访问FTP服务,则必须指定此属性,否则无法访问FTP文件目录)
#pasv_address=IP地址
# 数据传输最小端口
pasv_min_port=20011
# 数据传输最达端口
pasv_max_port=20020
listen=YES
# 与FTP服务端建立连接端口(默认21)
listen_port=10012
virtual_use_local_privs=NO
# 如果使用vsftp的是本地用户
#local_umask=022
# 如果使用vsftp的是虚拟用户
anon_umask=022
userlist_enable=NO
# 开启系统用户身份映射
guest_enable=YES
# 当前shell所在的系统用户
guest_username=root
# FTP进程服务名
pam_service_name=vsftpd
# 虚拟用户列表目录
user_config_dir=/etc/vsftpd/vconf
# logger
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
EOF


# 创建 ftp 账号文件
# 一行账号,一行密码(可配置多个)
cat >> /etc/vsftpd/virtusers << EOF
ftpav
7758chanchaw
ftpuser
7758chanchaw
EOF


# 生成用户数据文件
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
#设定PAM验证文件,并指定对虚拟用户数据库文件进行读取 
chmod 600 /etc/vsftpd/virtusers.db

# 限定只可使用 ftp 用户登录 ftp,不可使用 centos 系统用户
# 备份user_list
cp user_list user_list.bak
# 写入文件
cat > user_list << EOF
ftpav
ftpuser
EOF


# 文件备份
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
# 文件替换
cat > /etc/pam.d/vsftpd << EOF
#%PAM-1.0 (添加前,注释掉/etc/pam.d/vsftpd文件里面的内容,否则登录失败)
auth    sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers 
EOF


# 分别为用户创建独立的目录
mkdir -p /data/ftp/ftpuser
mkdir -p /data/ftp/ftpav

# 开始创建虚拟用户(ftp专用的用户,非centos用户)
mkdir /etc/vsftpd/vconf


## 创建虚拟用户fptuser
cat > /etc/vsftpd/vconf/ftpuser << EOF
# 设置虚拟用户文件根目录
local_root=/data/ftp/ftpuser
# 写操作
write_enable=YES
# 读操作
anon_world_readable_only=YES
# 上传操作
anon_upload_enable=YES
# 创建目录操作
anon_mkdir_write_enable=YES
# 删除、重名名操作
anon_other_write_enable=YES
EOF

# 创建虚拟用户 ftpav
cat > /etc/vsftpd/vconf/ftpav << EOF
# 设置虚拟用户文件根目录
local_root=/data/ftp/ftpav
# 写操作
write_enable=YES
# 读操作
anon_world_readable_only=YES
# 上传操作
anon_upload_enable=YES
# 创建目录操作
anon_mkdir_write_enable=YES
# 删除、重名名操作
anon_other_write_enable=YES
EOF


# 多个命令
systemctl enable vsftpd.service
systemctl start vsftpd.service
systemctl status vsftpd.service
systemctl stop vsftpd.service

新增用户

# 新增用户01
cat >> /etc/vsftpd/virtusers << EOF
ftptv
7758chanchaw
EOF

# 新增用户02
cat > user_list << EOF
ftptv
EOF

# 设置新用户目录
cat > /etc/vsftpd/vconf/ftptv << EOF
# 设置虚拟用户文件根目录
local_root=/usr/local/jellyfin/media/share1
# 写操作
write_enable=YES
# 读操作
anon_world_readable_only=YES
# 上传操作
anon_upload_enable=YES
# 创建目录操作
anon_mkdir_write_enable=YES
# 删除、重名名操作
anon_other_write_enable=YES
EOF

# 应用新用户,如果还不行重启服务:systemctl restart vsftpd.service
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
chmod 600 /etc/vsftpd/virtusers.db

修改用户路径

cd /etc/vsftpd/vconf/
vim ftpav
# 然后修改 local_root 后面的路径即可