Linux centos7 虚拟用户访问脚本

下面是脚本:

bash 复制代码
#!/bin/bash
#function:创建 vsftpd 虚拟用户脚本
#author: 20250324 IT小旋风

# 判断是否是 root 用户
if [ "$USER" != "root" ]; then
    echo "不是 root 用户,无法进行安装操作"
    exit 1
fi

# 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld && echo "防火墙已经关闭"
sed -i 's/SELINUX=*/SELINUX=disabled/g' /etc/selinux/config && setenforce 0 && echo "关闭 selinux"

# 安装 vsftpd 服务及相关工具
yum install vsftpd db4-utils -y

# 测试是否安装成功
if [ $? -eq 0 ]; then
    echo "vsftpd 和 db4-utils 安装成功"
else
    echo "vsftpd 或 db4-utils 安装失败,即将退出"
    exit 0
fi

# 定义用户变量
read -ep "请输入要创建的虚拟用户名: " username
read -ep "请输入虚拟用户密码: " password
IP=$(ip addr show ens33 | grep 'inet ' | awk '{print $2}' | cut -d/ -f1)

# 创建虚拟用户数据库文件
echo "$username" > /tmp/vsftpd_virtual_users.txt
echo "$password" >> /tmp/vsftpd_virtual_users.txt
db_load -T -t hash -f /tmp/vsftpd_virtual_users.txt /etc/vsftpd/vsftpd_virtual_users.db
chmod 600 /etc/vsftpd/vsftpd_virtual_users.db
rm -f /tmp/vsftpd_virtual_users.txt

# 创建 PAM 配置文件
cat << EOF > /etc/pam.d/vsftpd_virtual
auth       required     pam_userdb.so db=/etc/vsftpd/vsftpd_virtual_users
account    required     pam_userdb.so db=/etc/vsftpd/vsftpd_virtual_users
EOF

# 配置文件备份和修改
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.back1
cat >> /etc/vsftpd/vsftpd.conf <<EOF
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/xferlog
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd_virtual
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES
guest_enable=YES
guest_username=ftp
user_config_dir=/etc/vsftpd/user_config
EOF

# 创建用户配置目录
mkdir -p /etc/vsftpd/user_config

# 创建用户家目录
user_home="/home/ftpusers/${username}"
mkdir -p "${user_home}"
chown -R ftp:ftp "${user_home}"
chmod -R 755 "${user_home}"

# 创建用户配置文件
cat << EOF > /etc/vsftpd/user_config/${username}
local_root=${user_home}
write_enable=YES
EOF

# 此命令的作用是注释掉 /etc/pam.d/vsftpd 文件中所有行首不是 # 且行尾是 pam_shells.so 的行。
sed -i "s/^[^#].*pam_shells.so$/#&/g" /etc/pam.d/vsftpd

# 开启 vsftpd 服务
systemctl start vsftpd.service && systemctl enable vsftpd.service

if [ $? -eq 0 ]; then
    echo "vsftp 服务开启,访问地址: $IP,用户: $username,密码: $password"
else
    echo "启动失败,即将退出"
    exit 0
fi
    
相关推荐
赴生-5 分钟前
Liunx 操作系统 进程概念(上)
linux
binqian21 分钟前
【linux】OpenSSH升级文档
linux·运维·网络
吴声子夜歌27 分钟前
Shell编程——if条件语句
linux·运维·shell
和裕43 分钟前
蜂窝板 vs 七层瓦楞重型纸箱:大件工业设备运输性能与成本全对比
大数据·运维·网络·人工智能·算法
Dawn-bit1 小时前
Linux 运维基础扩展:跳板机、堡垒机与物理服务器全流程
linux·运维·服务器·云计算·运维开发
新时代牛马1 小时前
Linux 定时任务:crontab、anacron 与systemd timer
linux·运维·服务器
IT摆渡者1 小时前
1panel 配置申请手动解析网站SSL证书
服务器·网络协议·ssl
mounter6251 小时前
Linux 7.2 引入更灵活的块设备错误注入机制
linux·linux kernel·kernel·disk·error injection
疯狂打码的少年2 小时前
【计算机网络】子网掩码与子网划分计算(含CIDR表示法)
服务器·笔记·计算机网络·php
cpolar技术支持2 小时前
Docker 容器启动失败怎么查?端口、日志、权限与网络排障完整教程
linux·docker·容器·cpolar·网络排障