码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-07-20 17:12:15      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:启动服务   ssi   告诉   read   word   改进   共享服务   one   icon   

一、主动和被动模式简介 1、Port模式(主动模式): 当客户端C向服务端S连接后,使用的是Port模式,那么客户端C会发送一条命令告诉服务端S(客户端C在本地打开了一个端口N在等着你进行数据连接),当服务端S收到这个Port命令后 就会向客户端打开的那个端口N进行连接,这种数据连接就生成了。 2、Pasv模式(被动模式): 当客户端C向服务端S连接后,服务端S会发信息给客户端C,这个信息是(服务端S在本地打开了一个端口M,你现在去连接我吧),当客户端C收到这个信息后,就可以向服务端S的M端口进行连接,连接成功后,数据连接也建立了。 二、安装vsftpd 1、yum安装vsftp #yum ‐y install vsftpd 2、启动服务 #systemctl start vsftpd.service 3、配置文件路径 /etc/vsftpd 三、配置vsftpd用匿名用户方式登录 1、首先我们在企业中ftp服务器,一般情况下都会有个共享服务器,允许员工下载一些公司的软件或者常用的软件包(方便,不用再去外网去下载,也省带宽) 2、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 3、我们设置了匿名访问的目录是/data/pub里面,还是上传不了文件,有人说直接改成777就可以,但是改成777就无法访问了,这是由于vsftpd的安全性设置,我们需要在pub里面再创建一个子文件夹,然后给这个子文件夹777的权限就OK了,这样就可以在这个子文件夹中进行操作了。 四、配置虚拟用户登录方式 【虚拟用户必须关闭虚拟用户anonymous_enable=NO】 1、配置文件内容 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 2、创建宿主用户 创建用户 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 3、建立虚拟用户文件 touch /etc/vsftpd/vuser_passwd # 编辑虚拟用户名单文件:(# 第一行账号,第二行密码,注意:不能使用root做用户名,系统保留) vi /etc/vsftpd/vuser_passwd 编辑内容,下面是 vuser_passwd 内容 ftp1 12345678 ftp2 12345678 4、生成虚拟用户数据文件 db_load ‐T ‐t hash ‐f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db chmod 600 /etc/vsftpd/vuser_passwd.db 5、创建用户配置 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 6、创建用户目录 # mkdir ‐p /home/vsftpd/ftp1 # mkdir ‐p /home/vsftpd/ftp2 7、服务运维 systemctl restart vsftpd.service # 重启服务 systemctl start vsftpd.service # 启动服务 systemctl status vsftpd.service # 服务状态查看 8、生成虚拟用户的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 9、新增加用户 新增用户的话,需要在/etc/vsftpd/vsuser.passwd里面追加用户(删除就是删除用户),记得使用db_load重新生成vsuser.passwd文件即可,vuser_confi里面新建一个新建账户的权限文件,宿主目录记得新建存储文件。 五、处理报错 1、上面每个配置文件中的内容最好是手动键入。 2、客户端windows打开cmd到后台进行连接,网页和资源管理器里面都会有缓存也看不到报错。 3、用windows的cmd链接ftp会报错,信息是:chroot没有读到/etc/vsftpd/chroot_list这个文件,解决方法就是直接新建这个文件就行,记得重启服务。 4、虚拟用户登录到自己的宿主目录后,不能上传文件,这是因为vsftpd为了安全,不能让匿名用户在自己的家目录下直接创建文件,解决方式就是在每个虚拟用户的宿主目录里面再新建一个文件夹,给这文件夹777权限,就可以了。 六、实战,模拟学生资料系统。只有学生自己和任课老师能看到学生本人文件,别人不可以。老师可以看到所教学生的文件。 1、准备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 2、利用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 ##重启服务 3、设置定时任务、完成数据的定时备份 crontab -l 5 7-21 * * * /usr/bin/rsync -az /bishe/ /bak-bishe/ &>/dev/null 30 23 * * * /bin/bash /bin/backup.sh &>/dev/null 博主小白,欢迎各位指出不足和改进意见,感谢观看。 这个世界上根本没有正确的选择,我们只不过是要努力奋斗,使当初的选择变得正确!

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

标签:启动服务   ssi   告诉   read   word   改进   共享服务   one   icon   

原文地址:https://blog.51cto.com/14015577/2421988

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!