vsftp虚拟多用户多权限一键部署脚本
最近公司需要搭建vsftp服务器,并使用ftp访问。核心要求是:可以根据需要添加多个账号,并且多个账号访问同一个目录时,具有不同的权限。(比如有的账号只允许下载、有的可以上传和下载、有的具有管理员权限)
通过搜索网上资料,发现最简便的方式,便是采用PAM虚拟用户的方式,进行用户管理和用户的权限控制。这种机制,不扰乱linux的本地用户,是最安全的一种方式。
经过各种采坑,最终通过脚本方式,将配置、安装、部署流程固化成shell脚本。
在centos下,只需简单配置shell脚本,即可完成vsftp的虚拟多用户的部署。
贴出部署脚本:
#!/bin/bash
. ./commonFunction.sh
#公共配置
FTP_USER1="ftpuser1" #允许上传,下载
FTP_USER1_PASSWD="ftppassword1"
FTP_USER2="ftpuser2" #只允许下载
FTP_USER2_PASSWD="ftppassword_2"
FTP_DIR="$APPLICATION_HOME/ftpdata"
ADMIN_USER="admin" #全部权限
ADMIN_PASSWD="[email protected]"
#输出日志
installBase(){
#创建本地用户ftpuser,home目录指定为$FTP_DIR,用于ftp的虚拟用户文件访问
mkdir -p $FTP_DIR
useradd -d $FTP_DIR localftpuser
chown -R localftpuser $FTP_DIR
#创建虚拟用户及PAM授权文件
rm -rf $INSTALL_HOME/ftp/ftp_virtual_users.txt
cat > $INSTALL_HOME/ftp/ftp_virtual_users.txt <<-EOF
$FTP_USER1
$FTP_USER1_PASSWD
$FTP_USER2
$FTP_USER2_PASSWD
$ADMIN_USER
$ADMIN_PASSWD
EOF
db_load -T -t hash -f $INSTALL_HOME/ftp/ftp_virtual_users.txt /etc/vsftpd/vsftpd_login.db
chmod 600 /etc/vsftpd/vsftpd_login.db
rm -rf $INSTALL_HOME/ftp/ftp_virtual_users.txt
cat > /etc/pam.d/vsftpd.vu <<-EOF1
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
EOF1
#创建用户权限目录
mkdir -p /etc/vsftpd/user_permission
#逐个创建用户的权限
#创建user1的权限文件
cat > /etc/vsftpd/user_permission/ftpuser1 <<-EOF
anon_world_readable_only=NO
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
local_root=$FTP_DIR
EOF
cat > /etc/vsftpd/user_permission/ftpuser2 <<-EOF
anon_world_readable_only=NO
local_root=$FTP_DIR
EOF
cat > /etc/vsftpd/user_permission/admin <<-EOF
anon_world_readable_only=NO
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YESi
anon_other_write_enable=YES
local_root=$FTP_DIR
EOF
}
#安装配置FTP
installFTP(){
{ # try
ftp_exist=$(rpm -qa | grep vsftpd | wc -l )
if [ $ftp_exist -le 0 ]; then
cd $INSTALL_HOME/ftp
sysout $1"删除原有的ftp"
for i in `rpm -qa | grep -i vsftpd`;
do
rpm -e $i --nodeps
sysout $1$1"删除原有的ftp:$i成功"
done
sysout $1"安装ftp"
rpm -ivh vsftpd-3.0.2-28.el7.x86_64.rpm
sysout $1"配置ftp"
\cp -a $INSTALL_HOME/ftp/vsftpd.conf /etc/vsftpd/vsftpd.conf
#重启vsftpd服务
systemctl enable vsftpd.service
systemctl restart vsftpd.service
else
echo "FTP 已存在!"
fi
} || { # catch
sysout $1"部署FTP发生错误"
exit 0
}
}
sysout "配置FTP基础环境"
#installBase "----"
sysout "配置FTP基础环境完成"
#sysout "开始部署FTP"
installFTP "----"
#sysout "部署FTP完成"
sleep 2
exit 0
说明:脚本唯一需要更改的地方,是根据需要,在公共配置中,修改ftp用户名和密码。
脚本默认配置了3个用户。如果用户数不够,可以修改脚本,多添加几个用户,并给每个新用户增加权限文件即可。
vsftp虚拟多用户一键部署安装包