VSFTPD虛擬用戶限制IP訪問解決方案與Linux系統賬戶的完美結合

  在Windows上用Filezilla Server  ftp程序,通過配置界面,可以很容易地實現FTP虛擬用戶放號和限制虛擬用戶訪問IP,但是在Linux上部署vsftpd時卻遇到了一些小麻煩,本來以爲FTP在兩個系統下,都有很好的對應解決方案的......

  我們知道在vsftpd中設置虛擬用戶,網上大量的文章建議讓用PAM機制中的pam_userdb模塊;如果,繼續想深入限制訪問用戶的IP,則根據網上文檔,又必須結合pam_access模塊。但是,在vsftpd虛擬用戶的場景下,pam_userdb + pam_access兩個模塊結合在一起,是衝突的,純粹的虛擬用戶(Virutal User)配置,加上pam_access模塊後,無法完成正常FTP登錄!

  最初,看pam_access的access.conf文件,瞭然於胸的,也僅是對用戶名結合一些IP和域名的限制,爲啥pam_access就不能夠按照用戶名簡單過濾工作呢?是不是某些配置項沒有讓其平滑對接呢?!

 後來配置來配置去,嘗試來、嘗試去,還是從入門到放棄! 開始笨辦法, 研讀vsftpd和pam的源碼!

  看了https://github.com/linux-pam/linux-pam中pam_access.c的代碼,和編譯源碼,利用examples/check_user.c稍微改造下,配置上PAM文件(pam_userdb+pam_access)進行調試,均證明pam_access模塊還是要依賴真實的用戶。

  用vsftpd虛擬用戶的好處是,可以單獨配置其“root”目錄和各種讀寫權限;而用系統真實的local user,無法針對單個用戶進行配置權限,而且也不能很好的共"root"(虛擬用戶映射的系統普通用戶HOME目錄,就很好地作爲虛擬用戶們共同的根目錄)。所以,用虛擬用戶配置vsftpd是必須的要求,那麼限制IP的第二個硬性要求怎麼辦呢?

 在研究了vsftpd和pam源碼後,當時覺得挺無解的?難道真的不能替換filezilla Server?

 後來,想如果我不怕配置上的重複和麻煩,增加一個與pam_userdb中對應的系統真實用戶local user、但卻是要求嚴格、也“最薄”的用戶,結果是什麼樣的呢?

 說幹就幹!反正,也沒有什麼路子走了!

  通過useradd -r -s /sbin/nologin進行添加Linux系統賬戶,又一次用到了它!!!

 繼續調試定製化的check_user(pam_userdb + pam_access),PAM校驗通過了! 這讓我豁然開朗,看來vsftp虛擬用戶結合pam_access模塊限制IP訪問有門路,只是有點與衆不同,哈哈!

 後續,剩下就是掃尾和驗證,只是體力活了。不過,過程也挺快樂的,因爲結果是--確實在vsftpd下驗證是可以的。

 用Linux系統用戶/系統賬戶,避免了在系統中存在過多可以登錄或被攻破的用戶訪問點,又很好地Crack了PAM模塊,讓pam_userdb和pam_access這個兩個在表面上要求極其不相同的兄弟模塊,完美地在“一塊”配合,實現了所要求的vsftpd虛擬用戶限制IP訪問(Virtual User Restricted IP) 

:)

PS:vsftpd默認將local user或虛擬用戶作爲匿名用戶對待,所以,你看到anon_xxx開頭的讀寫權限,竟然可以配置虛擬用戶,那麼,您千萬別覺得奇怪。雖然,我奇怪了很長一段時間:)

發佈了128 篇原創文章 · 獲贊 7 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章