关于让FTP支持SSO的思路
2010-06-28 15:57
78 查看
其中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的信息,可设置密码失效。
相关文章推荐
- 关于让FTP支持SSO的思路
- 关于 sso 博客大巴的神仙的一点思路
- 关于单点登录--单点登录系统(SSO)的开发思路
- 关于FTP client下载进度条的开发与实现思路
- 关于Bootstrap对浏览器支持
- 火狐浏览器(FF)不支持普通的象IE那样的加入收藏夹和设为首页,于是就找了关于FF的方法。后来测试了下,可以用了。。其代码如下:
- 关于FTP上传错误 553 Could not create file
- 关于Grails中FTP(apache)上传下载删除等功能的实现
- golang ftp客户端示例 支持断点续传
- python实现支持并发、断点续传的Ftp程序
- 关于在ubuntu下eclipse中c++11支持和编译运行c++11报错的解决方法
- Java 7 switch支持String类型的原理和关于switch一些细节
- ftp服务器搭建全过程-支持用户隔离,限速,证书配置
- 关于Chrome浏览器不支持From.submit的解决方案
- 关于ftp你知道这几点就够了
- FtpFindFirstFile()及InternetFindNextFile()对汉字编码的支持问题
- 关于MySQL数据库中不支持中文检索的一个解决方法---个人愚见
- 关于MAC安装windows【支持老版本】 支持安装全系列windows
- 关于牛客网剑指offer编程题思路(链表篇)
- 关于怎样做才能让VS.NET IDE支持新的扩展名