设为首页 收藏本站
查看: 791|回复: 0

关于让FTP支持SSO的思路

[复制链接]

尚未签到

发表于 2015-5-29 10:54:43 | 显示全部楼层 |阅读模式
  首先,我们要让FTP支持动态密码,即可以通过程序动态修改用户密码.
  其中vsftpd+mysql的组合如下:

  以下的文章主要讲述的是Debian Linux下对vsftpd+MySQL虚拟用户的具体作法,我前两天在相关网站看见Debian Linux下对vsftpd+MySQL虚拟用户的资料,觉得挺好,就拿出来供大家分享。
  今天闲来无事做了个ftp,原因很简单就是为了能在别处看到的好东西直接放到我的机器上,嘿嘿!linux下选择ftp服务器还真是不容易,经过一阵思索后就选择了vsftpd,理由就是它号称是linux下最安全的ftp服务器还有还有好多的大型站点都用它来做服务器(这样用起来也比较有面子 :) )。
  为了怕在我输入密码时被别人偷看到然后登入我机器乱搞,在加上我本来就讨厌系统有那么多的用户(其实也是像显示自己的手平),所以我决定采用虚拟用户,因为机器中装有MySQL(和PHP搭配之最佳组合),于是我就想将vsftpd+MySQL虚拟用户数据放在MySQL(和PHP搭配之最佳组合)中,好了,就侃到这里,下面进入正题!
  第一步:
  安装vsftpd
  apt-get install vsftpd (Debian就是爽啊!)
  系统会自动生成一个配置文件和一个ftp用户供匿名用户使用,vsftpd使用pam方式来验证虚拟用户,因为vsftpd+MySQL虚拟用户的信息保存在数据库中,所以我们还需要一个能够读取数据库内容的本地用户,而且还需要设置它的本地目录:

  • #mkdir /var/ftp
  • #useradd -d ftpguest /var/ftp
  • #chown ftpguest.nogroup /var/ftp


  第二步:安装MySQL(和PHP搭配之最佳组合)
  apt-get install MySQL(和PHP搭配之最佳组合)-server MySQL(和PHP搭配之最佳组合)-clent
  建立数据库,并添加用户

  • #MySQL(和PHP搭配之最佳组合) -p MySQL(和PHP搭配之最佳组合)>create ftpu;
  • MySQL(和PHP搭配之最佳组合)>use ftpu;
  • MySQL(和PHP搭配之最佳组合)>create table user(name char(20) binary,passwd char(20) binary);
  • MySQL(和PHP搭配之最佳组合)>insert into user (name,passwd) values ('test1',password('1234567'));
  • MySQL(和PHP搭配之最佳组合)>insert into user (name,passwd) values ('test2',password('7654321'));
  • MySQL(和PHP搭配之最佳组合)>quit
  • 让ftpguest能访问ftpu和表user:
  • #MySQL(和PHP搭配之最佳组合) -u root MySQL(和PHP搭配之最佳组合)
    -p MySQL(和PHP搭配之最佳组合)>grant select on ftpu.user to ftpguest@localhost identified by '123456';


  MySQL(和PHP搭配之最佳组合)>quit
  第三步:因为vsftpd是通过PAM验证
  所以我们还需要一个MySQL(和PHP搭配之最佳组合)通过PAM验证的包,在Debian下它叫做libpam-MySQL(和PHP搭配之最佳组合)
  apt-get install libpam-MySQL(和PHP搭配之最佳组合)
  然后打开vsftpd的pam验证:

  • #vi /etc/pam.d/vsftpd


  将以前的内容注释掉,然后加入以下内容:
  auth required pam_MySQL(和PHP搭配之最佳组合).so user=ftpguest passwd=123456 host=localhost db=ftpu table=user usercolumn=name passwdcolumn=passwd crypt=2
  account required pam_MySQL(和PHP搭配之最佳组合).so user=ftpguest passwd=123456 host=localhost db=ftpu table=user usercolumn=name passwdcolumn=passwd crypt=2
  上面的内容应该能看明白吧,那个crypt=2表示经过MySQL(和PHP搭配之最佳组合)的password()机密后的东西!
  第四步:修改vsftpd.conf文件

  • #vi /etc/vsftpd.conf


  加入:

  • uest_enable=yes
  • guest_username=ftpguest
  • #表示ftpguest为vsftp的虚拟用户
  • virtual_use_local_privs=yes



  vsftpd+MySQL虚拟用户与本地用户有相同的权限

  • write_enable=yes
  • anon_upload_enable=yes
  • anon_other_write_enable=yes


  允许虚拟用户上传,修改和删除文件

  • chroot_local_user=yes


  虚拟用户只能访问自己的目录

  • anonymous_enable=no
  • local_enable=yes


  关闭匿名用户访问,开启本地用户访问
  第五步:
  本来来到第四步已经完成了,可是后来一想,不对,那要是每次上传的东西都不同,到时把那个目录弄得乱七八糟的怎么管理啊,能不能为每个vsftpd+MySQL虚拟用户创建一个目录呢,比如说将music用户上传的文件放在放在~/music下,将doc用户上传的文件放在~/doc下呢?
  能!当然能了,看看我怎么做?
  首先在数据库中添加music和doc两个vsftpd+MySQL虚拟用户接下来:

  • #mkdir /etc/vsftpd_user_conf
  • #cd /etc/vsftpd_user_conf
  • #touch music
  • #echo "local_root=/home/username/music" > music
  • #touch doc
  • #echo "local_root=/home/username/doc" > doc
  • #mkdir /home/username/music
  • #chown ftpguest.nogroup /home/username/music
  • #chmod 600 /home/username/music
  • #chown ftpguest.nogroup /home/username/doc
  • #chmod 600 /home/username/doc


  然后在vsftpd.conf中加入: user_config_dir=/etc/vsftpd_user_conf,大功告成,你明白了吗?  
  ====================================
  完成上面那一步后,我们怎么让vsftpd支持单点登陆呢?
  
  比如用户现在进入了一个门户系统,上面有一个FTP应用,那么用户进入FTP应用时应该不需要再输入FTP的用户名和密码了.
  
  我的构思是这样的:
  1,识别了用户身份后,将该用户与FTP中的虚拟用户关联起来.并生成一个随机密码password,
  2,创建一个中间页面A,在该页面中嵌入一个IFrame,指向ftp://userid:passsword@10.1…./
  3,当页面A关闭时,生成一个新的随机密码,覆盖原来的,这样就保证该密码是动态的,让其即时实效。如果页面A非正常退出,而没有调用到关闭方法,那么可以采取AJAX的方法,让页面A定时与服务器进行通讯,保持心跳,若服务器端超过一定时间仍为收到页面A的信息,可设置密码失效。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-71843-1-1.html 上篇帖子: 使用inet进行FTP传输(转) 下篇帖子: C# FTP上传类
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表