基于虚拟用户的方式使用vsftp

1、主动和被动模式简介
一、Port模式(主动模式):
当客户端C向服务端S链接后,使用的是Port模式,那么客户端C会发送一条命令告诉服务端S(客户端C在本地打开了一个端口N在等着你进行数据链接),当服务端S收到这个Port命令后 就会向客户端打开的那个端口N进行链接,这种数据链接就生成了。
二、Pasv模式(被动模式):
当客户端C向服务端S链接后,服务端S会发信息给客户端C,这个信息是(服务端S在本地打开了一个端口M,你如今去链接我吧),当客户端C收到这个信息后,就能够向服务端S的M端口进行链接,链接成功后,数据链接也创建了。
2、安装vsftpd
一、yum安装vsftp
#yum ‐y install vsftpd
二、启动服务
#systemctl start vsftpd.service
三、配置文件路径
/etc/vsftpd
3、配置vsftpd用匿名用户方式登陆
一、首先咱们在企业中ftp服务器,通常状况下都会有个共享服务器,容许员工下载一些公司的软件或者经常使用的软件包(方便,不用再去外网去下载,也省带宽)
二、vsftp提供了匿名登陆,默认anonymous_enable=YES的状况下,就启用了匿名访问,这种状况下你只能把须要给用户的文件,存放到/var/ftp/pub下(默认路径),若是想更改的话须要添加anon_root= /data/pub,后面的路径就是匿名登陆后实际访问的目录。若是匿名用户也须要上传的功能的话。
anonymous_enable=YES # 容许匿名访问
anon_root= /data/pub # 匿名访问的本地实际目录
local_enable=YES
anon_upload_enable=YES # 容许匿名用户上传文件(须将全局的write_enable=YES,默认YES)
anon_mkdir_write_enable=YES # 容许匿名用户建立目录
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
vsftpd.conf
三、咱们设置了匿名访问的目录是/data/pub里面,仍是上传不了文件,有人说直接改为777就能够,可是改为777就没法访问了,这是因为vsftpd的安全性设置,咱们须要在pub里面再建立一个子文件夹,而后给这个子文件夹777的权限就OK了,这样就能够在这个子文件夹中进行操做了。
4、配置虚拟用户登陆方式
【虚拟用户必须关闭虚拟用户anonymous_enable=NO】
一、配置文件内容
anonymous_enable=NO
write_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
use_localtime=YES
local_enable=YES
allow_writeable_chroot=YES
xferlog_enable=YES
local_umask=022
pam_service_name=vsftpd
use_localtime=YES
listen_port=21
chroot_local_user=YES
idle_session_timeout=120
data_connection_timeout=120
guest_enable=YES
guest_username=ftpuser
user_config_dir=/etc/vsftpd/vuser_conf
virtual_use_local_privs=YES
pasv_min_port=10060
pasv_max_port=10090
accept_timeout=5
connect_timeout=1
二、建立宿主用户
建立用户 ftpuser 指定 `/home/vsftpd` 目录
useradd ‐g root ‐M ‐d /home/vsftpd ‐s /sbin/nologin ftpuser
设置用户 ftpuser 的密码
passwd ftpuser
把 /home/vsftpd 的全部权给ftpuser.root
chown ‐R ftpuser.root /home/vsftpd
三、创建虚拟用户文件
touch /etc/vsftpd/vuser_passwd
# 编辑虚拟用户名单文件:(# 第一行帐号,第二行密码,注意:不能使用root作用户名,系统保留)
vi /etc/vsftpd/vuser_passwd
编辑内容,下面是 vuser_passwd 内容
ftp1
12345678
ftp2
12345678
四、生成虚拟用户数据文件
db_load ‐T ‐t hash ‐f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db
chmod 600 /etc/vsftpd/vuser_passwd.db
五、建立用户配置
mkdir /etc/vsftpd/vuser_conf # 创建虚拟用户我的vsftp的配置文件
cd /etc/vsftpd/vuser_conf # 进入目录
touch ftp1 ftp2
(ftp1和ftp2写入以下内容,local_root=/home/vsftpd/ftp1#这里写入这个用户的实际存储路劲)。
ftp1文件中内容以下
vim ftp1
local_root=/home/vsftpd/ftp1
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
vim ftp2
local_root=/home/vsftpd/ftp2
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
六、建立用户目录
# mkdir ‐p /home/vsftpd/ftp1
# mkdir ‐p /home/vsftpd/ftp2
七、服务运维
systemctl restart vsftpd.service      # 重启服务
systemctl start vsftpd.service         # 启动服务
systemctl status vsftpd.service      # 服务状态查看
八、生成虚拟用户的PAM文件
# cd /etc/pam.d/
备份vsftpd文件
# cp vsftpd vsftpd.bak
修改vsftpd文件内容(加入第二和第三行,下面的都所有注释,注意下面是64位操做系统,若是是32位的话lib64须要改为lib)
#%PAM‐1.0
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password‐auth
#account include password‐auth
#session required pam_loginuid.so
#session include password‐auth
九、新增长用户
新增用户的话,须要在/etc/vsftpd/vsuser.passwd里面追加用户(删除就是删除用户),记得使用db_load从新生成vsuser.passwd文件便可,vuser_confi里面新建一个新建帐户的权限文件,宿主目录记得新建存储文件。
5、处理报错
一、上面每一个配置文件中的内容最好是手动键入。
二、客户端windows打开cmd到后台进行链接,网页和资源管理器里面都会有缓存也看不到报错。
三、用windows的cmd连接ftp会报错,信息是:chroot没有读到/etc/vsftpd/chroot_list这个文件,解决方法就是直接新建这个文件就行,记得重启服务。
四、虚拟用户登陆到本身的宿主目录后,不能上传文件,这是由于vsftpd为了安全,不能让匿名用户在本身的家目录下直接建立文件,解决方式就是在每一个虚拟用户的宿主目录里面再新建一个文件夹,给这文件夹777权限,就能够了。
 6、实战,模拟学生资料系统。只有学生本身和任课老师能看到学生本人文件,别人不能够。老师能够看到所教学生的文件。
 一、准备name.txt,name.txt中的第一列为学生名、第二列为本人的任课老师,一会须要遍历此文件新建帐号。
[root@localhost ~]# cat name.txt
lishuai         jiacai 
yuanhongbin     jiacai 
liduo           gongshengsheng
liuqi           lirongxia
nixueging       lirongxia
congshuanjian   lixi
liuxuesheng     gongshengsheng
yubaiyan        jiacai 
shenxiaojiao    lixi
xujianggao      shaozuguang
sunguangshuai   gongshengsheng
xiaoshuyue      congshen
cuijingwen      congshen
lixinju         jina
jinpengyuan     jina
caoqishao       xiaoyang
lienbo          xiaoyang
sunyuqing       jina
gianshunsheng   congshen
yangguangming   xiaoyang
fengxueying     congshen
liuyanshao      shaozuguang
xuhuasheng      lirongxia
lihongwei       jiacai 
licong          lixi
gaoxingjia      gongshengsheng
lishen          lixi
huangyu         shaozuguang
lixihan         lirongxia
shengzimo       shaozuguang
liujiaxin       shaozuguang
二、利用shell脚本,安装配置vsftpd,以及新建用户设置密码等操做。shell脚本以下:
#!bin/bash
yum install -y vsftpd                                                       ##安装vsftpd
systemctl start vsftpd                                                     ##启动vsftpd
mkdir -pv /home/vsftpd                                                  ##建立vsftpd的家目录
read -p "请输入用户名(用户名必须是:ftpuser):" uname
if useradd -g root -M -d /home/vsftpd -s /sbin/nologin $uname &>/dev/null;then    ##建立用户
echo "$uname" | passwd --stdin $uname &>/dev/null                                             ##设置密码
echo "建立用户 "$uname" 成功,密码和用户名相同"
else
echo "建立用户 "$uname" 失败 "$uname"已存在并被删除,请重新执行脚本"
userdel $uname                                                                                                      ##删除用户
exit 6
fi

chown -R $uname.root /home/vsftpd                      ##把/home/vsftpd的全部权给ftpuser.root    
while read line                                                        ##输入重定向
do
    stu=`echo $line | awk '{print $1}'`                        ## 定义变量 stu
    tea=`echo $line | awk '{print $2}'`                        ##定义变量 tea

    if [ -e $tea ];then                                                 ##若是tea存在
            echo "$tea 存在"
            mkdir -pv /bishe/0301/$tea/$stu/upload     ##建立/$tea/$stu/upload 
    else
            echo "$tea 不存在" 
            mkdir -pv /bishe/0301/$tea/{$stu/upload,upload}    ##建立/$tea/{$stu/upload,upload} 
    fi
    chmod 777 /bishe/0301/$tea/upload                   ##给/$tea/upload权限
    chmod 777 /bishe/0301/$tea/$stu                       ##给/$tea/$stu权限  
    chmod 777 /bishe/0301/$tea/$stu/upload           ##给/$tea/$stu/upload权限

    mkdir -pv /etc/vsftpd/vuser_conf        ##建立虚拟用户我的vsftp的配置
    cd /etc/vsftpd/vuser_conf                   ##进入目录

    echo "local_root=/bishe/0301/$tea/$stu" >$stu
    echo "write_enable=YES" >>$stu
    echo "anon_world_readable_only=NO" >>$stu
    echo "anon_upload_enable=YES" >>$stu
    echo "anon_mkdir_write_enable=YES" >>$stu
    echo "anon_other_write_enable=YES" >>$stu

    echo "local_root=/bishe/0301/$tea" >$tea
    echo "write_enable=YES" >>$tea
    echo "anon_world_readable_only=NO" >>$tea
    echo "anon_upload_enable=YES" >>$tea
    echo "anon_mkdir_write_enable=YES" >>$tea
    echo "anon_other_write_enable=YES" >>$tea

    mkdir -pv /etc/vsftpd/chroot_list                                           ##建立文件夹

    Pwd=`openssl rand -hex 8 | cksum | cut -c1-6`                   
    echo "$stu">>/etc/vsftpd/vuser_passwd                              ##追加学生姓名到/etc/vsftpd/vuser_passwd
    echo "$Pwd">>/etc/vsftpd/vuser_passwd                            ##追加密码到 /etc/vsftpd/vuser_passwd
    echo | awk '{print $2}' /root/new1.txt | sort | uniq >tea.txt     ##把老师名字统计到tea.txt
done<./name.txt

while read line     ###给老师建立密码
do
                 tea1=`echo $line | awk '{print $1}'`
                 Pwd=`openssl rand -hex 8 | cksum | cut -c1-8`
                 echo "$tea1">>/etc/vsftpd/vuser_passwd
                 echo "$Pwd">>/etc/vsftpd/vuser_passwd
done<./tea.txt
db_load -T -t hash -f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db 
chmod 600 /etc/vsftpd/vuser_passwd.db 

echo "anonymous_enable=NO
write_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
use_localtime=YES
local_enable=YES
allow_writeable_chroot=YES
xferlog_enable=YES
local_umask=022
pam_service_name=vsftpd

use_localtime=YES
listen_port=21
chroot_local_user=YES
idle_session_timeout=120

data_connection_timeout=120
guest_enable=YES
guest_username=ftpuser

user_config_dir=/etc/vsftpd/vuser_conf
virtual_use_local_privs=YES

pasv_min_port=10060
pasv_max_port=10090

accept_timeout=5
connect_timeout=1 " >/etc/vsftpd/vsftpd.conf
cd /etc/pam.d/
echo  "#%PAM-1.0 
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd 
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd 
#session    optional     pam_keyinit.so    force revoke 
#auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed 
#auth       required    pam_shells.so 
#auth       include password-auth 
#account    include password-auth 
#session    required     pam_loginuid.so 
#session    include password-auth " > vsftpd
systemctl restart vsftpd              ##重启服务
三、设置定时任务、完成数据的定时备份
crontab -l
5 7-21 * * * /usr/bin/rsync -az /bishe/ /bak-bishe/ &>/dev/null
30 23 * * *  /bin/bash /bin/backup.sh &>/dev/null

博主小白,欢迎各位指出不足和改进意见,感谢观看。
这个世界上根本没有正确的选择,咱们只不过是要努力奋斗,使当初的选择变得正确!
相关文章
相关标签/搜索