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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章