配置vsFTP的虚拟用户认证
本文主要参考让Vsftp支持虚拟用户
HTTP对大文件上传总是不给力,还是要借助FTP啊,说到FTP就让我想起大学年代,真让人怀念,废话少说,开始吧:
首先是检查所需的RPM包是否齐全:
1 2 | rpm -aq| grep vsftp rpm -aq| grep db4 |
我的CentOS 4.6是完全安装的,所以都有了 ^_^ :
1 2 3 4 5 6 7 8 9 10 | [root@test02 ~]# rpm -aq|grep vsftp vsftpd-2.0.1-5.EL4.7 [root@test02 ~]# rpm -aq|grep db4 db4-devel-4.2.52-7.3.el4 db4-4.2.52-7.3.el4 db4-devel-4.2.52-7.3.el4 db4-tcl-4.2.52-7.3.el4 db4-4.2.52-7.3.el4 db4-java-4.2.52-7.3.el4 db4-utils-4.2.52-7.3.el4 |
建立低权限用户:
1 | useradd vsftpd -s /sbin/nologin |
安全、安全……..
设置基本的vsFTP配置文件,配置文件/etc/vsftpd/vsftpd.conf 如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 anon_upload_enable=NO anon_mkdir_write_enable=NO dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES chown_uploads=NO xferlog_file=/var/log/vsftpd.log vsftpd_log_file=/var/log/vsftpd.log xferlog_std_format=YES idle_session_timeout=600 data_connection_timeout=30 nopriv_user=vsftpd async_abor_enable=YES chroot_list_enable=NO chroot_local_user=YES chmod_enable=NO ls_recurse_enable=NO pam_service_name=vsftpd userlist_enable=YES listen=YES tcp_wrappers=YES |
其实基本的配置没有太特殊的地方,就是禁止了匿名访问,改了vsFTP的运行用户,锁定用户的路径,真没有什么特殊的地方。到现在为止vsFTP就可跑起来了。
下面是重头戏了。
建立虚拟用户的爹,所谓虚拟用户不过是一名字,虚拟用户在系统中的权限全看他爹的权限,如果他爹的权限很低,那只能是“恨爹不成刚”了。
1 | useradd overlord -s /sbin/nologin |
建立虚拟用户数据库,总得找个地方保存虚拟用户的信息吧,保存在哪呢?在文件数据库中。新建一个文件写入如下内容:
1 | vi /etc/vsftpd/virtusers |
写入如下内容:
1 2 | xinwen p@ssw0rd |
第一行是用户名,第二行是第一行用户名对应的用户的密码(比较拗口),如果愿意,可以多加几个用户,一行用户名紧接一行密码就可以了。
生成一下数据库:
1 | db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers .db |
配置虚拟用户的认证,有数据库保存这些用户信息了,vsFTP会乖乖地去读这些信息吗? 当然不会,我们要借助Linux的PAM认证。
将vsFTP的PAM认证配置文件/etc/pam.d/vsftpd修改成这样:
1 2 3 | #%PAM-1.0 auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers |
注意,我的是64位的Linux,如果是32位的Linux要写成 这样:
1 2 3 | #%PAM-1.0 auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers |
网上有朋友反映pam_userdb.so完全可以不写全路径,不过没有试过。其次要注意,db的路径指向的文件名是没有.db后缀的,但是的的确确是去读 /etc/vsftpd/virtusers.db这个文件。
开启vsFTP对虚拟用户的支持,其实也很简单了,就在刚才 vsFTP 的配置文件 /etc/vsftpd/vsftpd.conf 最后加上以下几行:
1 2 3 4 | guest_enable=YES guest_username=overlord virtual_use_local_privs=YES user_config_dir=/etc/vsftpd/vconf |
细致设定每个虚拟用户,可能已经注意到 user_config_dir 这个参数了吧,这个参数就是用来描述每个虚拟用户的私有配置文件。在/etc/vsftpd/vconf/ 目录下建立一个文件,名叫xinwen,记住要和用户名对应,写入以下几行:
1 2 3 4 5 6 7 8 9 10 11 | local_root=/opt/vsftp/xinwen anonymous_enable=NO write_enable=YES local_umask=022 anon_upload_enable=NO anon_mkdir_write_enable=NO idle_session_timeout=600 data_connection_timeout=120 max_clients=10 max_per_ip=5 local_max_rate=50000 |
第一行是该用户(xinwen)的根目录,当然还要主要一下这个目录对虚拟用户他爹——overlord的权限问题啦,其他可以参照vsFTP配置文件的说明。
重启 vsFTP 就可以用xinwen这个虚拟用户登录了:
1 | service vsftpd restart |
怎么添加用户呢?其实就是修改文件数据库的事情,譬如我想增加一个叫做 cgx 的用户,密码也是 cgx 可以这样做:
1 2 3 4 5 | mkdir -p /opt/vsftp/cgx echo "cgx" >> /etc/vsftpd/virtusers echo "cgx" >> /etc/vsftpd/virtusers db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers .db cp /etc/vsftpd/vconf/xinwen /etc/vsftpd/vconf/cgx |
修改一下 /etc/vsftpd/vconf/cgx 的 local_root 为 /opt/vsftp/cgx 就可以了。注意,每一次修改用户都要用db_load命令重新生成文件数据库。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述