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

一步部署FTP虚拟用户

#!/bin/bash

#vsftpd虚拟用户安装配置脚本

#日期:2025-03-24

#全局变量定义

VUSER_HOME="/data/ftp" VUSER_CONF_DIR="/etc/vsftpd/vsftpd_user_conf" VUSER_DB="/etc/vsftpd/vsftpd_login.db" VUSER_LIST="/etc/vsftpd/vusers.list" SYSTEM_USER="vuser"

#函数定义

log_info() { echo -e "\033[34m[INFO] $1\033[0m"; }

log_error() { echo -e "\033[31m[ERROR] $1\033[0m"; }

check_command() { command -v $1 >/dev/null || { log_error "$1未安装,安装失败!"; exit 1; } }

环境检查

log_info "开始环境检查..." check_command yum check_command db_load

#安装依赖包

log_info "开始安装vsftpd及依赖..."

yum install vsftpd libdb libdb-utils -y >/dev/null

if [ $? -ne 0 ]; then log_error "yum安装失败,请检查网络连接或系统状态!"

exit 1

fi

#关闭防火墙和SELinux

log_info "关闭防火墙..." systemctl stop firewalld >/dev/null systemctl disable firewalld >/dev/null

log_info "关闭SELinux..." setenforce 0 >/dev/null if ! grep -q "SELINUX=disabled" /etc/selinux/config; then sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config fi

#创建虚拟用户

log_info "创建虚拟用户列表..." cat > "$VUSER_LIST" <<EOF

tom

tom123

jack

jack123 EOF

#生成虚拟用户数据库

log_info "生成认证数据库..." db_load -T -t hash -f "$VUSER_LIST" "$VUSER_DB" >/dev/null if [ $? -ne 0 ]; then log_error "数据库生成失败,请检查$VUSER_LIST格式!" exit 1 fi chmod 600 "$VUSER_DB"

#配置PAM认证

log_info "配置PAM认证..."

mv /etc/pam.d/vsftpd{,.bak} >/dev/null 2>&1

cat > /etc/pam.d/vsftpd <<EOF #%PAM-1.0 auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login

account required pam_userdb.so

db=/etc/vsftpd/vsftpd_login  EOF

#创建系统映射用户

log_info "创建虚拟用户主目录..." mkdir -p "$VUSER_HOME"/{tom,jack} chmod 755 "$VUSER_HOME"

log_info "创建系统映射用户..." useradd -d "$VUSER_HOME" -s /sbin/nologin "$SYSTEM_USER" >/dev/null 2>&1 if [ $? -ne 0 ]; then

log_error "用户$SYSTEM_USER创建失败,请检查权限!

" exit 1 fi chown -R "$SYSTEM_USER":"$SYSTEM_USER" "$VUSER_HOME"

#配置vsftpd主文件

log_info "配置vsftpd主文件..."

cat > /etc/vsftpd/vsftpd.conf <<EOF

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_file=/var/log/xferlog

xferlog_std_format=YES

listen=YES

listen_ipv6=NO

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

guest_enable=YES

guest_username=$SYSTEM_USER

allow_writeable_chroot=YES

chroot_local_user=YES

user_config_dir=$VUSER_CONF_DIR

pasv_enable=YES

pasv_min_port=30000

pasv_max_port=30999

EOF

#配置用户独立权限

log_info "创建用户独立配置..." mkdir -p "$VUSER_CONF_DIR"

cat > "$VUSER_CONF_DIR/tom" <<EOF local_root=$VUSER_HOME/tom write_enable=YES virtual_use_local_privs=YES EOF

cat > "$VUSER_CONF_DIR/jack" <<EOF local_root=$VUSER_HOME/jack write_enable=YES virtual_use_local_privs=YES EOF

#启动服务

log_info "启动vsftpd服务..."

systemctl restart vsftpd >/dev/null 2>&1 if [ $? -ne 0 ]; then

log_error "服务启动失败,请检查配置文件!"

exit 1

fi

systemctl enable vsftpd >/dev/null

#验证测试

log_info "开始验证测试..."

FTP_SERVER_IP=$(hostname -I | awk '{print $1}')

echo -e "open $FTP_SERVER_IP\ntom\ntom123\nexit" | ftp -n >/dev/null 2>&1

if [ $? -eq 0 ]; then

log_info "\n安装成功!\n虚拟用户:tom/jack\n密码:tom123/jack123"

log_info "服务器地址:ftp://$FTP_SERVER_IP" log_info "被动模式端口范围:30000-30999"

else

log_error -e "\n安装失败,请检查以下内容:"

log_error "1. 确认SELinux已完全关闭"

log_error "2. 检查$VUSER_DB权限是否为600"

log_error "3. 检查防火墙是否已关闭"

fi

VC()可以直接用,创建用户那一行应替换成自己的,网段应该替换自己的网段。

注:退出时,请按quit回车退出

相关文章:

  • ES数据过多,索引拆分
  • SBOM风险预警 | 恶意NPM组件开展木马投毒攻击,目标针对国内泛互企业
  • 前端面试整理
  • 三步打造Temu多账号独立IP环境
  • 2025年01月13日字节(本地生活)前端面试
  • centos 7 搭建FTP本地用户
  • 数据库取证分析
  • 【Git】--- 分支管理
  • vue 点击放大,图片预览效果
  • vue项目配置服务器代理,解决请求跨域问题
  • el-table下的复选框关联勾选
  • thinkphp8.0\swoole的websocket应用
  • MySQL: 创建两个关联的表,用联表sql创建一个新表
  • 电机控制常见面试问题(十八)
  • vulntarget_a 训练笔记
  • 人工智能赋能:生成式游戏的未来趋势
  • 响应式 Web 设计:HTML 与 CSS 协同学习的进度(二)
  • 2025-03-24 学习记录--C/C++-PTA 习题7-7 字符串替换
  • 预测蓝桥杯16届嵌入式省赛客观题
  • 【进阶编程】Avalonia、MAUI、Uno Platform、Flutter、Electron、Qt 和 Tauri 的详细对比
  • “上报集团文化助力区域高质量发展赋能平台”揭牌
  • “五一”假期倒计时,节前错峰出游机票降价四成
  • 著名茶叶专家谢丰镐逝世,享年95岁
  • 嫦娥五号月球样品将借给这些国家机构
  • 研讨会丨明清区域史研究的比较与对话
  • 厚植民营企业家成长土壤是民营经济高质量发展的关键