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測試連線如果設定沒問題就可以成功了