CentOS7 建立虚拟用户的账号数据库并为vsftpd服务器添加虚拟用户支持的脚本

#!/bin/bash

# 检查是否以 root 用户运行
if [ "$(id -u)" -ne 0 ]; then
    echo "此脚本必须以 root 用户身份运行。"
    exit 1
fi

# 安装必要的软件包
yum -y install vsftpd db4-utils

# 提示输入虚拟用户名和密码
read -p "请输入要创建的虚拟用户名: " username
read -s -p "请输入该虚拟用户的密码: " password
echo

# 创建虚拟用户信息文件
cat << EOF > /etc/vsftpd/virtual_users.txt
$username
$password
EOF

# 生成虚拟用户数据库文件
db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db

# 设置数据库文件权限
chmod 600 /etc/vsftpd/virtual_users.db

# 配置 PAM 认证
cat << EOF > /etc/pam.d/vsftpd.vu
auth       required     pam_userdb.so db=/etc/vsftpd/virtual_users
account    required     pam_userdb.so db=/etc/vsftpd/virtual_users
EOF

# 创建 ftp 系统用户,作为虚拟用户映射的系统用户
useradd -d /home/vsftpd -s /sbin/nologin ftpuser

# 创建虚拟用户主目录
mkdir -p /home/vsftpd/$username
chown -R ftpuser:ftpuser /home/vsftpd/$username
chmod -R 755 /home/vsftpd/$username

# 备份原始的 vsftpd 配置文件
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

# 修改 vsftpd 配置文件
cat << EOF > /etc/vsftpd/vsftpd.conf
# 禁止匿名登录
anonymous_enable=NO
# 启用本地用户登录(这里的本地用户指映射的系统用户)
local_enable=YES
# 启用虚拟用户
guest_enable=YES
# 指定虚拟用户映射的系统用户
guest_username=ftpuser
# 允许写入操作
write_enable=YES
# 本地用户上传文件的 umask
local_umask=022
# 启用虚拟用户配置文件目录
user_config_dir=/etc/vsftpd/user_conf
# 指定 PAM 认证服务名
pam_service_name=vsftpd.vu
# 允许可写的 chroot 环境
allow_writeable_chroot=YES
# 监听 IPv4 连接
listen=YES
# 不监听 IPv6 连接
listen_ipv6=NO
EOF

# 创建虚拟用户配置文件目录
mkdir -p /etc/vsftpd/user_conf

# 创建特定虚拟用户的配置文件
cat << EOF > /etc/vsftpd/user_conf/$username
# 虚拟用户的根目录
local_root=/home/vsftpd/$username
# 允许写入
write_enable=YES
# 允许上传
anon_upload_enable=YES
# 允许创建目录
anon_mkdir_write_enable=YES
EOF

# 重启 vsftpd 服务
systemctl restart vsftpd
# 设置 vsftpd 开机自启
systemctl enable vsftpd

echo "虚拟用户 $username 创建成功,可使用该用户通过 FTP 访问 /home/vsftpd/$username 目录。"    

你可能感兴趣的:(服务器,linux,运维)