IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

用vsftpd和mysql创建一个虚拟用户ftp服务器

Linux|系统管理|WEB开发 2012-04-07 21:50:40 累计浏览 2,789 次
本机暂存

    当前有这样的一个需求,我需要批量创建一个网站,比如我要创建一个foo.com的网站,我就会在/web/目录下创建一个foo.com的目录,WEB服务器(我这里用的是nginx)已经自动设置好解析。同时,我需要有一个对应的ftp账号来管理这个网站,但是我不希望使用系统账号,一来网站多了,系统账号必然多,而来我不希望管理网站的账号能通过ssh登陆,虽然ssh也可以配置哪些账号不允许登陆。但是不创建系统账号显然是最安全的做法。

    于是这就是有了标题的做法,用vsftpd做FTP服务器,用MySQL做后端数据库,两者通过pam-mysql插件联系起来。配置步骤简述如下:

  • 我的系统是[CentO]S 6.2,因此现用yum工具安装好所需要的软件,包括mysql-server,vsftpd,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账号登陆,创建过程类似如下:

  • “create tables”
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

        我这里对密码使用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作为其主目录,因此要保证其目录存在,而且其身份有访问权限。

  • 测试,直接可以在本地测试,看看能否登陆,如果不能登陆,/var/log/secure里又看不到更多的信息,那你可以选择在/etc/pam.d/vsftpd的配置文件里加上verbose模式,也就是在user=vsftpd那里加上一个verbose=1的选项,这样它就会把详细的信息打印到/var/log/secure文件里。看看是哪里的报错。
  • 同分类推荐文章

    1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
    2. Go 实验特性详解 (2026-06-21 10:05:27)
    3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

    查看更多 后端 文章 →

    建议继续学习

    1. 用Hyer来进行网站的抓取 (累计阅读 158,251)
    2. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,399)
    3. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
    4. Mysql监控指南 (累计阅读 21,351)
    5. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,523)
    6. 在Apache2.2.XX下安装Mod-myvhost模块 (累计阅读 13,057)
    7. 15个最好的免费开源电子商务平台 (累计阅读 12,541)
    8. 浅谈MySQL索引背后的数据结构及算法 (累计阅读 11,908)
    9. 整理了一份招PHP高级工程师的面试题 (累计阅读 11,708)
    10. 深入浅出INNODB MVCC机制与原理 (累计阅读 9,693)