快捷搜索:   nginx

Linux下VsFTP和ProFTP用户管理高级技巧

  FTP服务时互联网上比较古老的一种应用,至今Interner应用面非常广泛,但令管理员头痛不已的是其用户管理,既多且杂,如何解决这一问题呢?使用MySQL与ProFTP或VsFTP软件结合可以搭建一个高效、稳定且集中管理的FTP服务器。本来就来介绍一下如何搭建一个方便管理的基于MySQL数据库的FTP服务器。

  一、软件版本的选择:

  搭建基于数据库的FTP服务器首先要选择合适的软件。下面就是所选择软件的详细信息:

  ◆Linux版本RHEL5;

  ◆MySQL版本MySQL-standard-5.1.30-1.rhel5.src.rpm;

  ◆FTP服务器proftpd-1.3.2.tar.gz和vsftpd-2.2.1.tar.gz;

  ◆MySQL的PAM验证程序pam_mysql-0.8RC1.tar.gz;

  需要说明的是,RHEL5安装时自定义安装,“development tools”项必须选择,否则编译调试软件时需要的软件包需另行安装;其次,要确保所安装Linux系统时没有安装MySQL与FTP服务器等软件,如果有则先卸载;再次,ProFTPD与VsFTPD两者不要在同台计算机同时使用,这样会造成意想不到的问题,读者根据自己的需求和软件的具体功能选择其中之一。

  建立程序安装目录

  整个安装过程以root用户执行如下命令:

  #cd /soft/programe

  #mkdir mysq

  需要注意目录名称的大小写。

  #mkdir proftpd

  #mkdir pam_mods

  MySQL的安装目录为/soft/program/mysql,ProFTPD的安装目录为/soft/program/proftpd,pam_mysq1.so的安装目录为/soft/program/pam_mods,/storage是一个已经存在的目录,所有的FTP用户上传和下载文件都存放在这里。

  安装MySQL

  ◆ 增加一个管理MySQL的用户和组:

  #groupadd mysqlgrp

  #useradd -g mysqlgrp mysqladm

  #passwd mysqladm

  ◆ 切换到MySQL-stan-dard-5.1.30-1.rhel5.src.rpm文件所在的目录,执行以下步骤安装:

  #rpm-ivh MySQL-stan-dard-5.1.30-1.rhel5.src.rpm

  此条命令解压出mysql-5.1.30.tar.gz文件存放在以下的目录中。

  #cd /usr/src/redhat/SOURCE

  #tar zxvf mysqt-5.1.30.tar.gz

  #cd mysql-5.1.30

  #./configure Prefix=/soft/program/mysql --with-extra-charsets=all

  其中,“--prefix=/soft/program/mysql”参数是用来指定Mysql的安装目录,“--with-extra-charsets=all”是用来支持所有的字符集。

  #make

  #make install

  ◆ 初始化数据库

  #cd /soft/program/mysql/bin

  #./mysql_install_db

  ◆ 为了安全要修改数据库存放目录的属主信息和访问模式/soft/program/mysqll/var为数据库存放的缺省目录

  #cd /soft/program/mysql

  #chown –R mysqladm:mysqlgrp var

  #chmod -R go-wrx var

  ◆ 修改配置文件

  #cd /soft/program/mysql/share/mysql

  #cp my-small.cnf /etc/my.cnf

  #cd /etc

  在my.cnf文件中,增加如下内容:

  [mysql]

  user=mysqladm #表示用mysqladm 用户启动MySQL#

  default-character-set=utf8 #表示使用UTF-8字符集,此种字符集通用性较好,也很好的支持中文,当然也可以直接使用GBK。

  [clent]

  Default-character-set=utf8

  ◆ 启动

  启动方式有两种,一种是手工启动,一种是自动启动,其中手工启动的操作如下:

  #cd /soft/program/mysql/bin

  #./mysqld_safe&

  自动启动则需要在/etc/rc.d/rc/local中加入以下的内容,开机自动启动MySQL数据库:

  If [-x /soft/program/mysql/bin/mysqld_safe]; then

  install_path_name /bin/mysqld_safe&

  fi

  ◆ 修改管理员密码

  使用如下命令修改数据库密码:

  #cd /soft/program/mysql/bin

  #./mysqladmin -h localhost -u root password '123456'

  上述命令的意思是本机上(-h host)使用的管理数据库的缺省管理账号root。需要注意的事,此root并非Linux系统中的root用户,密码设置为123456.

  安装ProFTPD

  ◆切换到proftpd-1.3.2.tar.gz文件所在的目录,执行以下步骤安装:

  #tar zxvf proftpd-1.3.2.tar.gz

  #cd proftpd-1.3.2

  #./configure--prefix=/soft/program/proftpd --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql

  此参数将支持MySQL和Quota模块添加进来。

  --with-includes=/soft/program/mysql/include/mysql

  上述参数指定MySQL中include的目录路径。

  --with-libraries=/soft/program/mysql/lib/mysql

  此参数指定MySQL中lib的目录路径。

  #make

  #make install

  使用如下命令建立一个用于管理ProFTPD的Linux系统账号和组。

  #groupadd -g 2009 ftpgroup

  #useradd -u 2009 –s /bin/false -d /storage -g ftpgroup ftpuser

  #chown -R ftpuser.ftpgroup /storage

  #chmod –R go-wrx- /storage

  #chmod –R u+wrx /storage

  简单修改ProFTPD配置文件,使之正常运行:

  #cd /soft/program/proftpd/etc

  用编辑器打开proftpd.conf,修改一下的内容:

  #Set the user and group under which the server will run.

  User ftpuser

  Group ftpgroup

  ◆启动ProFTPD

  启动Proftpd同样有两种方法,即手工启动和自动启动,其中手工启动操作如下:

  #cd /soft/program/proftpd/sbin/

  #./proftpd

  此时一个基本的FTP服务器已经搭建成,可以进行测试了。需要注意的是,启动时如果出现具有以下信息的错误:

  error while loading shared libraries:libmysqlclient.so.15:cannot open shared object file:No such file or directory

  通常的解决办法如下:

  #cd /etc

  用文本工具打开ld.so.conf,添加以下的内容/soft/program/mysql/lib/mysql

  #ldconflg

  更新ld.so cache file。

  要让ProFTPD自动启动在/etc/rc.d/rc.local中加入以下的内容,开机即可自启动ProFTPD:

  /soft/program/proftpd/sbin/proftpd

  二、MySQL与ProFTPD组合

  在MySQL 中建立一个名为ftp的数据库,在该数据库中建立以下的四个表:

  ◆登录FTP服务器的用户表ftpusers,字段信息如下所示,这些字段是必需的,其他字段根据自己的需要添加,参考字段如下:

  'userid' text NOT NULL #用户登录账号#

  'passwd' text NOT NULL #用户登录密码#

  'uid' int(11)NOT NULL default '2009', #与Linux系统账号ftpuser的UID号一致#

  'gid' int(11)NOT NULL default '2009', #与Linux系统组#

  ftpgroup 的GID号一致'homedir' text,用户文件上传下载目录,如账号名为abc,此处就填写/storage/abc,'shell' text default ,'/sbin/nologin'这个是用来指定用户是否能登录Linux系统,这里默认的是不能登录。

  ◆FTP用户归属表ftpgroups,字段信息如下所示,关于建立该组的目的将在quotalimits表中说明

  'groupname' text NOT NULL #组名#

  'gid' smallint(6) NOT NULL default'0',#组的id号#

  'memembers' text NOT NULL #成员#

  ◆用于设置磁盘限额相关信息的表quotalimits和quotatallies,这两个表的字段请不要改动,它是与ProFTPD的配置文件紧密联系,quotalimits表的字段信息如下:

  'name' varchar(30)default NULL,

  'quota_type' enum('user','group','class','all')NOT NULL default 'user',

  'per_session' enum('false','true')NOT NULL default'false',

  'limit_type' enum('soft','hard')NOT NULL default'soft',

  'bytes_in_avail'float NOT NULL default'0',

  'bytes_out_avail'float NOT NULL default'0',

  'bytes_xfer_avail'float NOT NULL default'0',

  'files_in_avail'int(10) unsigned NOT NULL default'0',

  'files_out_avail'int(10)unsigned NOT NULL default'0',

  'files_xfer_avail'int(10)unsigned NOT NULL default'0'

  需要注意的是,name应该这样理解,既能表示单个用户,也能表示用户组名。如果在quota_type(限额类型)中使用group来认证的话,那就得在这里设置组名,这样整组都具有统一的磁盘限额的特性,当然要在ftpgroups表中插入组记录,并且在member字段中得把用户一个一个的列进去。默认值可以为空NULL。如果为空,则针对所在有quota_type中设置的类型,比如在quota_type中设置为user,就是针对所有ftpusers中的用户起作用,如果是group名,也是对ftpgroups所有组作用。quota_type磁盘限额类型,可以设置为用户,也可以设置为用户组group。如果name写的是用户组,这里就得设置为group来认定。默认为user认证。per_session默认为false.limit_type默认为soft。Bytes_in_avail用户占用空间大小,也就是FTP用户空间容量,单位是byte,默认为0,0是不受限制,以下同理。bytes_out_avail所有下载文件的总和,默认为0。

  bytes_xfer_avail一个用户上传下载流量总和,默认为0。files_in_avail限制上传文件总和,默认为0。files_out_avail限制下载文件个数总计,默认为0。files_xfer_avail允许下载和上传的文件总和,默认为0。Quotatallies表的字段信息,各字段信息参照quotalimits。配置参考参数如下:

  name VARCHAR(30)NOT NULL,

  quota_type ENUM("user","group","class","all")NOT NULL,

  bytes_in_used FLOAT NOT NULL,

  bytes_out_used FLOAT NOT NULL,

  bytes_xfer_used FLOAT NOT NULL,

  files_in_used INT UNSIGNED NOT NULL,

  files_out_used INT UNSIGNED NOT NULL,

  files_xfer_used INT UNSIGNED NOT NULL

  此外,在proftpd.conf文件中增加以下的内容:

  ◆数据库连接的信息,ftp是数据库名,localhost是主机名,root是连接数据库的用户名,123456是密码。

  SQLConnectlnfoftp@localhost root 123456

  ◆数据库认证的类型,Plaintext表示明文认证方式

  SQLAuthTYpes Backend Plaintext

  ◆指定用来做用户认证的表的有关信息

  SALUserlnfo ftpusers userid passwd uid gid homedir shell

  SQLGrouplnfo ftpgroups groupname gid members

  ◆校验数据表

  SQLAuthenticate users groups usersetfast groupsetfast

  ◆如果home目录不存在,则系统会根据ftpusers表中的home字段。

  新建一个目录:

  SQLHomedirOnDemand on

  ◆打开磁盘限额引擎

  QuotaEngine on

  ◆设置磁盘限额

  QuotaDirectoryTally on

  ◆设置磁盘容量显示时的单位

  QuotaDisplayUnits Mb

  ◆设置磁盘限额日志文件

  QuotaLog”/usr/local/proftpd/var/quota”

  ◆显示磁盘限额信息

  ftp登录后可执行quote site quota命令查看当前磁盘使用情况:

  QuotaShowQuotas on

  ◆设置磁盘限额日志文件

  QuotaLog”/var/log/quota”

  ◆指定磁盘限额模块使用的数据库信息

  SQLNamedQuer get-quota-limit SELECT "name,quota_type,bytes_in_avail,bytes_out_avail,bytes_xfer_avail,files_in_avail,files_out_avail,files_xfer_avail FROM quotalimits WHERE name='%{0}'AND quota_type='%{1}'"

  SQLNamedQuery get-quota-tally SELECT"name,quota_type,bytes_in_used,bytes_out_used,bytes_xfer_used,files_in_used,files_out_used,filed_xfer_used,FROM quotatallies WHERE name='%{0}'AND quota_type ='%{1}"

  SQLNamedQuery update-quota-tally UPDATE"bytes_in_used =bytes_in_used+%{0},bytes_out_used=bytes_out_used+%{1},bytes_xfer_used=bytes_xfer_used+%{2},files_in_used=files_in_used+%{3},files_out_used=files_out_used+%{4},files_xfer_used =files_xfer_used+%{5} WHERE name='%{6}'AND quota_type = '%{7}'" quotatallies

  SQLNamedQuery insert-quota-tally INSERT"%{0},%{1},%{2},%{3},%{4},%{5},%{6},%{7}"quotatallies

  QuotaLimitTable sql:/get-quota-limit

  QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

  另外,读者还可以在proftpd.conf中添加一些有关超时、限制连接次数、加快连接速度、支持断点传输及安全传输等内容。

  三、VsFTPD与MySQL的组合

  ◆安装前准备工作

  安装前需要注意的是,VsFTPD默认配置中需要“nobody”用户,确保Linux系统中有该用户。VsFTPD默认配置中需要“/usr/share/empty”目录,确保Linux系统中有此目录。

  VsFTPD提供匿名FTP服务时,需要“ftp”用户和一个有效的匿名目录/var/ftp,使用下列命令建立用户、目录和目录的相关安全设置。匿名目录也可以改成自己喜欢的目录并使匿名用户具有读写权限。

  #useradd -d /var/ftp ftp

  #chown root.root /var/ftp

  #chmod og-w/var/ftp

  ◆切换到vsftpd-2.2.1.tar.gz文件所在的目录执行以下步骤安装:

  #tar zxvf vsftpd-2.2.1.tar.g

  #cd vsftpd-2.2.1

  #make

  #make install

  请将vsftpd-2.2.1目录中已编译好的二进制文件、手册等复制到相应目录 (如果该目录中没有以下的文件):

  #cp vsftpd /usr/local/sbin/vsftpd

  #cp vsftpd.conf /etc

  #cp RedHat/vsftpd.pam /etc/pam.d/ftp

  以下两步是复制手册,可以不复制。

  #cp vsftpd.conf.5 /usr/local/share/man/man5

  #cp vsftpd.8 /usr/local/share/man/man8

  ◆以standalone模式运行VsFTPD

  首先在/etc/vsftpd.conf添加以下内容:

  Listen=YES

  此参数行表示以独立方式启动vsftpd进程。此时匿名用户已经可以登录,如果想要提供系统用户登录,把下列二行的注释去掉,系统用户的目录就是建立账号时设定的目录:

  Local_enable=YES

  Write_enable=YES

  ◆启动VsFTPD

  #cd /usr/local/sbin

  #./vsftpd&

  现在可以进行测试了。

  ◆支持MySQL的VsFTPD

  首先需要建立一个虚拟用户对应的Linux系统账号,可以使用如下命令来完成:

  #useradd -s /bin/false –d/storage ftpuser

  #passwd ftpuser

  #chown –R ftpuser.ftpgroup /storage

  #chmod –R go-wrx /storage

  #chmod –R u+wrx /storage

  ◆数据库表ftpusers,字段信息如下:

  'userid' text NOT NULL #用户登录账号#

  'passwd' text NOT NULL #用户登录密码#

  需要注意的是,数据库中必需授权ftpuser用户可以读ftp数据库的ftpusers表,授权这一步一定要正确设置。

  ◆安装MySQL的PAM验证程序;

  #tar zvxf pam_mysql-0.8RC1.tar.gz

  #cd pam_mysql-0.8RC1

  #./configure --with-mysql=/soft/program/mysql --with-pam-mods-dir=/soft/program/pam_mods

  上述参数行用来指定pam_mysql.so文件存放的目录。

  --with-openssl

  使用此参数行后可以避免make时报有关md5.h的编译错误。

  #make

  #make install

  ◆修改/etc/vsftpd.conf打开或更改以下几项:

  anonymous_enable=YES

  local_enable=YES

  guest_enable=YES

  guest_username=ftpuser

  打开这个参数后便允许虚拟用户上传文件、建立目录等操作。

  write_enable=YES

  anon_upload_enable=YES

  anon_mkdir_write_enable=YES

  anon_other_write_enable=YES

  ascll_upload_enable=YES

  ascll_download_enable=YES

  VsFTPD配置文件中还可以进行更多的设置,如磁盘配额、虚拟用户个人目录的建立、性能与负载控制、FTP被动模式断口设置、安全设置等,读者根据自己的需要进一步的完善。

  ◆编辑文件

  修改/etc/pam.d/ftp中去掉其他的内容,添加以下的内容:

  #auth

  auth required/soft/program/pam_mods/pam_mysql.so

  user=ftpuser passwd=6789host=localhost db=ftp

  table=ftpusers usercolumn=userid passwdcolumn=passwd crypt=0

  #account

  Account required/soft/program/pam_mods/pam_mysql.so

  User=ftpuser passwd=6789 host=localhost db=ftp table=ftpusers usercolumn=userid passwdcolumn=passwd crypt=0

  涉及到的参数,只要对应前面数据库的设置就可以明白它们的含义。其中:crypt=0,口令以明文方式(不加密)保存在数据库中,crypt=1,口令使用Unix系统的DES加密方式加密后保存在数据库中;crypt=2,口令经过MySQL的password()函数加密后保存。FTP数据库中ftpusers表的授权用户ftpusers和密码必须正确设置。

  ◆开机自启动VsFTPD

  请将vsftpd-2.2.1/xinetd.d/vsftpd文件制到/etc/xinetd.d/中(如果该目录中没有该文件)。此外,还需设置vsftpd.conf中listen和Tcp_Wrappers参数,将其都设置为NO,最后,用ntsysv命令,选中Vsftpd守护进程即可。

  通过上面的知识,结合Apache、PHP等软件可以开发许多功能,如自动申请主页空间等,而且使用phpMyAdmin可以以Web方式管理MySQL,很容易的添加和删除用户,这样FTP用户管理就轻松多了。

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论