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

centos 7 搭建ftp 基于虚拟用户用shell脚本搭建

#!/bin/bash

# 步骤1: 更新系统并安装vsftpd
yum update -y
yum install vsftpd -y

# 步骤2: 创建虚拟用户信息文件并转换为数据库文件
cat << EOF > /etc/vsftpd/virtual_users.txt
ftpvuser
123456
EOF

db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
chmod 600 /etc/vsftpd/virtual_users.db

# 步骤3: 配置PAM认证
cat << EOF > /etc/pam.d/vsftpd.vu
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_users
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_users
EOF

# 步骤4: 配置vsftpd
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
cat << EOF > /etc/vsftpd/vsftpd.conf
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=ftp
virtual_use_local_privs=YES
EOF

# 步骤5: 创建FTP用户和目录
useradd -d /var/ftp -s /sbin/nologin ftp
mkdir -p /var/ftp/virtual_users/ftpvuser
chown -R ftp:ftp /var/ftp/virtual_users
chmod 755 /var/ftp/virtual_users
chmod 700 /var/ftp/virtual_users/ftpvuser

# 步骤6: 启动vsftpd服务并设置开机自启
systemctl start vsftpd
systemctl enable vsftpd

# 步骤7: 配置防火墙(如果防火墙开启)
if systemctl is-active --quiet firewalld; then
    firewall-cmd --add-port=21/tcp --permanent
    firewall-cmd --reload
fi

echo "FTP服务器基于虚拟用户部署完成,虚拟用户名: ftpvuser, 密码: 123456"

运行脚本后可能存在一些小问题

报这个错误Job for vsftpd.service failed because the control process exited with error code. See "systemctl status vsftpd.service" and "journalctl -xe" for details

1. 配置文件错误
vsftpd 服务启动失败,常见原因是配置文件存在语法错误。你可以使用以下命令检查配置文件:

bash
vsftpd -t


若存在语法错误,该命令会输出错误信息,你需要依据这些信息对 /etc/vsftpd/vsftpd.conf 文件进行修改。
2. SELinux 或防火墙限制
SELinux
SELinux 可能会阻止 vsftpd 服务的正常运行。你可以临时禁用 SELinux 来验证是否是这个问题:

bash
setenforce 0


接着尝试重新启动 vsftpd 服务:

bash
systemctl restart vsftpd


若服务能够正常启动,你可以永久禁用 SELinux 或者配置 SELinux 策略以允许 vsftpd 服务运行。要永久禁用 SELinux,需编辑 /etc/selinux/config 文件,将 SELINUX 的值设置为 disabled:
plaintext
SELINUX=disabled
然后重启系统使更改生效。
防火墙
防火墙可能会阻止 vsftpd 服务监听的端口。你可以使用以下命令开放 FTP 端口(默认是 21 端口):

bash
firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --reload


3. 目录权限问题
vsftpd 可能由于目录权限不足而无法正常访问所需目录。你可以检查并确保 /var/ftp 及其子目录的权限设置正确:
 

bash
chown -R ftp:ftp /var/ftp
chmod -R 755 /var/ftp

4. 查看详细日志
你可以使用以下命令查看 vsftpd 服务的详细日志信息,从而获取更多错误细节:
 

bash
systemctl status vsftpd.service
journalctl -xe

大概率是权限问题

完成以上操作后如果遇到连接时报错出500 时解决方法

1. 修改用户根目录权限
你需要确保用户的根目录(即 chroot 目录)没有可写权限,但可以在根目录下创建一个具有可写权限的子目录供用户上传文件。
首先,修改用户根目录的权限:

bash
chmod a-w /var/ftp/virtual_users/ftpvuser


然后,在根目录下创建一个可写的子目录,例如 uploads:

bash
mkdir /var/ftp/virtual_users/ftpvuser/uploads
chown ftp:ftp /var/ftp/virtual_users/ftpvuser/uploads
chmod 755 /var/ftp/virtual_users/ftpvuser/uploads


2. 调整 vsftpd 配置
如果修改权限后仍然有问题,你可以在 /etc/vsftpd/vsftpd.conf 配置文件中添加或修改以下选项:
plaintext
allow_writeable_chroot=YES

添加此选项后,vsftpd 会允许 chroot 目录具有可写权限,但这会带来一定的安全风险,使用时需谨慎。
修改完配置文件后,需要重启 vsftpd 服务使更改生效:
 

bash
systemctl restart vsftpd

测试链接

如果知道错误在哪里就可以加到脚本里面,就不用自己手都输入了

相关文章:

  • k8s存储介绍(六)StorangeClass
  • Redis :command not allowed when used memory
  • a, b = map(int, input().split()) 从用户输入中读取两个整数
  • 耘想Docker LinNAS,颠覆传统存储体验!
  • muduo库的思路梳理
  • 前端使用WPS WebOffice 做在线文档预览与编辑
  • Redux,React-redux。基础
  • 【脏读、不可重复读、幻读区别】
  • 云端陷阱:当免费午餐变成付费订阅,智能家居用户如何破局?
  • 【48】指针:函数的“数组入口”与“安全锁”——数组参数传递
  • 【Linux】嵌入式Web服务库:mongoose
  • pytorch与其他ai工具
  • 什么是异步编程,如何在 JavaScript 中实现?
  • 亚马逊多账号风控防护体系构建指南
  • 设计模式类型
  • Android 简化图片加载与显示——使用Coil和Kotlin封装高效工具类
  • 【更新至2023年】各省数字经济相关指标数据集(20个指标)
  • 最长公共子序列问题
  • Spring笔记02-bean的生命周期
  • 传统应用容器化迁移实践
  • 刘永明|在从普及到提高中发展新大众文艺
  • 王毅会见巴西外长维埃拉、总统首席特别顾问阿莫林
  • 沈阳一超市疑借领养名义烹食流浪狗,当地市监局:已收到多起投诉
  • 第1现场 | 印巴停火次日:当地民众逐渐恢复正常生活
  • 左娅︱悼陈昊
  • 伊朗外长称正与美国进行“善意”的会谈