linux下用Proftpd搭建ftp服务器及配置方法

 更新时间:2013年06月08日 19:12:00   作者:  
很久以前知道linux下搭建ftp服务器的软件是wuftp,现在真的时代变了,上网看一下几乎全世界的人都用proftpd了!赶个潮流,我也用proftpd在公司的一台备用小服务器上装上ftp服务器

首先proftpd是一个开源软件,其官方地址是http://www.proftpd.org,目前最高版本是:1.3.1(非稳定版),稳定的版本是1.3.0,下载文件为proftpd-1.3.0a.tar.gz

  我下载的是1.3.0,上传到服务器上后按照常规的方法安装即可。

  tar -zxvf proftpd-1.3.0a.tar.gz
  cd proftpd*
  ./configure --prefix=/usr/local/proftpd
  make
  make install

  安装完成!接下来是配置。

  设置一:随机启动服务,sbin/proftpd文件复制到/etc/rc.d/rc.local文件夹中,以实现开机自动启动。
  设置二:配置文件在etc/proftpd.conf,配置文件说明如下:

  ServerName "ProFTPD Default Installation"
  ServerType standalone
  DefaultServer on

  分别表示:服务器名称,服务类型和默认服务状态!
  后面的服务端口啊什么的我就省去不说了,说最关键的权限控制部分。

  # Set the user and group under which the server will run.
  User nobody
  Group nogroup

  注意看上面:以什么用户和什么组来运行服务。

  更改为你现有的组和用户,这里为了管理上的方便和安全性上考虑,建议新建一个ftp组和ftp用户。
  # To cause every FTP user to be "jailed" (chrooted) into their home
  # directory, uncomment this line.
  #DefaultRoot ~
  是否允许用户进入用户的主目录,注意:可是适用/home替代
  # Normally, we want files to be overwriteable.
  AllowOverwrite on
  是否具有重写的权利
  # A basic anonymous configuration, no upload directories. If you do not
  # want anonymous users, simply delete this entire section.
  User ftp
  Group ftp
  # We want clients to be able to login with "anonymous" as well as "ftp"
  UserAlias anonymous ftp
  # Limit the maximum number of anonymous logins
  MaxClients 10
  # We want 'welcome.msg' displayed at login, and '.message' displayed
  # in each newly chdired directory.
  DisplayLogin welcome.msg
  DisplayFirstChdir .message
  # Limit WRITE everywhere in the anonymous chroot
  DenyAll

  这部分是匿名用户的定义其实也很简单。

  启动不了,出现如下错误的解决方法

  [root@new-host sbin]# ./proftpd
  - IPv4 getaddrinfo 'new-host' error: Name or service not known
  - warning: unable to determine IP address of 'new-host'
  - error: no valid servers configured
  - Fatal: error processing configuration file '/usr/local/proftpd/etc/proftpd.conf'

  原因是无法绑定Ip地址。

  在配置文件中增加下面这句:

  DefaultAddress 192.168.8.105

  再重启服务就可以了!

  接上!原来以为这样就完事了,
可是看看才知道如果我要新增加一个FTP用户的话实际上是很麻烦的一件事,因为帐号是直接跟系统帐号想关联的,不安全也不好操作,我们的目的是要做成像虚拟主机服务提供商那样的ftp!

  接下去,需要一个模块的支持到http://www.castaglia.org/proftpd/#Modules去看看proftpd-mod-quotatab模块,注意下面这句话:

  NOTE: mod_quotatab became part of the offical ProFTPD source distribution in 1.2.10rc1. If using a version of ProFTPD later than that, please use the mod_quotatab already included, as it will be most up-to-date.

  表示我们下载的1.3版本已经支持做了这个东西,主要编译安装的时候把mod_quotatab 开起来就可以了,于是重新编译!

  前提:确认你已经安装并且能够正常运行mysql,否则后面的工作都是没有意义的了!

  重新编译:

  ./configure --prefix=/usr/local/proftpd --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql --with-includes=/usr/include/mysql --with-libraries=/usr/lib/mysql

  注意请根据自己的Linux系统找到MySQL的相应include和lib目录,以上例子中的相关路径是大多数Linux系统默认的,如果你的MySQL是通过源码编译安装的,则这两个目录一般在安装路径下。

  有资料说:需要修改contrib目录中mod_sql_mysql.c文件:

  vi mod_sql_mysql.c

  找到#include 这一行,将mysql.h改成你的系统中此文件所在的路径,如/usr/include/mysql/mysql.h
  可是我没有这样做也可以,真奇怪!

  然后make
  make install

  一样的切换到proftpd文件夹中操作,后面的比较复杂,我试试以大学教授的水平用简单的语言讲。
配置proftpd.conf文件

  编辑/usr/local/proftpd/etc/proftpd.conf文件:
  设置磁盘限额
  #设置磁盘限额
  QuotaDirectoryTally on
  #设置磁盘容量显示时的单位
  QuotaDisplayUnits "Kb"
  #打开磁盘限额引擎
  QuotaEngine on
  #设置磁盘限额日志文件
  QuotaLog "/usr/local/proftpd/var/quota"
  #允许显示磁盘限额信息,ftp登录后可执行quote site quota命令查看当前磁盘使用情况
  QuotaShowQuotas on
  指定磁盘限额模块使用的数据库信息
  在proftpd.conf文件中加入以下配置:
  SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_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, files_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

  很多朋友就要问了:这些是什么东东啊?完全看不懂!我也不懂!继续照做就是了~~

  配置FTP用户为MySQL数据库认证方式

  在proftpd.conf文件中加上以下配置:
  SQLConnectInfo databaseName@hostName:port userName password
  #databaseName是为proftpd建立的MySQL数据库的名字
  #hostName是MySQL数据库所在的服务器的名字或ip地址
  #port是MySQL服务所使用的端口
  #userName是数据库的用户名
  #password是数据库用户密码
  SQLAuthTypes Backend Plaintext
  #Backend表示用户认证方式为MySQL数据库的认证方式
  #Plaintext表示明文认证方式,排在最前面的为最先使用的方式
  SQLUserInfo ftpUser userid passwd uid gid homedir shell
  #指定ftp用户数据表的名字和其中的字段名,表名可自行定义,字段名不要改动。
  SQLGroupInfo ftpGroup groupname gid members
  #指定ftp用户组数据表的名字和其中的字段名,这个数据表是可选的,字段名不要改动。
  RequireValidShell off
  #指定是否必须为FTP用户指定一个系统shell,off表示不用指定,on表示必须指定。为了系统安全应该指定为off。
  SQLAuthenticate users groups usersetfast groupsetfast
  #校验数据表
  SQLHomedirOnDemand on
  #如果用户主目录不存在,则系统会根据此用户在用户数据表中的homedir字段的值新建一个目录
创建FTP系统用户和组
  创建一个FTP用户和组,以后所有的其它FTP用户实际上都是通过这个系统用户进行FTP的:
  groupadd –g 2003 ftpGroup
  useradd –u 2003 –g ftpGroup –d /home ftpUser
  以上建立了一个名为ftpGroup的ftp组,组id为2003;建立了一个ftp用户,用户id为2003,并加入ftpGroup组,用户主目录为/home
  接着修改/home的属主和访问权限:
  chown –R ftpUser.ftpGroup /home
  chmod 644 /home
  644的具体含义请自查看相关文档。
  再修改proftpd.conf文件,找到User 和 Group,将User指定为ftpUser,Group指定为ftpGroup,替换掉原默认值,否则如果系统中没有原默认值所指定的用户和组的话,proftpd是不能成功启动的。

  建立FTP用户认证相关表
  mysql –u root
  use mysql

  添加一个mysql用户:ftp
  添加一个数据库:proftpd
  具体指令请参考MYSQL手册。
  建完用户和数据库后,以新建的用户登录MYSQL:

  mysql –u ftp
  use proftpd;
  create table ftpUser (userid TEXT NOT NULL,passwd TEXT NOT NULL,uid INT NOT NULL,gid INT NOT NULL,homedir TEXT,shell TEXT);
  userid是用户名,passwd是用户密码,uid是用户id,gid是用户所在组的id,homedir是用户主目录,shell是用户的系统shell。
  create table ftpGroup (groupname TEXT NOT NULL,gid SMALLINT NOT NULL,members TEXT NOT NULL);
  groupname是组名,gid是组id,members是组的成员,有多个成员时,要用逗号隔开。
  以上建立了FTP用户和用户组的数据表。
  建立磁盘限额数据表
  CREATE TABLE quotalimits (
  name VARCHAR(30),
  quota_type ENUM("user", "group", "class", "all") NOT NULL,
  per_session ENUM("false", "true") NOT NULL,
  limit_type ENUM("soft", "hard") NOT NULL,
  bytes_in_avail FLOAT NOT NULL,
  bytes_out_avail FLOAT NOT NULL,
  bytes_xfer_avail FLOAT NOT NULL,
  files_in_avail INT UNSIGNED NOT NULL,
  files_out_avail INT UNSIGNED NOT NULL,
  files_xfer_avail INT UNSIGNED NOT NULL
  );
  CREATE TABLE quotatallies (
  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
  );

  以上quotalimits表是FTP用户的磁盘限额配置信息,quotatallies表存放的是用户磁盘限额变动的信息。
  quotatallies表不需要作修改,由程序自动记录
  下面是quotalimits 表中各字段的含意:
  quota_type 磁盘限额的鉴别
  bytes_in_avail 上传最大字节数,就是FTP用户空间容量
  bytes_out_avail 下载最大字节数
  bytes_xfer_avail 总共可传输的文件的最大字节数(上传和下载流量)
  files_in_avail 总共能上传文件的数目
  files_out_avail 能从服务器上下载文件的总数目
  files_xfer_avail 总共可传输文件的数目(上传和下载)

  数据表数据初始化

  表全部建完后,就可以创建FTP用户了,在ftpUser表中插入一条记录如下:
  INSERT INTO ftpUser (userid, passwd, uid, gid, homedir, shell) values ('shine', password(‘yourpassword'), '2003', '2003', '/home/shine', '' );
  以上建立了一个新的FTP用户,用户名为shine,密码为yourpassword,可以看到密码用mysql的系统函数password进行了加密,用户id和组id均为2003,这里随便填,我填了和系统用户ftpUser和系统组ftpGroup相同的id,不知道会不会有问题。/home/shine为用户主目录,用户shell为空。

  如果要想应用到更多的功能,且建立了组的数据表,你也要为此添加记录,不过一定要注意在members的字段多个成员一定要用逗号隔开。

  INSERT INTO ftpGroup VALUES ('ftpGroup', 2003, 'ftpUser');
  下面再来建立初始的用户磁盘限额信息:
  将已经建立的shine帐号赋予50M空间,最多能上传500个文件,文件传输流量为512k,总共只能传输2000个文件,插入记录如下:
  INSERT INTO quotalimits (name,quota_type,per_session,limit_type,bytes_in_avail,bytes_out_avail,bytes_xfer_avail,files_in_avail,files_out_avail,files_xfer_avail)VALUES (‘shine', ‘user', ‘true', ‘soft', ‘51200000', ‘0','512000',‘500','0','2000');
  运行proftpd
  执行以下命令启动proftpd服务:
  /usr/local/proftpd/sbin/proftpd
  开一个控制台输入:
  ftp ftpHostName
  输入用户名:shine
  输入用户密码:yourpassword
  成功登录后执行:
  quote site quota
  可以看到此用户的磁盘使用情况。

相关文章

  • IIS FTP 出现 530 User cannot log in, home Directory Inaccessible 错误处理方法

    IIS FTP 出现 530 User cannot log in, home Directory Inaccess

    今天帮客户处理ftp的时候,因为目录问题,导致FTP 出现 530 User cannot log in, home Directory Inaccessible 错误,按照下面的方法解决了
    2012-04-04
  • Linux环境下wu-ftp服务的配置

    Linux环境下wu-ftp服务的配置

    FTP:文件传输协议,客户/服务器模式。知道FTP后本章中讲的wu-ftp配置是FTP服务器管理配置。
    2011-06-06
  • 安全的FTP服务器 vsftpd简介

    安全的FTP服务器 vsftpd简介

    本文对vsftpd进行了简介。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux, BSD, Solaris, HP-UX 以及 IRIX 上面。它支持很多其他的 FTP 服务器不支持的特征。此外,本文还介绍了FTP基本原理,以及FTP用户管理方面的基础知识
    2016-10-10
  • Serv-U和CuteFTP无法连接FTP服务器问题解答

    Serv-U和CuteFTP无法连接FTP服务器问题解答

    在FTP服务器使用普片流行的今天,一般进行文件的上传和下载都会用到FTP服务器,比如教学用的文件老师一般会放到FTP上学生可以自行下载,还有建站的时候编辑网站的资料都是放到FTP服务器上,方便提取等等,总之FTP应用是非常广泛的
    2014-01-01
  • Server-U 14版本的的安装使用方法

    Server-U 14版本的的安装使用方法

    这篇文章主要介绍了Server-U 14版本的的安装使用方法,需要的朋友可以参考下
    2018-11-11
  • 面向初学者的vsftpd安装指南

    面向初学者的vsftpd安装指南

    本文介绍安装vsftpd最简单的方法。在最新的各大发行版中的安装盘中都有vsFTPd的软件包,您用相应发行版提供的软件包管理工具就能安装上;当然您可以到各大发行版的FTP镜像中找到vsftpd的软件包;当然也能用软件包的管理工具在线安装
    2016-10-10
  • Serv_U 安全设置以后出现530 Not logged in, home directory does not exist的解决方法

    Serv_U 安全设置以后出现530 Not logged in, home directory doe

    今天帮客户服务器安全设置以后,serv_u设置了普通用户启动并开启了防火墙,客户端连接后就出现530 Not logged in, home directory does not exist,经过多次测试与搜索发现了如下问题。
    2011-03-03
  • Serv-U ftp服务器 Server 设置详细说明

    Serv-U ftp服务器 Server 设置详细说明

    目前大多数服务器使用Serv-U Server 为FTP SYSTEM。这里同时建议使用此软件。
    2011-03-03
  • Serv-U停止服务的另类解决方案(批处理监测并运行)

    Serv-U停止服务的另类解决方案(批处理监测并运行)

    执行计划+批处理。设置执行计划,每30分钟执行一个批处理任务。批处理的作用:读取进程列表,查看Serv-U进程是否存在;如果进程不存在,启动该服务并输出日志
    2013-04-04
  • FTP主动模式、被动模式介绍

    FTP主动模式、被动模式介绍

    这篇文章主要介绍了FTP主动模式、被动模式介绍,需要的朋友可以参考下
    2014-08-08

最新评论