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
测试链接
如果知道错误在哪里就可以加到脚本里面,就不用自己手都输入了