Linux FTP服务配置虚拟用户访问

虚拟用户是指仅用于访问FTP服务的用户账号,虚拟用户的账号和密码等信息都存放于独立数据库文件中,虚拟用户需要映射到某个系统用户上,但虚拟用户的密码和被映射的系统用户的密码没有关系,这样就避免了FTP用户和系统用户的密码重复带来的安全问题。

可以在系统中创建多个系统用户,这些虚拟用户的账号都可以映射到一个系统用户,所以在使用和管理时也很方便,所以在实际中也推荐使用,缺点就是配置较麻烦。

  1. 创建虚拟用户数据库文件,第一步先要创建用来存放虚拟用户账号和密码的用户数据库文件,文件名自定义,文件的路径一般放在/etc/vsftpd目录中,文件的奇数行为用户名,偶数行为密码,用户名和密码自定义;由于这个文件里都是明文数据,所以存在安全隐患,所以我们要使用db_load命令用hash算法将明文信息文件转换成数据库文件,(db_load -T -t hash -f 原文件名 转换后的文件名.db)“-T”选项表示允许非Berkeley DB的应用程序使用从文本格式转换的DB数据库文件,“-t hash”表示利用hash算法进行加密,“-f”选项用于指定数据的源文件,建议修改权限为600.

Ps:回顾(md5sum和sha1sum命令,Windows系统的密码加密采用NTLM算法,密码存放在sam文件中)

2.创建虚拟用户的映射账号,vsftpd服务对虚拟用户其实是采用了映射的控制方式,把所有的虚拟用户账号都对应到了同一个系统用户账号上,并将这个系统用户的家目录作为所有虚拟用户登陆后的FTP主目录,所以我们还必须再创建一个系统用户账号,这个系统用户账号为了安全起见,可以不需要设置密码且不允许用来登录系统,所以在创建这个系统用户时,可以配合useradd的“-d”选项来指定你想要让FTP的虚拟用户访问的主目录,例如:useradd -d /var/ftp/virtual -s /sbin/nologin virtual就是创建一个名为virtual用来映射虚拟用户的系统用户,为了便于虚拟用户使用,建议将这个用户的家目录权限改为755

3.创建PAM认证文件,对虚拟用户的身份认证是通过PAM认证机制来实现的,PAM是Linux系统中的一个独立API(应用程序接口),它提供了各种认证模块以供其他程序调用,当这些程序需要进行用户身份验证的操作时,就可以直接调用PAM的相应模块,而无需由自己来提供验证功能,所以PAM在Linux系统中提供了统一的身份验证机制。

但是这样实现的调用操作的缺陷就是没法进行跨平台来使用,只能局限于Linux系统。

PAM的认证文件都统一放在/etc/pam.d目录中,该目录下认证文件都是给某个服务来实现身份验证功能的,名称通常与对应的应用程序的功能相关,因此可以通过对某个认证文件进行修改来实现对这个应用程序的认证配置;名字为vsftpd的文件就是来给FTP服务做身份验证的PAM认证文件,在vsftpd服务的配置文件中有“pam_service_name=vsftpd”这个设置项,正好代表对应的pam认证文件的名称,指定了要进行身份验证的时候就是采用这个认证文件去进行。

在配置虚拟用户这块,由于是虚拟用户,所以就不能使用原来的默认的FTP服务的pam认证文件了,这个文件是来认证系统用户的时候使用的,这样我们可以对原来那个文件进行修改设置,或者就需要我们再新建一个虚拟用户使用的认证文件,一般情况下是再建一个新的pam认证文件,建议名字最好与服务相关,比如:vsftpd.vu来和原来那个文件做区别。

4.新建的pam认证文件的内容大部分都是

“auth required pam_userdb.so db=/etc/vsftpd/logins”

“account required pam_userdb.so db=/etc/vsftpd/logins”这两行。

了解:文件每一行定义了一种检查机制,每行有四部分,第一列代表模块类型,分别代表四种不同的任务,认证管理(auth),账号管理(account),会话管理(session),密码管理(password),一个类型可能有多行,他们按顺序依次由PAM模块调用。

·auth,对用户身份进行认证,如检查用户账号和密码是否正确。

·account,对账号的各项属性进行检查,如是否允许登录,是否在有效期内等。

·session,定义用户登录前,用户退出后所要进行的操作,如登录连接信息,用户数据的打开与关闭,挂载文件系统等。

·password,用户修改密码时的密码检查规则。

第二列代表控制标记,PAM使用控制标记来处理和判断各个模块的返回值

·required,所指定的条件必须满足,相当于拥有一票否决权,检查所指定的条件如果不满足,也要继续检查后续的其他模块,直到所有的模块都检查完毕后,PAM才返回错误信息,这样做的目的是为了不让用户知道哪个模块被拒绝。(常用)

·requisite,所指定的条件必须满足,如果检查条件不满足,就立刻像应用程序返回失败,表示此类型失败,不再进行后面的操作和检查后面的模块。

·sufficient,如果一个用户通过这个模块的验证,PAM就立刻返回验证成功的信息,把控制权交回应用程序,而不再进行后续的检查模块,如果验证没通过,仍然会检查后续的模块。

·optional,表示即使本行指定的验证模块失败,也允许用户接受应用程序提供的服务,一般返回PAM_IGNORE(可忽略)

第三列表示要调用的哪个PAM认证的数据库文件,后缀是.so,默认存放在/lib64/security目录中,例如“pam_userdb.so”就表示模块的位置在/lib64/security/pam_userdb.so;lib64这个目录中存放的都是PAM的库文件,跟Windows系统中的后缀为.dll(动态链接库)的文件相似,一般存放在C:\windows\system32目录中,里面文件就属于API,属于可以被系统调用使用的文件,

第四列db就是来指定用来存放虚拟用户账号和密码的文件,注意的是,在写那个文件路径时,不要写上文件的.db的后缀,只写名字。

5.修改vsftpd配置文件,还需要再配置文件vsftpd.conf中添加相对应的配置项,来支持使用虚拟用户:

·“guest_enable=YES”,启用虚拟用户模式

·“guest_username=virtual”,指定虚拟用户所映射的系统用户的名称

· “user_config_dir=/etc/vsftpd/vuser”,虚拟用户配置文件的存放目录

·“pam_service_name=vsftpd.vu,指定PAM认证文件(原配置文件中就存在该设置项)

除了新添加的这几个设置项,还需要对一些设置项进行修改:

·“local_enable=YES”,由于虚拟用户需要映射到系统用户,所以此项必须启用。

·“allow_writeable_chroot=YES”,由于虚拟用户都是映射到系统用户virtual,而且虚拟用户所访问的FTP主目录就是virtual用户的家目录,而且virtual用户默认对家目录有写入权限,并且虚拟用户会被禁锢在家目录中,所以在配置文件中必须启用这个设置项,否则虚拟用户将无法访问。

另外在虚拟用户成功访问FTP服务后,要实现让虚拟用户能够上传文件,不仅满足系统层面上用户对目录有写入权限外,还要在配置项中设置,write_enable这个设置项时控制总的用户写入权限的,如果想要匿名用户能上传文件,还需单独给设置,在FTP服务中,将虚拟用户当作匿名用户一样,所以想要虚拟用户能够上传文件,需要再添加控制虚拟用户的上传权限的设置项“anon_upload_enable等,这样是对所有的虚拟用户都有效。

每个虚拟用户都有自己专门的配置文件,/etc/vsftpd/vuser/用户名,想要对用户进行什么设置都可以单独来进行设置。

想要对每个虚拟用户进行单独的设置,可以单独的给每个虚拟用户创建配置文件,这些配置文件可以统一放在一个目录里,/etc/vsftpd/vuser,如果不创建新的指定的虚拟用户的配置文件,会以主配置文件中的设置为准,如果两个配置文件冲突,则以指定的单独的配置文件的设置为准,在配置文件中添加给要给对应虚拟用户的权限设置项即可。

同样一个权限,生效的范围越广,代表优先级越低,生效的范围越小,则优先级越高

6.在完成所有的设置后,重启vsftpd服务,就可以使用虚拟用户访问FTP服务,由于使用虚拟用户,将PAM认证文件将vsftpd改成了vsftpd.vu,所以就没法用系统用户访问FTP服务了,只能使用虚拟用户进行访问了,而且虚拟用户访问时都会被禁锢在FTP主目录中,如果配置项中同时存在两项设置,一般以后面的生效,我们在实际生产环境中建议采用这种方式,可以极大提高vsftpd服务的安全性。

7.世赛题收获,想要改变虚拟用户访问的主目录,可以在虚拟用户的对应配置文件中添加“local_root”设置项来指定主目录。

Vsftpd的其他常用设置项:

还有一些常用设置项,这些设置项有很多在/etc/vsftpd/vsftpf.conf配置文件中默认是不存在的,我们可以根据需要来进行添加:

·listen_port=21,设置FTP服务的监听端口,默认是TCP21号端口

·max_clients=0,设置客户端最大并发连接数,即最多允许多少个客户端同时进行访问,可以根据服务器性能来进行设置,0代表不受限制。

·max_per_ip=0,设置每个IP可以同时发起申请的最大数,即每个客户端最多允许建立多少个连接,下载多少个文件,0代表不受限制。

·download_enable=YES,是否允许下载文件。

·anon_max_rate=0,设置匿名用户的最大传输速率(单位字节/秒),限速0代表不受限制。

·local_max_rate=1000000,设置系统用户的最大传输速率(单位字节/秒),0代表不受限制。

·anon_umask=022,设置匿名用户上传的文件的umask值

·local_umask=022,设置系统用户上传的文件的umask值

注意的是,vsftpd对于文件传输速率的限制不是锁定在一个绝对值,而是在80%-120%的范围内浮动,比如限制传输速率为1000kb/s,则实际传输速率会在800kb/s-120kb/s内变化

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ftp--虚拟用户 Benet6.0 S2 LINUX 第十二章 实验报告 姓名: 李勰 所在班级: hb3017 日期: 2020 年 7 月 7 日 实 验 任 务 1. 搭建服务之前先关闭防火墙和selinux systemctl stop firewalld systemctl disable firewalld setenforce 0 2.挂载并安装软件vsftpd和ftp。(服务端和客户端) mount /dev/cdrom /mnt/ (挂载) rpm -ivh /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm (安装服务端) rpm -ivh /mnt/Packages/ftp-0.17-67.el7.x86_64.rpm (安装客户端) 3.构建匿名可上传的FTP服务器,操作目录为 /var/ftp/pub 注:在客户端登录后,默认情况下是可以下载的,但不能上传。 3.1配置配置文件:vim /etc/vsftpd/vsftpd.conf 添加: anon_upload_enable=YES (允许匿名上传) 3.2修改完成之后重启服务systemctl restart vsftpd 3.3 修改文件目录的w权限:chmod o+w /var/ftp/pub/ 3.4 查看并验证:ls -lhd /var/ftp/pub/ 3.5 知识扩充:anon_mkdir_write_enable=YES (允许匿名用户可创建目录) anon_other_write_enable=YES (允许匿名用户可删、可覆盖) anon_umask=022 (允许匿名用户上传文件有r权限,没有r权限不可下载) vim /var/ftp/pub/.message (切换目录提示信息) dirmessage_enable=YES (开始主配置文件该功能默认开启) 4.构建本地用户验证的FTP服务器,本地用户为zhangsan lisi wangwu,并将其禁锢到宿主目录中,上传的权限掩码值为022(默认) 4.1 创建本地用户zhangsan、lisi、wangwu。并设置密码。(创建的用户不需要登录操作系统,只需要登录ftp。) useradd -s /sbin/nologin zhangsan useradd -s /sbin/nologin lisi useradd -s /sbin/nologin wangwu 4.2 完成上一部操作,就可以使用本地用户访问,要禁锢需要修改只配置文件 chroot_local_user=YES (是否将用户禁锢在主目录) allow_writeable_chroot=YES (允许被限制用户的主目录具有写的权限) 重启服务并测试。 4.3 知识扩充:chroot_list_enable=YES (开启白名单功能,允许白名单中的用户随意切换目录) chroot_list_file=/etc/vsftpd/chroot_list(白名单所在位置,需自己创建) cd /etc/vsftpd/ vim chroot_list :(文件中填写允许切换的用户) 5.结合user_list文件限制用户,仅允许zhangsan lisi 用户访问(设置白名单或黑名单) 5.1修改user_list vim user_list, 添加zhangsan、lisi。 5.2修改主配置文件:userlist_enable=NO (不禁用user_list列表中的用户) 6.设置服务器的监听地址,并将端口修改为2121 重启服务测试 6.1.主配置文件添加:listen_port=2121 6.2.重启服务:systemctl restart vsftpd 6.3. netstat -anutp |grep "vsftpd" 进行查看 7.设置FTP虚拟用户,readuser,writeuser 1.创建用户列表 2.生成db文件(数据库) 3.权限管理 4.新建虚拟用户映射账号 (系统账号) 5.pam认证文件 6.修改配置文件 7.1.创建虚拟用户文件 cd /etc/vsftpd/ vim vusers.list (奇数为用户名,偶数为密码) readuser 666666 Writeuser 666666 7.2. 生成db文件(数据库) 1. 建立虚拟FTP用户的帐号数据库文件用到db_load工具先安装软件包 rpm -ivh libdb-utils-5.3.21-19.el7.x86_64.rpm (默认已安装) 2. db_load -T -t hash -f vusers.list vusers.db 通db_load工具创建出Berkeley DB格式的数据库文件 7.3. 配置权限 chmod 600 vusers.* (保证其安全性) 7.4. 新建虚拟用户映射账号 (系统账号) useradd -d /viruser -s /sbin/nologin virtual 7.5. pam认证文件 在vsftpd服务器中,用户认证是通过PAM(Pluggable Authentication Module,可插拔认证模块)机制来实现的,该机制包含灵活的选择认证方式。 vim /etc/pam.d/vsftpd.vu(此文件名可自定义) 加入以下两行 auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vusers account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vusers 7.6. 修改主配置文件 vim /etc/vsftpd/vsftpd.conf(:g /^#/d) guest_enable=YES 启用用户映射功能(添加) guest_username=virtual 指定映射的系统用户名称(添加) pam_service_name=vsftpd.vu 指定新的PAM认证文件(修改) allow_writeable_chroot=YES (允许被限制用户的主目录具有写的权限) user_config_dir=/etc/vsftpd/dir 匿名配置文件目录(添加) mkdir dir 创建目录 7.7. 为虚拟用户建立独立的配置文件,启动服务并测试。 注:虚拟用户配置文件时,将主配置文件中自定义的匿名用户相关设置注释掉。 注:给映射用户的家目录设置o+r让虚拟用户有读取权限 1.用户可以上传:(anon_umask=022) anon_upload_enable=YES 2.用户可以创建目录: anon_mkdir_write_enable=YES 3.用户可以修改文件: anon_upload_enable=YES 允许上传文件(为了覆盖开启的) anon_other_write_enable=YES 允许重名和删除文件、覆盖 4.设置权限: readuser 用户可以登录,并可以浏览、下载,但无法上传 writeuser 用户可以登录,并可以浏览、下载,只可以上传文件 5.匿名用户或其他系统用户将不能登录 vim user_list,向其中添加readuser Writeuser vim /etc/vsftpd/vsftpd.conf (修改主配置文件) userlist_enable=YES //*启用user_list用户列表文件 userlist_deny=NO //*不禁用user_list列表中的用户登录 详 细 实 验 步 骤 结 果 验 证 问 题 及 分 析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值