1.创建用于进行FTP 认证的用户数据库文件,其中奇数行为账户名,偶数行为密码。

[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# vim vuser.list
zhangsan
centos
lisi
centos

明文信息既不安全,也不符合让vsftpd 服务程序直接加载的格式,因此需要使用db_load 命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件,并且降低数据库文件的权限(避免其他人看到数据库文件的内容),然后再把原始的明文信息文件删除。

[root@localhost vsftpd]# db_load -T -t hash -f vuser.list vuser.db
[root@localhost vsftpd]# file vuser.db
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
[root@localhost vsftpd]# chmod 600 vuser.db
[root@localhost vsftpd]# rm -rf vuser.list

2.创建vsftpd 服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。FTP 服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置。

由于 Linux 系统中的每一个文件都有所有者、所属组属性,例如使用虚拟账户“张三”新建了一个文件,但是系统中找不到账户“张三”,就会导致这个文件的权限出现错误。为此,需要再创建一个可以映射到虚拟用户的系统本地用户。

简单来说,就是让虚拟用户默认登录到与之有映射关系的这个系统本地用户的家目录中,虚拟用户创建的文件的属性也都归属于这个系统本地用户,从而避免Linux 系统无法处理虚拟用户所创建文件的属性权限。

为了方便管理FTP 服务器上的数据,可以把这个系统本地用户的家目录设置为/var 目录(该目录用来存放经常发生改变的数据)。并且为了安全起见,我们将这个系统本地用户设置为不允许登录FTP 服务器,这不会影响虚拟用户登录,

而且还可以避免黑客通过这个系统本地用户进行登录。

[root@localhost vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual
[root@localhost vsftpd]# ls -ld /var/ftproot/
drwx------. 3 virtual virtual 78 Sep 3 15:09 /var/ftproot/
[root@localhost vsftpd]# chmod -Rf 755 /var/ftproot/

3.建立用于支持虚拟用户的PAM 文件。

PAM(可插拔认证模块)是一种认证机制,通过一些动态链接库和统一的API 把系统提供的服务与认证方式分开,使得系统管理员可以根据需求灵活调整服务程序的不同认证方式。

通俗来讲,PAM 是一组安全机制的模块,系统管理员可以用来轻易地调整服务程序的认证方式,而不必对应用程序进行任何修改。PAM 采取了分层设计(应用程序层、应用接口层、鉴别模块层)的思想,其结构如图

新建一个用于虚拟用户认证的PAM 文件vsftpd.vu,其中PAM 文件内的“db=”参数为使用db_load 命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀:

[root@localhost vsftpd]# vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser

4.在vsftpd 服务程序的主配置文件中通过pam_service_name 参数将PAM 认证文件的名称修改为vsftpd.vu,PAM 作为应用程序层与鉴别模块层的连接纽带,可以让应用程序根据需求灵活地在自身插入所需的鉴别功能模块。

当应用程序需要PAM 认证时,则需要在应用程序中定义负责认证的PAM 配置文件,实现所需的认证功能。例如,在 vsftpd 服务程序的主配置文件中默认就带有参数pam_service_name=vsftpd,表示登录FTP 服务器时是根据/etc/pam.d/vsftpd 文件进行安全认证的。

现在我们要做的就是把vsftpd 主配置文件中原有的PAM 认证文件vsftpd 修改为新建的vsftpd.vu 文件即可。该操作中用到的参数以及作用如表

[root@localhost vsftpd]# cat /etc/vsftpd/vsftpd.conf | grep -v '#'
anonymous_enable=NO
local_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=
YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES

5.为虚拟用户设置不同的权限。虽然账户zhangsan 和lisi 都是用于vsftpd 服务程序认证的虚拟账户,但是我们依然想对这两人进行区别对待。比如,允许张三上传、创建、修改、查看、删除文件,只允许李四查看文件。

这可以通过vsftpd 服务程序来实现。只需新建一个目录,在里面分别创建两个以zhangsan 和lisi 命名的文件,其中在名为zhangsan 的文件中写入允许的相关权限(使用匿名用户的参数):

[root@localhost vsftpd]# mkdir /etc/vsftpd/vusers_dir/
[root@localhost vsftpd]# cd /etc/vsftpd/vusers_dir/
[root@localhost vusers_dir]# touch lisi
[root@localhost vusers_dir]# vim zhangsan
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES  

然后再次修改vsftpd 主配置文件,通过添加user_config_dir 参数来定义这两个虚拟用户不同权限的配置文件所存放的路径。为了让修改后的参数立即生效,需要重启vsftpd 服务程序并将该服务添加到开机启动项中:

[root@localhost vusers_dir]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES
user_config_dir=/etc/vsftpd/vusers_dir  
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# systemctl enable vsftpd

6.设置SELinux 域允许策略,然后使用虚拟用户模式登录FTP 服务器。开启SELinux 域的允许策略,以免再次出现操作失败的情况:

[root@localhost ~]# getsebool -a | grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> on
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off
[root@localhost ~]#
[root@localhost ~]# setsebool -P ftpd_full_access=on  

此时,不但可以使用虚拟用户模式成功登录到FTP 服务器,还可以分别使用账户zhangsan和lisi 来检验他们的权限。

[root@localhost ~]# ftp 10.10.64.109
Connected to 10.10.64.109 (10.10.64.109).
220 (vsFTPd 3.0.2)
Name (10.10.64.109:root): lisi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir files
550 Permission denied.
ftp> exit
221 Goodbye.  
[root@localhost vusers_dir]# ftp 10.10.64.109
Connected to 10.10.64.109 (10.10.64.109).
220 (vsFTPd 3.0.2)
Name (10.10.64.109:root): zhangsan
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir files
257 "/files" created
ftp> rename files database
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir database
250 Remove directory operation successful.
ftp> exit
221 Goodbye.

使用虚拟用户模式登录FTP 服务器的所有用户的权限都是一样的吗?

答:不一定,可以通过分别定义用户权限文件来为每一位用户设置不同的权限。

34.vsftpd服务程序--虚拟用户模式的更多相关文章

  1. 33.vsftpd服务程序--本地用户模式

    1.针对本地用户模式的权限参数以及作用如下 [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 1 anonymous_enable=NO 2 local_ ...

  2. 32.vsftpd服务程序--匿名开放模式

    1.vsftpd服务程序 vsftpd 作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到FTP 服务器上. 匿名开放模式:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到F ...

  3. vsftpd服务器配置虚拟用户

    添加宿主用户 新建系统用户vsftpd,用户目录为/home/wwwroot, 用户登录终端设为/bin/false(即使之不能登录系统) useradd vsftpd -d /home/wwwroo ...

  4. 在虚拟机上的关于FTP FTP访问模式(虚拟用户模式)

    首先你要有vsftpd服务 可以先去yum中下载(当然你要有本地yum仓库) 输入命令: yum  install  vsftpd 下载完成之后打开vsftpd服务 输入命令:systemctl   ...

  5. Azure + vsftpd + ubntu14 + 虚拟用户 遇到的问题:从网上摘抄

    :在Azure安装好ubuntu虚拟机,安装包选择ubuntu14.04 LTS,选择LTS,以便微软对其以后的更好支持,不选就可能技术支持不会很久,现只开一台,端口默认选择22 :打开虚拟机,进入端 ...

  6. vsftpd配置虚拟用户为登录用户02

    1.安装vsftpd 安装依赖包: yum -y install pam pam-devel db4 de4-devel db4-uitls db4-tcl 新建vsftpd系统用户: #建立Vsft ...

  7. vsftpd设置虚拟用户

    centos6.5环境 软件安装: yum install vsftpd db4-utils 1. 添加虚拟用户口令文件 #添加一个虚拟用户testvim /etc/vsftpd/vftp_vuser ...

  8. vsftpd 创建虚拟用户

    1.添加一个宿主用户:useradd vsftpd -s /sbin/nologin2.安装db4-utils,通过本底数据文件实现虚拟用户访问yum install db4-utils3.创建ftp ...

  9. vsftpd配置虚拟用户

    #安装vsftpd yum -y install vsftpd #创建本地ftp账户 groupadd ftpuser useradd -g ftpuser -s /sbin/nologin ftpu ...

随机推荐

  1. [简单-剑指 Offer 53 - II. 0~n-1中缺失的数字]

    [简单-剑指 Offer 53 - II. 0-n-1中缺失的数字] 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一 ...

  2. 最全总结 | 聊聊 Python 办公自动化之 PPT(中)

    1. 前言 上一篇文章简单地介绍了 PPT 的文档结构,并使用 python-pptx 这个依赖库完成对 PPT 文档最基本的操作 最全总结 | 聊聊 Python 办公自动化之 PPT(上) 作为 ...

  3. 新建表后,在sqlserver manager中使用显示引用对象无效

    编辑>intelliSense(I)>刷新本地缓存.

  4. idea中maven的安装与配置

    说明:类似maven安装和配置的帖子在网上有很多,本人也有做过参照,但是有些帖子的步骤跳跃性比较大,故此,本人整理了一下,给大家做个参考. 一.下载安装 一般都是在官网进行下载 https://mav ...

  5. TCP三次握手(通俗易懂)

    一--导读 前不久中国和外国RPEC协议的签订,标志着东亚自贸区的建立成功.现在韩国和日本要做贸易.日本一直监听着韩国总统的一举一动,但他又不会主动.(服务器的监听状态)只是被动的等着韩国总统先开口. ...

  6. 接口的不同写法在Swagger上的不同

    接口请求方法类型 (1) 如果接口没有指定请求的 method 类型,例如 GET.POST.PUT.DELETE 等. Swagger中 (2)指定了请求方法后 Swagger中就只有一个GET请求 ...

  7. 在md里画流程图

    可以使用名为mermaid的代码块,即 ```mermaid``` 需要md解析器能解析mermaid mermaid使用详情参见

  8. ContactCollections Design Report

    通讯录的设计采用了分层+接口+面向对象+文件操作+方法实现 分三层实现,共使用了四个包,实现业务数据访问和界面的分离     contactaccess包实现对文件的访问         包括数据访问 ...

  9. Centos7安装RabbitMQ详细教程

    MQ引言 什么是MQ MQ:message Queue翻译为消息队列,通过典型的生产者和消费者模型不断向消息队列中生产消息,消费者不断从队列中获取消息.因为消息的生产和消费都是一部的,而且只关心消息的 ...

  10. C#中的异步和多线程

    许多开发人员对异步代码和多线程以及它们的工作原理和使用方法都有错误的认识.在这里,你将了解这两个概念之间的区别,并使用c#实现它们. 我:"服务员,这是我第一次来这家餐厅.通常需要4个小时才 ...