ubuntu下配置ProFtpd服務使用sqlite3作為後端使用者認證
阿新 • • 發佈:2019-01-01
個人機器需要開個檔案共享,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>