用vsftpd和mysql创建一个虚拟用户ftp服务器
当前有这样的一个需求,我需要批量创建一个网站,比如我要创建一个foo.com的网站,我就会在/web/目录下创建一个foo.com的目录,WEB服务器(我这里用的是nginx)已经自动设置好解析。同时,我需要有一个对应的ftp账号来管理这个网站,但是我不希望使用系统账号,一来网站多了,系统账号必然多,而来我不希望管理网站的账号能通过ssh登陆,虽然ssh也可以配置哪些账号不允许登陆。但是不创建系统账号显然是最安全的做法。
于是这就是有了标题的做法,用vsftpd做FTP服务器,用MySQL做后端数据库,两者通过pam-mysql插件联系起来。配置步骤简述如下:
编辑/etc/vsftpd/vsftpd.conf文件,增加或者修改如下几项:
anonymous_enable=NO virtual_use_local_privs=YES guest_enable=YES user_sub_token=$USER local_root=/web/$USER chroot_local_user=YES hide_ids=YES guest_username=nginx
guest_username 表示当用户登陆成功后,其uid映射到系统哪个账号上,我这里为了和WEB管理相结合,因此用了nginx这个账号。
创建数据库表,我们创建一个名为vsftpd的数据库,在其下创建一个users表,同时授权给vsftpd账号登陆,创建过程类似如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
mysql> create database vsftpd; Query OK, 1 row affected (0.00 sec) mysql> use vsftpd Database changed mysql> create table users(username varchar(30) not null primary key,password varchar(41) not null); Query OK, 0 rows affected (0.04 sec) mysql> grant usage on vsftpd.users to vsftpd@localhost identified by 'abc123'; Query OK, 0 rows affected (0.00 sec) mysql> insert into users values('foo.com',password('test')); Query OK, 1 row affected (0.00 sec) mysql> select * from users; +----------+-------------------------------------------+ | username | password | +----------+-------------------------------------------+ | foo.com | *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 | +----------+-------------------------------------------+ 1 row in set (0.00 sec) |
我这里对密码使用password加密函数,因为要和WEB结合,因为username使用了和域名相同的名字,这样我就可以通过username来同时获知域名,从而将账号的主目录锁定在对应的域名目录下。
编辑/etc/pam.d/vsftpd文件,最后类似如下:
auth required pam_mysql.so user=vsftpd passwd=abc123 host=localhost db=ftpd table=users usercolumn=username passwdcolumn=password crypt=2 account required pam_mysql.so user=vsftpd passwd=abc123 host=localhost db=ftpd table=users usercolumn=username passwdcolumn=password crypt=2
user和passwd指的是连接MySQL的账号和密码,crypt指的加密方式,0表示明文;不加密;1表示用crypt方式加密;2表示用MySQL的password函数加密;3表示用md5加密;4表示用sha1加密。
创建对应的目录 当用foo.com登陆,且验证通过后,根据之前vsftpd的配置,它将以nginx的身份把/web/foo.com作为其主目录,因此要保证其目录存在,而且其身份有访问权限。
建议继续学习:
- 使用 sshfs 调用 ssh 服务器上的内容 (阅读:3201)
- 在Linux下使用ftp命令 (阅读:3036)
- 使用Pure-ftpd和Pure-ftpd-mysql进行FTP权限和磁盘配额管理 (阅读:2983)
- php的ftp函数简单应用 (阅读:2360)
- CentOS vsftpd的安装与配置 (阅读:2308)
- CentOS web项目维护 FTP环境搭建 (阅读:1105)
- CentOS配置vsftpd服务器 (阅读:1057)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Linux|系统管理|WEB开发 来源: Linux|系统管理|WEB开发
- 标签: ftp vsftpd
- 发布时间:2012-04-07 21:50:40
- [70] Twitter/微博客的学习摘要
- [65] find命令的一点注意事项
- [64] 如何拿下简短的域名
- [64] IOS安全–浅谈关于IOS加固的几种方法
- [63] android 开发入门
- [62] 流程管理与用户研究
- [62] Go Reflect 性能
- [60] Oracle MTS模式下 进程地址与会话信
- [59] 读书笔记-壹百度:百度十年千倍的29条法则
- [59] 图书馆的世界纪录