开发者社区> 技术小阿哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Vsftpd虚拟用户模式配置

简介:
+关注继续查看

       原理讲解,vsftpd网上教程一大堆,但很多同学一说虚拟用户还是有点不解,这里我来抛砖引玉和大家分享,VSFTPD利用了PAM登陆认证模块,但是确没有直接使用系统的用户,而是用自己的用户数据库,但由于vsftpd必须要存取操作系统上的文件,所以又离不开系统那个用户,那么就来个映射,不用系统直接登陆,只需要用自己的用户登陆之后在和系统用户做个映射,这样,就能安全很多了。

       应用场景:1,网站虚拟主机配合磁盘配额可以用来管理不同的用户;2,企业用户提供文件共享;3,运维中的原创备份FTP服务器端。

      下面是配置详细过程:

一,安装

  1. yum -y install  vsftpd db4-utils

复制代码


二,配置

  1. cd /etc/vsftpd/

  2. vi ftpuser.txt

复制代码


输入FTP用户名和密码

  1. ftpuser1

  2. 123456

  3. ftpuser2

  4. 654321

复制代码

注意:奇数行为用户名,偶数行为密码

生成FTP账户的数据库文件

  1. db_load -T -t hash -f ./ftpuser.txt ./ftplogin.db

  2. chmod 600 ./ftplogin.db

复制代码


生成和虚拟用户数据库相关联的PAM文件,因为FTP目录的权限需要根据系统用户来设定

cd /etc/pam.d/

vi vsftpd.pam

  1. auth required /lib/security/pam_userdb.so db=/etc/vsftpd/ftplogin

  2. account required /lib/security/pam_userdb.so db=/etc/vsftpd/ftplogin


复制代码

注意:是ftplogin而不是ftplogin.db

建立虚拟用户,设置该用户所要访问的目录,并设置虚拟用户访问的权限:

  1. useradd -d /data/ftpdata virtual_user

  2. chmod 700 /data/ftpdata

复制代码

经过该步骤的设置,/data/ftpdata就是virtual_user用户的主目录,该用户也是ftpdata目录的拥有者。除root用户之外,只有该用户具有对该目录的读、写和执行的权限。 

配置vsftpd,使之启用虚拟用户
vi /etc/vsftpd/vsftpd.conf

输入:

  1. anonymous_enable=NO

  2. local_enable=YES

  3. write_enable=YES

  4. local_umask=022

  5. #anon_upload_enable=NO

  6. #anon_mkdir_write_enable=NO

  7. dirmessage_enable=NO

  8. xferlog_enable=YES

  9. connect_from_port_20=YES

  10. #chown_uploads=YES

  11. #chown_username=root

  12. #xferlog_file=/var/log/xferlog

  13. xferlog_std_format=YES

  14. idle_session_timeout=600

  15. data_connection_timeout=36000

  16. #nopriv_user=ftpsecure

  17. #async_abor_enable=YES

  18. #ascii_upload_enable=YES

  19. #ascii_download_enable=YES

  20. #ftpd_banner=Welcome to blah FTP service.

  21. #deny_email_enable=YES

  22. #banned_email_file=/etc/vsftpd/banned_emails

  23. #chroot_list_enable=YES

  24. #chroot_list_file=/etc/vsftpd/chroot_list

  25. #ls_recurse_enable=YES

  26. listen=YES

  27. #listen_ipv6=YES


  28. guest_enable=YES

  29. guest_username=virtual_user

  30. pam_service_name=vsftpd.pam


  31. pam_service_name=vsftpd

  32. userlist_enable=YES

  33. tcp_wrappers=YES


复制代码


其中:

  1. guest_enable=YES

  2. guest_username=virtual_user

  3. pam_service_name=vsftpd.pam


复制代码

guest_enable=YES:表示启用虚拟用户
guest_username=virtual_user:本地用户,就是虚拟用户要映射的本地用户,这个主要是用来设置本地文件系统的权限的
pam_service_name=vsftpd.pam:虚拟用户的认证用户

注意,默认pam_service_name=vsftpd,要改过来,否则报“530 Login incorrect.” 这样的错误的哦

整个过程是:用户输入虚拟用户账户(ftpuser.txt这里设置的)------登陆服务器利用PAM模块认证------映射为本地用户virtual_user----以virtual_user用户的身份去存取virtual_user的根目录下的文件

登陆实验:

  1. ftp 127.0.0.1

  2. Connected to 127.0.0.1 (127.0.0.1).

  3. 220 (vsFTPd 2.0.5)

  4. Name (127.0.0.1:root): ftpuser1

  5. 331 Please specify the password.

  6. Password:

  7. 230 Login successful.

  8. Remote system type is UNIX.

  9. Using binary mode to transfer files.

  10. ftp> dir

  11. 227 Entering Passive Mode (127,0,0,1,150,205)

  12. 150 Here comes the directory listing.

  13. 226 Transfer done (but failed to open directory).

  14. ftp> pwd

  15. 257 "/"

  16. ftp>

复制代码

OK,没有问题了,我用的账户其实在服务器里是不存在的,就算这个用户密码泄露,别人也无法直接登陆我的linux主机

三,权限配置

我们还可以对每个用户设置权限

vi /etc/vsftpd/vsftpd.conf

添加用户配置目录:

  1. user_config_dir=/etc/vsftpd/vsftpd_user_conf


复制代码

mkdir -p /etc/vsftpd/vsftpd_user_conf
cd /etc/vsftpd/vsftpd_user_conf

配置每个用户的控制信息

vi /etc/vsftpd/vsftpd_user_conf/ftpuser1

输入:

  1. write_enable=NO

  2. anono_upload_enable=NO

复制代码

注意/etc/vsftpd/vsftpd_user_conf/ftpuser1这里的文件名和用户名必须相同哦

四,用户隔离

但是这里有个问题,当我有多个用户的时候ftpuser1 ftpuser2,那么这两个用户默认都在同一个目录,就是/data/ftpdata那我很多情况需要把用户隔离开来,例如我一台主机上有很多不同用户的网站,他们需要单独管理,企业用户也需要保护自己的隐私,原创备份服务器也有多中数据需要备份到不同的目录,所以,实现主目录隔离的虚拟用户才是终解决方案。下面就来看看如何解决这个问题了

接着上面,我们以ftpuser1为例

vi /etc/vsftpd/vsftpd_user_conf/ftpuser1
添加:
local_root=/data/ftpdata/ftpuser1

mkdir -p /data/ftpdata/ftpuser1
chown -R virtual_user:virtual_user /data/ftpdata/ftpuser1

其他用户同理

五,后期维护

这个算是建立好了,那以后还需要添加用户怎么办呢,步骤如下:

1.在ftpuser.txt中添加用户名和密码

2.运行如下命令,将用户名和密码添加到数据库中

  1. db_load -T -t hash -f ./ftpuser.txt ./ftplogin.db

复制代码

3.在vsftpd_user_conf文件夹下新建和用户名相同文件,并在其中加入

  1. vi /etc/vsftpd/vsftpd_user_conf/username

  2. 输入:

  3. local_root=/data/ftpdata/username

复制代码

4.在/data/ftpdata中新建一个文件夹,与用户名相同

  1. mkdir -p /data/ftpdata/username

  2. chown -R virtual_user:virtual_user /data/ftpdata/username

复制代码


如何改用户名:

只需要修改下ftpuser.txt里面的密码行,然后执行

  1. db_load -T -t hash -f ./ftpuser.txt ./ftplogin.db

复制代码

即可,连重启都不需要,所以这里注意ftpuser.txt这个文件保护好,为了以后维护方面还是不要删除了吧


原创作品,转载务必保留出处:http://bbs.ywlm.net/thread-580-1-1.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
13688
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载