Linux搭建vsftpd服务器(方法一)
yum -y install vsftpd*
使用命令安装vsftpdyum -y install pam libdb-utils libdb --skip-broken
安装pam认证和libdb本地文件数据库groupadd www
创建一个www用户组useradd -u 1000 -d /home/vsftpd -g www -m -s /sbin/nologin www
创建一个用户-u 1000
指定UID为1000-d /home/vsftpd
指定家目录为/home/vsftpd-g www
指定www为用户所属组-m
指定家目录如果不存在则创建-s /sbin/nologin
指定该用户不能直接登陆shell
mkdir -p /home/vsftpd/www
建立空目录chown -R www:www /home/vsftpd/
修改目录权限echo -e "theftp\ntheftp123456" > /etc/vsftpd/vsftpd_users.txt
将用户名和密码写入到virtual_users.txt,奇数行为用户名,偶数行为密码/usr/bin/db_load -T -t hash -f /etc/vsftpd/vsftpd_users.txt /etc/vsftpd/vsftpd_users.db
将文本文件转译载入进数据库mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
备份vsftpd的pam认证文件- 添加认证数据库
echo 'auth required pam_userdb.so db=/etc/vsftpd/vsftpd_users' > /etc/pam.d/vsftpd && \ sed -i '$a account required pam_userdb.so db=/etc/vsftpd/vsftpd_users' /etc/pam.d/vsftpd
mkdir -p /etc/vsftpd/vsftpd_user_conf
建立虚拟用户配置文件存放目录- 追加虚拟用户配置文件
echo 'local_root=/home/vsftpd/www' > /etc/vsftpd/vsftpd_user_conf/theftp && \ sed -i '$a write_enable=YES' /etc/vsftpd/vsftpd_user_conf/theftp
- 将以下代码加入到
/etc/vsftpd/vsftpd.conf
后面# 开启被动模式 pasv_enable=YES pasv_min_port=10023 pasv_max_port=10030 # 开启虚拟用户 guest_enable=YES guest_username=www user_config_dir=/etc/vsftpd/vsftpd_user_conf virtual_use_local_privs=YES
systemctl restart vsftpd
重启vsftpd服务
Linux搭建vsftpd服务器(方法二)自动化脚本
- 将以下内容写入
vi /vsftpd.sh
脚本中,并执行chmod -R 755 /vsftpd.sh && bash /vsftpd.sh
#!/bin/bash yum -y install vsftpd* && \ yum -y install pam libdb-utils libdb --skip-broken && \ # 定义变量 FTP_USER='theftp' FTP_PASS='theftp123456' FTP_GROUP='www' LOCAL_UMASK='077' PASV_MIN_PORT='10030' PASV_MAX_PORT='10060' # 添加用户组 groupadd $FTP_GROUP # 添加禁用登陆的用户 useradd -u 1000 -d /home/vsftpd -g $FTP_GROUP -s /sbin/nologin $FTP_GROUP # 建立目录 mkdir -p /home/vsftpd/$FTP_GROUP && \ mkdir -p /etc/vsftpd/vsftpd_user_conf && \ # 修改权限 chown -R $FTP_GROUP:$FTP_GROUP /home/vsftpd/ # 配置vsftpd pam认证 mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak && \ echo 'auth required pam_userdb.so db=/etc/vsftpd/vsftpd_users' > /etc/pam.d/vsftpd && \ sed -i '$a account required pam_userdb.so db=/etc/vsftpd/vsftpd_users' /etc/pam.d/vsftpd && \ # 建立虚拟用户 echo -e "$FTP_USER" > /etc/vsftpd/vsftpd_users.txt && \ echo -e "$FTP_PASS" >> /etc/vsftpd/vsftpd_users.txt && \ # 虚拟用户数据生成数据库 /usr/bin/db_load -T -t hash -f /etc/vsftpd/vsftpd_users.txt /etc/vsftpd/vsftpd_users.db && \ # 添加虚拟用户配置 echo -e "local_root=/home/vsftpd/$FTP_GROUP" > /etc/vsftpd/vsftpd_user_conf/$FTP_USER && \ sed -i '$a write_enable=YES' /etc/vsftpd/vsftpd_user_conf/$FTP_USER # 配置 vsftpd 配置文件 # 开启pasv模式 echo -e "pasv_enable=YES" >> /etc/vsftpd/vsftpd.conf && \ echo -e "pasv_min_port=$PASV_MIN_PORT" >> /etc/vsftpd/vsftpd.conf && \ echo -e "pasv_max_port=$PASV_MAX_PORT" >> /etc/vsftpd/vsftpd.conf && \ # 开启虚拟(virtual)用户模式 echo -e "pam_service_name=vsftpd" >> /etc/vsftpd/vsftpd.conf && \ echo -e "guest_enable=YES" >> /etc/vsftpd/vsftpd.conf && \ echo -e "guest_username=$FTP_GROUP" >> /etc/vsftpd/vsftpd.conf && \ echo -e "user_config_dir=/etc/vsftpd/vsftpd_user_conf" >> /etc/vsftpd/vsftpd.conf && \ echo -e "virtual_use_local_privs=YES" >> /etc/vsftpd/vsftpd.conf && \ # 将用户限制在家目录 echo -e 'chroot_local_user=YES' >> /etc/vsftpd/vsftpd.conf && \ echo -e 'allow_writeable_chroot=YES' >> /etc/vsftpd/vsftpd.conf && \ # POST模式端口调整 sed -ri 's/connect_from_port_20=YES/connect_from_port_20=NO/g' /etc/vsftpd/vsftpd.conf && \ echo -e "port_enable=YES" >> /etc/vsftpd/vsftpd.conf && \ echo -e "ftp_data_port=10020" >> /etc/vsftpd/vsftpd.conf && \ # 关闭匿名访问 sed -ri 's/anonymous_enable=YES/anonymous_enable=NO/g' /etc/vsftpd/vsftpd.conf && \ sed -ri "s/local_umask=022/local_umask=$LOCAL_UMASK/g" /etc/vsftpd/vsftpd.conf cat << EOB ************************************************* * * * Docker image: dece/vsftpd * * * * * ************************************************* SERVER SETTINGS --------------- · FTP User: $FTP_USER · FTP Pass: $FTP_PASS · FTP group: $FTP_GROUP EOB # run vsftpd &>/dev/null /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf