手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

vsftp + mysql的架设文档

首页 > Linux >

上次介绍的vsftpd的配置是官方文档,这次是COPY来的,相对也是比较方便的,而且改动也很少。
只是需要libpam-mysql,mysql-dev等包。如果是基于ubuntu,那就实在是方便多了。都可以apt回来。。
OK,还是来原文吧,内容有点长,慢慢看就OK了:http://www.extmail.org/forum/thread-5427-1-1.html

   VSFTP+MySQL虚拟用户配置

   参考
       [url]http://www.mysql-china.com/bbs/archiver/?tid-114.html[/url]
       [url]http://blog.chinaunix.net/u1/39544/showart_310591.html[/url]
    VSFTPD是一种在UNIX/Linux中非常安全且快速的FTP服务器,目前已经被许多大型站点所采用。VSFTPD支持将用户名和口令保存在数据库文件或数据库服务器中。VSFTPD称这种形式的用户为虚拟用户。相对于FTP的本地(系统)用户来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。对于需要提供下载服务,但又不希望所有人都可以匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极好的解决方案。
    环境:
       操作系统: centos 4
       流程图:   user --> vsftpd-2.0.1 --> pam_mysql-0.71 --> mysql-server-4.1

1,初始化centos升级服务器.
# vi /etc/yum.repos.d/CentOS-Base.repo
=============== 代码 { ================================================
[base]
name=CentOS-4 - Base
baseurl=http://mirror.be10.com/centos/4/os/i386/
gpgcheck=1

#released updates
[update]
name=CentOS-4 - Updates
baseurl=http://mirror.be10.com/centos/4/updates/i386/
gpgcheck=1

#packages used/produced in the build but not released
[addons]
name=CentOS-4 - Addons
baseurl=http://mirror.be10.com/centos/4/addons/i386/
gpgcheck=1

#additional packages that may be useful
[extras]
name=CentOS-4 - Extras
baseurl=http://mirror.be10.com/centos/4/extras/i386/
gpgcheck=1

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-4 - Plus
baseurl=http://mirror.be10.com/centos/4/centosplus/i386/
gpgcheck=1
enabled=0

#contrib - packages by Centos Users
[contrib]
name=CentOS-4 - Contrib
baseurl=http://mirror.be10.com/centos/4/contrib/i386/
gpgcheck=1
enabled=0

#packages in testing
[testing]
name=CentOS-4 - Testing
baseurl=http://mirror.be10.com/centos/4/testing/i386/
gpgcheck=1
enabled=0
=============== 代码 } =================================================

# rpm -import [url]http://mirror.be10.com/centos/RPM-GPG-KEY-CentOS-4[/url]

2.安装所要软件包:
   # yum -y install mysql-server*
   # yum -y install vsftpd
   # yum -y install vim*

3.建立系统用户,用户ftp登录时访问目录权限.但用户不允许登录.
   # useradd vsftpdguest
   # vi /etc/passwd
============= 代码 { =====================================
vsftpdguest:x:501:501::/home/vsftpdguest:/bin/nologin
============= 代码 } =====================================

4.将虚拟用户保存在MySQL数据库服务器中
      建立数据库vsftpdvu,表users,字段name和passwd用于保存虚拟用户的用户名和口令,增加两个虚拟用户q和ftp1。
# service mysqld start
    # mysql
mysql> create database vsftpdvu;
mysql> use vsftpdvu;
mysql> create table users(name char(16) binary,passwd char(16) binary);
mysql> insert into users (name,passwd) values ('q','q');
mysql> insert into users (name,passwd) values ('ftp1','success8');
mysql> quit
   
      授权vsftpdguest可以读vsftpdvu数据库的users表。执行以下命令:
# mysql -u root mysql -p
mysql> grant select on vsftpdvu.users to vsftpdguest@localhost identified by 'i52serial0';
mysql> quit;
      
       验证刚才的操作是否成功可以执行下面命令:
# mysql -u vsftpdguest -pi52serial0 vsftpdvu
mysql> select * from users;

5.设置MySQL的PAM验证(pam_mysql.so)
        利用mysql进行pam验证的开源项目([url]http://sourceforge.net/projects/[/url]),主要目的是生成 pam_mysql.so文件
# tar xvzf pam_mysql-0.5.tar.gz
# cd pam_mysql
# make
# make install
   make install这一步可能会出现错误,那只好手动将该目录下生成的pam_mysql.so复制到/lib/security目录下。
  
       设置vsftpd的PAM验证文件。打开/etc/pam.d/vsftpd文件,修改内容:
    # vi /etc/pam.d/vsftpd
    ======================== 代码 { ======================================
#%PAM-1.0
    #auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
    #auth       required    pam_stack.so service=system-auth
    #auth       required    pam_shells.so
    #account    required    pam_stack.so service=system-auth
    #session    required    pam_stack.so service=system-auth
    auth required pam_mysql.so user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=0
account required pam_mysql.so user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=0
    ======================== 代码 { ======================================  
      上面涉及到的参数,只要对应前面数据库的设置就可以明白它们的含义。这里需要说明的是crypt参数。crypt表示口令字段中口令的加密方式:crypt=0,口令以明文方式(不加密)保存在数据库中;crypt=1,口令使用UNIX系统的DES加密方式加密后保存在数据库中;crypt=2,口令经过MySQL的password()函数加密后保存,但是使用了crypt=2时会出错,可能是pam_mysql.so文件问题.

6.设置vsftpd 登录模式:
    # vi /etc/vsftpd/vsftpd.conf
    ======================= 代码 { ==============================
    local_enable=yes   <--本地用户登录权限,要开启
    pam_service_name=vsftpd  <--验证文件/etc/pam.d/目录下
    anonymous_enable=NO   <--取消匿名登录
    guest_enable=YES      <--除了匿名用户外的所有用户都是guest
    guest_username=vsftpdguest  <--初了匿名用户外的所有用户使用vsftpdguest
    ======================= 代码 } ==============================
7.重启mysql、vsftpd数据库,进行测试:
    # service mysqld restart
    # service vsftpd restart

8.进一步的虚拟用户设置
      首先,介绍虚拟用户的权限设置。
       新添了virtual_use_local_privs参数,当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限,这两者种做法相比,后者更加严格一些,特别是在有写访问的情形下。默认情况下此参数是关闭的(NO)。
      当virtual_use_local_privs=YES时,只需设置write_enable=YES,虚拟用户就可以就拥有写权限。
         当virtual_use_local_privs=NO时,对虚拟用户权限的设置就更多一些更严格一些。
         控制虚拟用户浏览目录:如果让用户不能浏览目录,但仍可以对文件操作,那么需要执行以下二个步骤:
             第一步骤:配置文件中:
                       anon_world_readable_only=YES
             允许虚拟用户上传文件:  write_enable=YES
                                    anon_upload_enable=YES
             允许虚拟用户修改文件名和删除文件:    anon_other_write_enable=YES
             第二步骤:虚拟用户目录的权限改为只能由vsftpdguest操作:
                # chown vsftpdguest.vsftpdguest /home/vsftpdguest
                # chmod 700 /home/vsftpdguest
         由于以上选项的设置同样会对匿名用户生效。如果不想匿名用户趁机拥有同样的权限,最好是禁止匿名用户登录。

    其次,由于虚拟用户在系统中是vsftpdguest身份,所以可以访问到系统的其他目录。为了更加安全,我们可以将虚拟用户限制在自家目录下。有两种做法:
          第一种做法:在配置文件中修改
                   chroot_local_user=YES。
            第二种做法:在配置文件中增加以下选项
               chroot_local_user=NO
               chroot_list_enable=YES
              chroot_list_file=/etc/vsftpd.chroot_list
              然后,在/etc/vsftpd.chroot_list文件中加入虚拟用户名q和ftp1。
        经过修改后,虚拟用户登录后其根目录就限制在/home/vsftpdguest下,无法访问其他目录。

9.虚拟用户个人目录(没有测试)
  登录后所在的目录都是/home/vsftpdguest,即都是guest_username用户的自家目录。为每个虚拟用户建立自家目录。
      首先,在主配置文件中加入以下选项:
           # vi /etc/vsftpd/vsftpd.conf
                 user_config_dir=/etc/vsftpd/vsftpd_user_conf
  然后,生成/etc/vsftpd/vsftpd_user_conf目录,并在该目录下建立与特定虚拟用户同名的文件:
       # mkdir /etc/vsftpd/vsftpd_user_conf
       # cd /etc/vsftpd/vsftpd_user_conf
       # touch q
       以上操作为虚拟用户q建立了个人配置文件/etc/vsftpd/vsftpd_user_conf/q.
      接下来,在q的个人配置文件中将 q虚拟用户的自家目录修改为/home/q,配置选项为:
       local_root=/home/q
  最后,新建q目录,并将权限设为vsftpdguest:
      # mkdir /home/q
      # chown vsftpdguest.vsftpdguest /home/q
      # chmod 600 /home/q
    经过以上设置,q登录VSFTPD后,用“pwd”指令就可以发现被自己被定位到自己的“/home/q”目录。
   从文件系统层次来看,由于“/home/q”目录的权限是属于vsftpdguest的,所以其他的虚拟用户同样也可以访问q的自家目录。
   解决这个问题也很简单,只需要让VSFTPD负责将虚拟用户限制在其自家目录,就可以避免虚拟用户的互相访问。具体做法参照前面第8步中所述。经过以上设置后,虚拟用户就可以拥有属于自己的目录了。
   使用user_config_dir参数,在每个用户独立的配置文件里设定不同的权限和local_root参数就可以了

帮助:
在第5步处可以对程序进行调整:
  # vi /etc/vsftpd/vsftpd.conf  查看ftp连接情况
     log_ftp_protocol=YES
     dual_log_enable=YES
     syslog_enable=YES  
  # vi /etc/pam.d/vsftpd 调试pam_mysql连接情况
     auth   required      /usr/local/lib/security/pam_mysql.so user=root passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2 verbose=1
     account  required    /usr/local/lib/security/pam_mysql.so user=root passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2 verbose=1

---------
最后,你在上传的时候会发现,文件权限都是600,看vsftpd.conf里,有一个local_umask,上面还有注释,如果要改改成022,大多数Ftpd都是这么配置的。
关于umask为什么是022,可以查看老王的文章:Umask补习班
里面有这么一句:注:权限计算实际上是二进制位的与操作,参考All About the umask and Permissions




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: vsftpd

« 上一篇 | 下一篇 »

只显示10条记录相关文章

备份:最简单的pure-ftp配置搭建ftp服务器 (浏览: 20357, 评论: 1)
Vsftpd虚拟用户设置 (浏览: 14782, 评论: 1)

1条记录访客评论

VSFTPD对于虚拟用户管理过于复杂,但对权限控制挺不错,PURE-FTPD刚好相反,推荐用ncftpd。
------
可惜我配置完了

Post by deeka on 2011, November 19, 8:46 AM 引用此文发表评论 #1


发表评论

评论内容 (必填):