文章出處

概述

pure-ftpd是linux下的一個ftp服務端,據說安全性較高。我在centos6下用yum安裝pure-ftpd,并配置了通過MySQL進行用戶的增刪改查,以及對應到apache的web目錄權限,便于直接使用。

關鍵一點是,配置出現問題時要及時查看log:

vim /var/log/messages

安裝

yum install pure-ftpd

請確保安裝了epel的repo

同時,這里假定你安裝了httpd、MySQL、phpMyAdmin

MySQL相關的配置

要使用MySQL管理pureftpd的用戶,需要為pureftpd服務創建一個數據庫帳號,以及一個數據庫。

創建pureftpd數據庫帳號

通過phpMyAdmin的web界面創建用戶,或者mysql的命令行創建:
用戶名:pureftpd
密碼:your_pureftpd_password
并授予權限
同時創建一個數據庫,可以和用戶名一致

創建數據表

為剛剛創建的數據庫建立一張表,存儲pureftp的ftp帳號信息,e.g.,取名為ftpd的一張表:

-- MySQL dump 10.14  Distrib 5.5.44-MariaDB, for Linux (x86_64)
--
-- Host: localhost    Database: pureftpd
-- ------------------------------------------------------
-- Server version   5.5.44-MariaDB-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `ftpd`
--

DROP TABLE IF EXISTS `ftpd`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ftpd` (
  `User` varchar(16) NOT NULL DEFAULT '',
  `status` enum('0','1') NOT NULL DEFAULT '0',
  `Password` varchar(64) NOT NULL DEFAULT '',
  `Uid` varchar(11) NOT NULL DEFAULT '-1',
  `Gid` varchar(11) NOT NULL DEFAULT '-1',
  `Dir` varchar(128) NOT NULL DEFAULT '',
  `ULBandwidth` smallint(5) NOT NULL DEFAULT '0',
  `DLBandwidth` smallint(5) NOT NULL DEFAULT '0',
  `comment` tinytext NOT NULL,
  `ipaccess` varchar(15) NOT NULL DEFAULT '*',
  `QuotaSize` smallint(5) NOT NULL DEFAULT '0',
  `QuotaFiles` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`User`),
  UNIQUE KEY `User` (`User`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

pureftpd的MySQL配置文件

cd /etc/pure-ftpd
cp pureftpd-mysql.conf pureftpd-mysql.conf.orig
vim pureftpd-mysql.conf

pureftpd-mysql.conf內容大致如下,需要注意MYSQL的帳號(MYSQLUser)、密碼(MySQLPassword)、數據庫名(MYSQLDatabase),以及數據表(關鍵!這里是ftpd)的名字,和你剛才配置的一致:

MYSQLSocket      /var/lib/mysql/mysql.sock
#MYSQLServer     localhost
#MYSQLPort       3306
MYSQLUser       pureftpd #!!這里
MYSQLPassword   ftpdpass #!!這里
MYSQLDatabase   pureftpd ##!!這里
#MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext
MYSQLCrypt      md5 

##注意下面各行中FROM后面的名字,確保ftpd是你的數據表的名字
MYSQLGetPW      SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetUID     SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetGID     SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetDir     SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTASZ   SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTAFS   SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")

pureftpd的配置文件配置

編輯/etc/pure-ftpd/pure-ftpd.conf文件,確保 ChrootEveryone, MySQLConfigFile, 和 CreateHomeDir這三個處于啟動狀態。

vi /etc/pure-ftpd/pure-ftpd.conf

最終效果如下:

[...]
ChrootEveryone              yes
[...]
MySQLConfigFile               /etc/pure-ftpd/pureftpd-mysql.conf
[...]
CreateHomeDir               yes
[...]
MinUID                      14

這里面MinUID表示ftp登錄賬戶對應的UID。ftp賬戶其實是虛擬賬戶,并不是Linux下的賬戶直接拿來用(當然你用sftp登錄另說),每個ftp用戶對應一個linux下的賬戶,而這個linux賬戶的唯一標識就是UID了。因為配置這個ftp是希望直接用于apache的web目錄,因此uid就用apache的48就可以了。另外創建ftp賬戶時還有一個GID的問題,apache組的GID也是48。為保證正常登錄,MinUID設置為一個較小值,這里使用14。查看其他組的GID:

vim /etc/group

添加ftp用戶

用phpMyAdmin的web頁面,或者mysql的命令行,創建用戶。
例如,現在我們建立一個用戶名user為 testuser,status 1(表示ftp帳號處于激活狀態),ftp密碼Password:secret(使用MD5存儲),UID和GID 48(使用apache組的GID和apache用戶的UID),根目錄Dir /var/www/html/test.example.com,以及上傳和下載限制為100KB/秒,和50MB的空間大小。

INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('testuser', '1', MD5('secret'), '2001', '2001', '/var/www/html/test.example.com', '100', '100', '', '*', '50', '0');

UID:ftp用戶的ID。
GID:ftp用戶組的ID。
Dir:ftp用戶對應的根目錄。
ULBandwidth:上傳最大速度,單位為KB/s。
DLBandwidth:下載最大速度,單位為KB/s。
comment:備注。
ipaccess:可以連接ftp服務器的IP。“*”表示任何IP可以連接。
QuotaSize:最大存儲空間,單位為MB。“0”表示不限制。
QuotaFiles:最大建立的文件數量。“0”表示不限制。

設定服務項

開機自啟動服務項:

chkconfig --levels 235 pure-ftpd on

啟動服務:

/etc/init.d/pure-ftpd start
或者:
service pure-ftpd start

遇到登錄故障,請查看/var/log/messages,可能需要多重啟幾次服務:

service pure-ftpd restart

其他

本文參考https://www.centos.bz/2011/03/centos-pureftpd-install/

里面包含了創建新的用戶組的問題。。

P.S. 如果你復制本文內容后執行還是無法登錄,那么建議刪掉一些空格換行符。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()