需求:外部人员需要对公司服务器上某个文件夹内容进行读写操作

文件目录信息:/opt/abc

drwxr-xr-x 9 www  www       4096 12月  4 13:02 abc   #注意最初abc的www用户组没有写权限

为了后面的ftp用户能够对此文件具备写操作,需要添加www用户组的写权限:

chmod g+w /opt/abc -R

drwxrwxr-x 9 www  www       4096 12月  4 13:02 abc

一、安装vsftpd服务

确保selinux关闭以及防火墙关闭或开启21端口

yum  install vsftpd

systemctl start vsftpd

systemctl enable vsftpd

netstat -tanlp|grep vsftpd

二、配置vsftpd

修改配置前养成好习惯,先备份一下

cp /etc/vsftpd/vsftpd.conf   /etc/vsftpd/vsftpd.conf.bak

这里使用虚拟用户访问ftp服务器

若基于Vsftpd系统用户访问FTP服务器,系统用户越多越不利于管理,而且不利于系统安全管理,鉴于此,为了能更加的安全使用VSFTPD,需使用Vsftpd虚拟用户方式。

Vsftpd虚拟用户原理:虚拟用户就是没有实际的真实系统用户,而是通过映射到其中一个真实系统用户(没有密码,也不具备登陆权限)以及设置相应的权限来实现访问验证,虚拟用户不能登录Linux系统,从而让系统更加的安全可靠。

配置步骤如下:

1、安装Vsftpd虚拟用户需用到的软件及认证模块:

yum  install  pam*  libdb-utils  libdb*  --skip-broken  -y

2、创建虚拟用户临时用户文件/etc/vsftpd/ftpusers.txt,新建虚拟用户和密码,其中ftp1为虚拟用户名,123为密码,如果有多个用户,依如下格式填写即可

ftp1

123

3、生成Vsftpd虚拟用户数据库认证文件,并设置权限700:

db_load  -T  -t  hash  -f  /etc/vsftpd/ftpusers.txt  /etc/vsftpd/vsftpd_login.db  # 每次在/etc/vsftpd/ftpusers.txt添加了新的虚拟用户后,需要再次执行此命令

解释:(不一定准确)

db_load做数据库生成;

-T 允许应用程序能够将文本文件转译载入进数据库。由于我们之后是将虚拟用户的信息以文件方式存储在文件里的,为了让Vsftpd这个应用程序能够通过文本来载入用户数据,必须要使用这个选项。指定了选项-T,那么一定要追加子选项-t;

-t 追加在在-T选项后,用来指定转译载入的数据库类型;

hash就是使用hash码加密

-f 参数后面接包含用户名和密码的文本文件,文件的内容是:奇数行用户名、偶数行密码。

chmod  700  /etc/vsftpd/vsftpd_login.db   #将vsftpd_login.db隐藏,除root用户外,其他用户无法查询到虚拟用户信息

4、配置PAM认证文件,让PAM采用相应的认证模块和刚刚建立的用户数据库,/etc/pam.d/vsftpd行首加入如下两行(最好是将其他行删除):

auth      required        pam_userdb.so   db=/etc/vsftpd/vsftpd_login

account   required        pam_userdb.so   db=/etc/vsftpd/vsftpd_login

5、所有Vsftpd虚拟用户需要映射到一个系统用户,该系统用户不需要密码,也不需要登录,主要用于虚拟用户映射使用,创建命令如下:

useradd    -s   /sbin/nologin    ftpuser

6、完整vsftpd.conf配置文件代码如下:

anonymous_enable=YES

local_enable=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

userlist_enable=YES

tcp_wrappers=YES  

# 以下配置为开启虚拟用户功能

pam_service_name=vsftpd       # 虚拟用户启用pam认证;vsftpd是pam认证指定的文件

guest_enable=YES    # 启用虚拟用户;

guest_username=ftpuser  # 映射虚拟用户至系统用户ftpuser;

user_config_dir=/etc/vsftpd/vsftpd_user_conf  # 设置虚拟用户配置文件所在的目录;

virtual_use_local_privs=YES  # 虚拟用户使用与本地用户相同的权限。

# 以下配置为锁定虚拟用户在自己的目录,不能查看到其他目录(如不配置,通过ftp工具可以查看到系统所有目录虽然无写权限)

chroot_local_user=YES

allow_writeable_chroot=YES

7、为虚拟用户ftp1创建配置专有的配置文件以及家目录,如果有多个虚拟用户同此操作

在/etc/vsftpd/vsftpd_user_conf下创建ftp1虚拟用户的配置文件

mkdir  -p    /etc/vsftpd/vsftpd_user_conf/ftp1

内容如下:

ocal_root=/home/ftpuser/ftp1  # 虚拟用户家目录所在位置

write_enable=YES    # 允许登陆用户有写权限

anon_world_readable_only=YES   # 允许匿名用户下载,然后读取文件

anon_upload_enable=YES    # 允许匿名用户上传文件权限,只有在write_enable=YES时该参数才生效;

anon_mkdir_write_enable=YES  # 允许匿名用户创建目录,只有在write_enable=YES时该参数才生效;

anon_other_write_enable=YES  # 允许匿名用户其他权限,例如删除、重命名等。

8、创建虚拟用户家目录目录:

mkdir -p /home/ftpuser/ftp1

chown -R ftpuser:ftpuser /home/ftpuser   # 递归更改虚拟用户主目录以及家目录的所有者和属组,才能具备相应权限。

chmod -R 777 /home/ftpuser   # root帐号在ftp1下面创建了多级目录和文件后,需要授权,客户端ftp1登录了才能够对其删除和修改。

三、虚拟用户访问家目录之外的目录

以上操作,ftp1这个用户已经可以访问ftp服务器,并在其家目录中进行上传下载添加删除等操作,但用户要访问服务器上其他目录怎么办?操作如下:

第一反应是对需要访问(abc文件)的目录做一个软连接,成功的失败了 --_--,不是说不能做链接,只是做了后不能达到想要的效果。

最终通过革命先贤的智慧知道还可以将abc文件mount到ftp1家目录下:

1、先到ftp1家目录中创建abc文件夹,用户挂载使用

mkdir -p /home/ftpuser/ftp1/abc

2、挂载目录

mount --bind /opt/abc   /home/ftpuser/ftp1/abc

3、如果以后需要解除挂载,执行如下命令把/home/ftpuser/ftp1/abc目录的umount即可

umount   /home/ftpuser/ftp1/abc

4、以上步骤仅仅是成功挂载了,虚拟用户ftp1仅仅能对abc目录中的文件进行下载操作,但无上传、删除等操作,需要如下操作

1)将ftpuser用户加入到www用户组,因为abc这个目录属于www用户组

#查看当前ftpuser用户信息

id ftpuser 

uid=1005(ftpuser) gid=1005(ftpuser) 组=1005(ftpuser)

#不改变原来用户信息下添加至www用户组

usermod -a -G www ftpuser

#再次ftpuser用户信息,ftpuser已经加入到了www用户组中

id ftpuser

uid=1005(ftpuser) gid=1005(ftpuser) 组=1005(ftpuser),1004(www)

2)让/opt/abc下所有文件所属组具备写权限

chmod g+w /opt/abc -R

至此虚拟用户ftp1已可对abc文件进行任何操作。

排错思路:

1、查看SELinux、防火墙

2、查看vsftpd进程

3、查看vsftpd.conf主配置文件

4、查看虚拟用户配置文件

5、查看数据库,查看Pam模块,新添加虚拟用户后需要重新生成数据库文件

6、查看home/ftpuser下虚拟用户家目录是否创建

7、修改配置后重启vsftpd服务

vsftp虚拟用户方式访问的更多相关文章

  1. CentOS 7搭建vsftp(虚拟用户方式登录)

    说明: vsftpd的版本:vsftpd-3.0.2-22.el7.x86_64 ftp 根目录 : /data/ftp ftp 配置文件目录:/etc/vsftpd ftp 虚拟用户权限配置文件目录 ...

  2. vsftp虚拟用户登录配置详解

    一.安装:1.安装Vsftpd服务:# yum install vsftpd 2.安装DB4部件包:这里要特别安装一个db4的包,用来支持文件数据库.# yum install db4-utils 二 ...

  3. vsftp 虚拟用户高级设置(转载)

    发布:xiaokk   来源:net     [大 中 小] vsftp 虚拟用户高级设置  本文转自:http://www.jbxue.com/article/1724.html 1.安装所需软件包 ...

  4. vsftp虚拟用户配置

    找了很久,终于找到像样一点的文章,很详细,参数方面懂英文基本能看懂,一个教程是否有用,关键在于细节.错了一点点就不能配下去了. ------------------------------------ ...

  5. vsftp 虚拟用户

    首先安装vsftp db-4wiki mkdir -p /opt/ftp 创建用户 sudo useradd virtual -d /opt/ftp -s /bin/false sudo chown ...

  6. centos 7.2下搭建vsftp 虚拟用户

    虚拟用户搭建vsftp 要求一: 只允许上传 下载 不能删除 不能更换名称 yum install pam* yum install db4* -y yum install vsftpd chkcon ...

  7. vsftp 虚拟用户+MySQL认证独立家目录

    centos7 系统 安装包 yum -y install mariadb vsftpd openssl-devel  mysql-devel  pam-devel yum -y groupinsta ...

  8. vsftp 虚拟用户测试

    1.创建用于进行FTP验证的帐号密码数据库文件,单数行为账户名,偶数行为密码.[root@rhel1 vsftpd]# vi /etc/vsftpd/vuser.listuser1123456user ...

  9. vsftp搭建+虚拟用户

    yum安装vsfpd: [root@localhost ~]# yum -y install vsftpd db4-utils Loaded plugins: fastestmirror, refre ...

随机推荐

  1. Linux使用笔记: 使用Samba访问windows的共享目录(转载)

    转自:http://easwy.com/blog/archives/mount-a-windows-shared-folder-on-linux-with-samba/ 通常我们使用Samba都是在W ...

  2. 0 Java实现 一篇文章说尽设计模式之六大原则

    我们知道,设计模式很有用,学好设计模式不但能让你写出更简洁,优雅的代码,还能使得代码的结构更清晰,也更有利于扩展 当然设计模式也不是万能的,一成不变的.设计模式只是前人总结出来的一种经验,一种特定问题 ...

  3. bat批处理文件夹内文件名的提取

    有时候会在做某些东西的时候 我们要提取某个文件夹的所有文件名,一个一个打出来那不是 现实的 所以这个时候就用到了一个比较简便而又快捷的方法 在所在的文件夹内新建一个a.txt 在a.txt编辑DIR ...

  4. bzoj 4078: [Wf2014]Metal Processing Plant【二分+2-SAT+枚举+并查集】

    枚举从大到小s1,二分s2(越大越有可能符合),2-SAT判断,ans取min 思路倒是挺简单的,就是二分的时候出了比较诡异的问题,只能二分s2的值,不能在数组上二分... 有个优化,就是当不是二分图 ...

  5. poj 1815 Friendship【最小割】

    网络流的题总是出各种奇怪的错啊--没写过邻接表版的dinic,然后bfs扫到t点不直接return 1就会TTTTTLE-- 题目中的操作是"去掉人",很容易想到拆点,套路一般是( ...

  6. poj 3281 Dining【最大流】

    记得把牛拆掉!拆成两个点i和i'在中间连一条流量为1的边,来限制每头牛只能选一组 一般来讲是一种物品一个消费者各占一边,但是这里有两个物品,所以考虑把牛放在中间,s向所有的食物连流量为1的边,所有食物 ...

  7. springboot整合elasticsearch出错:java.lang.NoClassDefFoundError: org/elasticsearch/plugins/NetworkPlugin

    Caused by: java.lang.NoClassDefFoundError: org/elasticsearch/plugins/NetworkPlugin at java.lang.Clas ...

  8. 进击的Python【第十一章】:消息队列介绍、RabbitMQ&Redis的重点介绍与简单应用

    消息队列介绍.RabbitMQ.Redis 一.什么是消息队列 这个概念我们百度Google能查到一大堆文章,所以我就通俗的讲下消息队列的基本思路. 还记得原来写过Queue的文章,不管是线程queu ...

  9. 洛谷 P3332 [ZJOI2013]K大数查询 || bzoj3110

    用树套树就很麻烦,用整体二分就成了裸题.... 错误: 1.尝试线段树套平衡树,码农,而且n*log^3(n)慢慢卡反正我觉得卡不过去 2.线段树pushdown写错...加法tag对于区间和的更新应 ...

  10. 应用交付、负载均衡(Load balancing)、高可用、F5

    “应用交付”,实际上就是指应用交付网络(Application Delivery Networking,简称ADN),它利用相应的网络优化/加速设备,确保用户的业务应用能够快速.安全.可靠地交付给内部 ...