ftp是很常見的服務,但要讓別人使用ftp必須在主機上建設實體帳號才能讓使用者登入

有時候使用者沒有資訊安全的概念就會被入侵,所以將帳密儲存在資料庫裡,建立虛擬帳號,就可以避免這樣的問題

前置作業:
1.安裝pure-ftpd
2.安裝mysql

首先先安裝以Mysql做為認證的套件(pure-ftpd也可以跟postgresql跟LDAP結合,只是安裝套件不一樣)

apt-get install pure-ftpd-mysql

接著設定一些ftp基本的設定

#限制登入後帳號只能在自己的家目錄裡
echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone

#不透過PAM認證,如果這裡改成yes就是使用系統實體帳號登入
echo "no" > /etc/pure-ftpd/conf/PAMAuthentication

#不透過系統認證
echo "no" > /etc/pure-ftpd/conf/UnixAuthentication

#自動建立家目錄
echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir

#不使用匿名登入
echo "yes" > /etc/pure-ftpd/conf/NoAnonymous

#重新啟動
/etc/init.d/pure-ftpd-mysql restart

另外在/etc/pure-ftpd/conf裡會有一個MySQLConfigFile的設定檔,裡面的路徑會指向資料庫連線的設定檔
預設會是在/etc/pure-ftpd/db/mysql.conf
裡面會有一些基本的設定值

#MysqlSocket的路徑
MYSQLSocket      /var/run/mysqld/mysqld.sock

#資料庫的帳號密碼(可以自行更換,但要注意權限問題)
MYSQLUser       root
MYSQLPassword   123

#資料庫名稱
MYSQLDatabase   pureftpd

#用戶密碼編碼方式,cleartext為明碼,另外還有md5(MD5)、crypt(DES)或 password(Mysql的編碼)三種編碼方式
MYSQLCrypt      cleartext

#主要設定是這些,底下還會有一些資料庫的語法,如果資料表不用預設名稱,必須再手動更新那些SQL語法

接著建立一個pureftpd的資料庫,編碼設成utf8_general_ci
建立資料表

CREATE TABLE  `pureftpd`.`users` (
`User` VARCHAR( 20 ) NOT NULL ,
`Password` VARCHAR( 64 ) NOT NULL ,
`Uid` VARCHAR( 11 ) NOT NULL DEFAULT '1000' ,
`Gid` INT( 11 ) NOT NULL DEFAULT '1000' ,
`Dir` VARCHAR( 250 ) NOT NULL ,
PRIMARY KEY (  `User` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;

此時就可以從資料庫新增帳號密碼及家目錄路徑(預設UID和GID都是1000)

用FileZilla測試連線如果設定沒問題就可以成功了

Categories: Linux