文章翻譯於 http://www.howtoforge.com/virtual-hosting-with-pureftpd-and-mysql-ubuntu-7.10
在架設 FTP Server 時我們都知道,要新增使用者時一般就是直接useradd,在伺服器中新增一個使用者,這樣子的壞處就是不太安全,而且彈性不大,PureFTPd with MySQL 的意思就是使用MySQL資料庫去管理使用者的帳號/密碼資料,甚至可以管理上下載頻寬、硬碟使用配額的限制,管理使用者的帳號變得很有彈性、很輕鬆。
一開始我們先切換到 root 身份
# sudo su –
安裝 mysql server,mysql client,apache2,phpmyadmin…這些套件
# apt-get update
# apt-get install mysql-server mysql-client libmysqlclient15-dev phpmyadmin apache2
如果你還沒安裝過 mysql 跟 apache 你會出現以下兩個問題:
New password for the MySQL “root” user:(設定mysql root的密碼)
Web server to reconfigure automatically: (選擇apache2)
安裝 pureftpd with mysql 的基本設定套件
# apt-get install pure-ftpd-mysql
接著我們要新增一組系統帳號,這個帳號是給登入進來User預設的身份,因為只要連進unix-like系統裡要存取系統一定要取得一組UID,GID,不管這組UID,GID的權限多大,所以我們就要新增一組公用的系統帳號,使用者 ftpuser,群組 ftpgroup,沒有sheel,限制一般login(指 ssh 或 telnet),UID跟GID都是2001
# groupadd -g 2001 ftpgroup
# useradd -u 2001 -s /bin/false -d /bin/null -c “pureftpd user” -g ftpgroup ftpuser
再來我們開始設定MySQL
使用 root 身份登入mysql,並建立 pureftpd database,建立管理者 pureftpd,並設定管理者密碼 ftpdpass (自訂)
# mysql -u root -p
CREATE DATABASE pureftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO ‘pureftpd’@’localhost’ IDENTIFIED BY ‘ftpdpass‘;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO ‘pureftpd’@’localhost.localdomain’ IDENTIFIED BY ‘ftpdpass‘;
FLUSH PRIVILEGES;
建立 tables
USE pureftpd;
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) ) TYPE=MyISAM;
quit;
設定 pureftpd
備份 pureftpd 設定檔
# cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
清空設定檔
# cat /dev/null > /etc/pure-ftpd/db/mysql.conf
編輯設定檔如下
# vi /etc/pure-ftpd/db/mysql.conf
MYSQLSocket /var/run/mysqld/mysqld.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
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”)
使用者登入之後,限制只能在自己的目錄中
# echo “yes” > /etc/pure-ftpd/conf/ChrootEveryone
第一次登入沒有建立目錄的話,自動建立目錄
# echo “yes” > /etc/pure-ftpd/conf/CreateHomeDir
重新啟動 pureftpd
# /etc/init.d/pure-ftpd-mysql restart
接著我們新增一組測試帳號,使用者 exampleuser,密碼 secret,UID 2001,GID 2001,登入家目錄 /home/www.example.com,上傳頻寬限制 100 KB/s,下傳頻寬限制 100 KB/s,家目錄大小限制 50 MB,檔案數量限制 0 (無限)
# mysql -u root -p
USE pureftpd;
INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES (‘exampleuser’, ‘1’, MD5(‘secret’), ‘2001’, ‘2001’, ‘/home/www.example.com’, ‘100’, ‘100’, ”, ‘*’, ’50’, ‘0’);
quit;
OK之後開啟FTP Client登入試試看,帳號/密碼 exampleuser/secret
之前已經安裝了 phpmyadmin,所以我們可以使用 http://IP/phpmyadmin/ 來方便管理MySQL
table 欄位的意義:
User: 使用者名稱
status: 使用者狀態,1為可登入,0為不可登入
Password: 密碼
UID: 系統的 UID,在這裡是 2001
GID: 系統的 GID,在這裡是 2001
Dir: 登入系統的使用者目錄
ULBandwidth: 上傳頻寬,單位 KB/s
DLBandwidth: 下載頻寬,單位 KB/s
comment: 使用者身份簡介說明
ipaccess: 連線來源 IP限制,* 為不限制
QuotaSize:家目錄的大小限制,單位 MB,0為不限制
QuotaFiles: 檔案數量限制,0為不限制
要新增一個使用者的話,如下圖
如果想要新增一組匿名的帳號,提供所有人登入的話,我們還是一樣先新增一組系統的帳號,預設讓匿名帳號登入進來的身份
# groupadd ftp
# useradd -s /bin/false -d /home/ftp -m -c “anonymous ftp” -g ftp ftp
設定 pureftpd
# echo “no” > /etc/pure-ftpd/conf/NoAnonymous
重新啟動 pureftpd
# /etc/init.d/pure-ftpd-mysql restart
接著設定一下讓匿名使用者登入進來的目錄以及使用權限,以下的設定的權限只能讓匿名使用者上傳不能下載,如果有其他不同需求,就在以下自己自訂
# cd /home/ftp
# mkdir incoming
# chown ftp:nogroup incoming/
# chmod 311 incoming/
# cd ../
# chmod 555 ftp/
請問一下
我今天試了一天
我該如何把這套掛在CENTOS 5.1上?