说明:配个web站点搭建的ftp,独立用户

1. 单用户版本

#!/bin/bash
# 定义web网站的根目录
_wwwroot=/home/htdocs
# 定义web运行的用户
_web_user=ycan
# 定义ftp的用户名密码
_virtual_user=ycan
_virtual_passwd=ycan.xxxxx
yum install db4-utils db4 vsftpd -y
( id $_virtual_user >/dev/null 2>&1 ) || useradd -s /sbin/nologin $_virtual_user
[ ! -d $_wwwroot ] && mkdir -p $_wwwroot
[ -f /etc/vsftpd/vsftpd.conf ] && mv /etc/vsftpd/vsftpd.conf{,.bak}
cat > /etc/vsftpd/vsftpd.conf  <<END
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
chown_username=$_web_user
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
chroot_local_user=YES
listen=YES
tcp_wrappers=YES
userlist_enable=YES
################ virtual user ##################
pam_service_name=vsftpd.virtual
virtual_use_local_privs=YES
guest_enable=YES
guest_username=$_web_user
local_root=$_wwwroot
END
cat > /etc/vsftpd/vuser.txt <<END
$_virtual_user
$_virtual_passwd
END
[ -f /etc/vsftpd/vuser.txt ] && db_load -T -t hash -f /etc/vsftpd/vuser.txt  /etc/vsftpd/vsftpd-virtual-user.db
chmod 600 /etc/vsftpd/vuser.txt
chmod 600 /etc/vsftpd/vsftpd-virtual-user.db
cat > /etc/pam.d/vsftpd.virtual  <<END
#M-1.0
auth    required    pam_userdb.so   db=/etc/vsftpd/vsftpd-virtual-user
account required    pam_userdb.so   db=/etc/vsftpd/vsftpd-virtual-user
session required    pam_loginuid.so
END
chkconfig vsftpd on
service vsftpd restart






2. 多用户版本


#!/bin/bash
#author ycan
#date   20130507
#mail   yoncan@qq.com
# 定义web网站的根目录
_wwwroot=/home/htdocs
# 定义web运行的用户
_web_user=ycan
# 定义ftp的用户名前缀,用户名会以用户名{01..21}的形式存在,密码会以用户名加".654123"
_vuser=ycan
yum install db4-utils db4 vsftpd -y
( id $_virtual_user >/dev/null 2>&1 ) || useradd -s /sbin/nologin $_virtual_user
[ ! -d $_wwwroot ] && mkdir -p $_wwwroot
[ -f /etc/vsftpd/vsftpd.conf ] && mv /etc/vsftpd/vsftpd.conf{,.bak}
cat > /etc/vsftpd/vsftpd.conf  <<END
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
chown_username=$_web_user
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
chroot_local_user=YES
listen=YES
tcp_wrappers=YES
userlist_enable=YES
################ virtual user ##################
pam_service_name=vsftpd.virtual
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=\$USER
guest_username=$_web_user
local_root=$_wwwroot/\$USER
END
# seq 得到的是2位数的用户+数字
for i in `seq -f '$_vuser%02g' 1 21`
do
    echo "$i" >>/etc/vsftpd/vuser.txt
    echo "$i.654123" >>/etc/vsftpd/vuser.txt
    mkdir -p $_wwwroot/$i
    echo "user:$i" > $_wwwroot/$i/$i.file
    chown -R $_web_user  $_wwwroot/$i
done
[ -f /etc/vsftpd/vuser.txt ] && db_load -T -t hash -f /etc/vsftpd/vuser.txt  /etc/vsftpd/vsftpd-virtual-user.db
chmod 600 /etc/vsftpd/vuser.txt
chmod 600 /etc/vsftpd/vsftpd-virtual-user.db
cat > /etc/pam.d/vsftpd.virtual  <<END
#M-1.0
auth    required    pam_userdb.so   db=/etc/vsftpd/vsftpd-virtual-user
account required    pam_userdb.so   db=/etc/vsftpd/vsftpd-virtual-user
session required    pam_loginuid.so
END
chkconfig vsftpd on
service vsftpd restart