1. 程式人生 > >ubuntu下配置ProFtpd服務使用sqlite3作為後端使用者認證

ubuntu下配置ProFtpd服務使用sqlite3作為後端使用者認證

個人機器需要開個檔案共享,Linux機器懶得配置SMB,就直接安裝了ProFtpd,以做FTP伺服器

Ubuntu安裝挺簡單,可使用就不那麼友好了,配合GAdmin-Proftpd,一樣不好用。

首先就卡在使用者上,預設ftp使用者等等都登入不進,各種認證失敗,麻煩死了

搜尋一下資料,可以支援Sqlite3做後端使用者認證

就修改了一下Proftpd的配置,首先在modules.conf開啟sql認證的終端

LoadModule mod_sql.c

......

# Install proftpd-mod-sqlite and decomment the previous
# mod_sql.c module to use this
LoadModule mod_sql_sqlite.c

然後再配置Sqlite3的配置,直接從網路上抄下來的,內容直接存為一個檔案,放在/etc/proftp.d/conf.d/目錄下

#首先來說這倆,定義proftpd以什麼身份來執行,跟apache裡的是一個意思
#我是習慣了apache定義為www使用者和www組,配置proftpd也就這樣了
#以什麼身份執行,我個人感覺沒啥特別意義,關鍵是虛擬使用者對實體使用者的對映!
User ftp
Group nobody
#sqlite2跟3差別較大,各軟體平臺對其支援也是分開來的,比如PHP
#這裡就是指明,使用sqlite3
SQLBackend sqlite3
#資料庫檔案的絕對路徑,一定要絕對
SQLConnectInfo /usr/local/lib/ftpd.db
#資料庫內虛擬使用者的密碼認證方式
#我認為Backend的意思就是資料庫自己的認證方式,比如mysql的password方案
#該方案可以指定多種,使用空格隔開,按照先後,依次try
#下面這句的意思就是“先用sqlite自己的認證方式(我用的明文,其他解決方案沒研究)
#如果不行,再使用crypt(3)的方案”,實際配置檔案裡我只要了一個Backend
SQLAuthTypes Backend Crypt
#自定義存放使用者資訊的表和欄位
#下面這句的意思就是
#users表 裡的 欄位:使用者名稱 密碼 系統對映uid 系統對映gid 主目錄 shell路徑
#切記:表和欄位的名字可以隨便起(跟實際資料庫中的表和欄位相對應),但順序不可亂
#按照我對英文howto的理解,前4個欄位名是必須要設定的,後兩個如果自己用不上
#必須使用NULL來填補,這樣mod_sql模組就不會去檢索這倆欄位了
SQLUserInfo users user_name user_passwd uid gid home_dir NULL
#如果主目錄欄位名設定為NULL,那麼這裡這個就必須要定義
#這個是用來定義那些沒有“主目錄定義的使用者”的主目錄,有點繞口:P
#SQLDefaultHomedir “/tmp”
#這個引數設定為off的意思,是不讓proftpd去檢查該FTP使用者對映到系統裡的使用者的shell
#就是說,有沒有shell,我都讓你登陸。特別是上面的欄位,將shell路徑這個設定為了NULL
RequireValidShell off
#組資訊,沒啥意思,就這麼放著吧,意思跟上面那個SQLUserInfo一樣
#表名 組名 組id 成員
SQLGroupInfo groups group_name gid members
#這裡是使用者身份認證的程度,只驗證user,連帶group啥的都驗證
#圖簡單,我這裡只驗證user這一層
SQLAuthenticate users
#設定ProFTPD允許登陸的最小UID,這個UID是對映到linux系統內實際使用者的UID,小於這個值將不允許登陸
#這個值如果不設定,系統預設的是999,在很多國內的文章裡,uid和gid都是設定5000多
#所以即使不管這個值,也不會有問題,可是如果你跟我一樣,對映使用者的uid和gid都小於999了,就要注意它了
#我的www使用者的uid和gid都是504,在這裡,卡了我有一個多小時,TNND
SQLMinUserUID 500
#這兩個的意思,是所有未在資料庫中定義uid和gid的使用者的預設uid及gid
SQLDefaultUID 504
SQLDefaultGID 504

最後建立SQLITE3的資料庫

執行sqlite3 /usr/local/lib/ftpd.db

輸入如下兩個SQL語句,分別建立表,及插入一個使用者 

CREATE TABLE "users" ("user_name" varchar(20), "user_passwd" varchar(50), "uid" int(11) NOT NULL DEFAULT 504, "gid" int(11) NOT NULL DEFAULT 504, "home_dir" varchar(200), "shell" varchar(200));

INSERT INTO "users" VALUES('test','test',504,504,'/home/www/ftp/test',NULL);

 使用test使用者就可以登入了。

 

然後配置目錄許可權,我希望做到是所有使用者只允許上傳、下載,不允許刪除

簡單配置一個檔案放在/etc/proftp.d/conf.d目錄下

<Limit DELE RMD> 
     DenyAll #全部匿名使用者在download資料夾不能WRITE寫入、刪除、刪除資料夾 
</Limit>