vsftpd虚拟用户【公司系统部分享】
一,安装相关工具包
#yum -y install pam vsftpd db4 db4-utils
-- pam 是用来提供身份验证的
-- vsftpd 是ftp服务的主程序
-- db4支持文件数据库
-- db4的工具包
二,创建一个不能登录的用户,用作ftp服务的虚拟用户
由于这个ftp用户将来都是用来向网站上传文件的,所以
创建用户的时候将这个用户的家目录设置在web服务器的根目录
#useradd -d /home/web -s /sbin/nologin vuser_ftp
-d /home/web --指定用户的家目录;/home/web是web服务器的根目录
-s /sbin/nologin --指定用户的shell /sbin/nologin表示不能登录到shell
这里使用vuser_ftp作为虚拟用户的映射对象,在web服务器中可以使用httpd
这个服务的用户来作为虚拟用的映射。比如www apapche web
三,创建一个记录ftp虚拟用户的用户名和密码文件(文件名随便指定这里用login.txt)
此文件的格式为:一行用户名,换一行密码;多个用户分行写入。
例如:
#vi /etc/vsftpd/login.txt
test1
test1passwd
test2
test2passwd
四,使用db_load 命令生成虚拟用户认证文件
#db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/vsftpd_login.db
longin.txt 文件是刚刚新建的用户名和密码文件。
vsftpd_login.db文件是db_load命令生成的虚拟用户认证文件,这个文件用vi打开
是看不到的,而且这个db文件的权限是600
db_load 这个命令是由db4-utils软件包提供的。如果没有这个命令就需要用安装
db4-utils这个安装包。redhat和centos可以直接用
#yum -y install db4-utils 来安装之前我已经用yum安装了 几个包同时安装的
其他版本的linux系统用其他的工具。
#
#目前login.txt内容是实验环境,如果需要增加用户就把用户名和密码按照规定的
#格式写入login.txt文件。每次增加完虚拟用户之后都用使用db_load 上面执行过
#那条命令来更新vsftpd_login.db这个虚拟用户认证文件。
#
五,修改ftp服务配置文件/etc/vsftpd/vsftpd.conf
可以把/etc/vsftpd/vsftpd.conf 备份一下然后修改vsftpd.conf 或者备份之后
重写一个vsftpd.conf文件
本次实验的vsftpd.conf 内容如下:
#vi /etc/vsftpd/vsftpd.conf
----------------------------------------------------------------------
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
listen=YES
userlist_enable=YES
tcp_wrappers=YES
max_per_ip=5
max_clients=100
#### 下面是关于虚拟用户的配置
guest_enable=YES #打开用户虚拟
guest_username=vuser_ftp #将所有虚拟用户映射成vuer_ftp这个本地用户
#此用户是之前新建的用户
pam_service_name=ftp.vu #ftp用户的pam验证方式,默认是vsftpd,必须改掉。
user_config_dir=/etc/vsftpd/vsftpd_user_conf #这里放置每个虚拟用户的配置文件
-------------------------------------------------------------------------
#####特别注意:vsftpd.conf 这个配置文件中每行的两端都不能有空格######
六,创建vsftpd.conf中提到的验证文件。
(1)使用 #rpm -ql vsftpd 这个命令查找验证模块的例文
/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS/vsftpd.pam
(2)然后拷贝到vsftpd.conf文件中配置的路径中并改变文件名
这条选项 pam_service_name=ftp.vu中ftp.vu使用的是相对路径。
绝对路径为: /etc/pam.d/ftp.vu
#cp /usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS/vsftpd.pam /etc/pam.d/ftp.vu
上面这条命令就是把vsftpd程序自带的关于pam认证的模板文件拷贝到pam.d这个服务的工作
目录,同时改变文件名为ftp.vu;/etc/pam.d/目录下已经有了一个vsftpd.pam文件,
现在要做的是让vsftpd虚拟用户的这个功能用到的一个特殊的pam认证。还要修改下ftp.vu这个
文件
先来看下原文件的内容:
#vi /usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS/vsftpd.pam
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/login
在看下本次实验修改后的内容
#vi /etc/pam.d/ftp.vu
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
-----
这里有两个需要注意修改的地方:
1,db=/etc/vsftpd/login 修改成db=/etc/vsftpd/vsftpd_login
把db= 定义的是验证数据文件存放的位置,这个文件是以.db结尾的。但是在/etc/pam.d/ftp.vu
中配置的时候不要加上.db
2,配置文件中间的 /lib/security/pam_userdb.so 如果你的系统是64位的,那么相应的路径
应是/lib64/security/pam.userdb.so 不然会出错
七,创建vsftpd.conf中提到的虚拟用户配置目录 。user_config_dir=/etc/vsftpd/vsftpd_user_conf
以及在这个目录下面创建每个用户的权限配置文件
1,创建/etc/vsftpd/vsftpd_user_conf目录:
#mkdir /etc/vsftpd/vsftpd_user_conf
2,在/etc/vsftpd/vsftpd_user_conf目录下面分别创建之前在login.txt虚拟用户名和密码文件中
提到的test1 test2 这两个虚拟用户的权限配置文件
可以使用#touch test1 命令先创建这个文件然后再用vi进行编辑。也可以直接用vi打开一个不
存在的文件,编辑后保存就可以了
#vi /etc/vsftpd/vsftpd_user_conf/test1
3,虚拟用户配置文件内容如下
#vi /etc/vsftpd/vsftpd_user_conf/test1
anon_world_readable_only=no #用户可以浏览和下载文件,不能设为yes,否则无法看到文件
write_enable=yes #用户可以创建文件
anon_upload_enable=yes #用户可以上传文件
anon_mkdir_write_enable=yes #用户有创建和删除目录的权限
anon_other_write_enable=yes #用户具有文件改名和删除文件的权限
local_root=/home/web/html #指定这个虚拟FTP用户的家目录。这里的html是你网站的根目录
在虚拟用户配置文件中以yes和no 这两个参数根据实际情况来控制ftp用户的权限,或者把对应的
语句删除
######这里需要注意的是配置语句的两端都不能有空格
之后在创建test2的权限控制文件
#cp /etc/vsftpd/vsftpd_user_conf/test1 /etc/vsftpd/vsftpd_user_conf/test2
在test2 文件中修改下test2文件的家目录即可
八,到这里,ftpd 的虚拟用户配置完毕。重启ftp服务就可以使用虚拟用户登录ftp
vuser_ftp这个用户是用来被映射的,所以这个用户不能登录到ftp
#/etc/init.d/vsftpd restart
九,诡异的问题
配置都正确但是vftpd的虚拟用户就是登录不了;或者可以登录但没有对这个目录下应有的权限。
此时此刻最有可能的罪魁祸首可能是selinux和iptables的问题。
1,iptables防火墙如果开启而ftp端口没有打开的话就不能连接到ftp
关闭防火墙:
#/etc/init.d/iptables stop
2,selinux如果没有关闭,它内置的一些规则就会让你的虚拟ftp用户服务器登录或者获得相应的
权限
关闭selinux:
#setenforce 0
十,补充:
1,虚拟用户的根目录如果在虚拟用户的配置文件中如果没有定义(local_root= ) 那么默认的根目录
就会被被映射为本地用户的根目录(之前建的vuser_ftp);所以虚拟用户要在这个目录中有权限
的话必须先开启,就是说被映射的这个本地用户要对这个虚拟用户指定的根目录有相应的权限。
2,这里实验用的是本地用户是vuser_ftp。在实际的配置中可以用httpd这个服务用户来作为被映射的
用户。这样一来整个网站的目录只需要一个用户,很容易做权限控制
vsftpd虚拟用户【公司系统部分享】的更多相关文章
- 烂泥:ubuntu下vsftpd虚拟用户配置
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我微信ilanniweb. 以前搭建vsftpd都是在centos下,本以为在ubuntu按照以前的步骤搭建即可.可 ...
- vsftpd虚拟用户创建实例(转载)
vsftpd虚拟用户创建实例 发布:theboy 来源:net [大 中 小] vsftpd虚拟用户创建实例,有需要的朋友可以参考下. vsftpd虚拟用户创建实例,有需要的朋友可以参考 ...
- VSFTPD虚拟用户配置
转载:http://www.cnblogs.com/allenjin/archive/2011/12/03/2274542.html 以下操作验证OK!!!! VSFTPD虚拟用户配置 VSFTP = ...
- ubuntu server vsftpd 虚拟用户及目录
ubuntu server vsftpd 虚拟用户及目录 一:需求场景: 在ubuntu server上开设一个虚拟网站,在网站目录建立一个ftp目录,允许用户通过ftp上传网站文件到网站目录: 同时 ...
- vsftpd 虚拟用户配置
vsftpd 虚拟用户的作用是 通过不同的虚拟用户可以有不同的根目录. 从 2.3.5 版本之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能在具有写权限了,如果检查 ...
- Ubuntu 12.04 LTS为例演示vsftpd虚拟用户 的配置
vsftpd虚拟用户 2012-05-19 15:46:59| 分类: GNU/Linux | 标签:ubuntu vsftpd ftp 虚拟用户 |举报|字号 订阅 我们登录FTP有 ...
- vsftpd 虚拟用户限定在虚拟用户目录
1.安装vsftpd yum -y install pam pam-devel db4 db4-tcl vsftpd 2.更名默认配置文件,以便恢复 cp /etc/vsftpd/vsftpd.con ...
- FTP服务-实现vsftpd虚拟用户
前几篇介绍了基础,这篇将具体实现几个案例 实现基于文件验证的vsftpd虚拟用户,每个用户独立一个文件夹 1.创建用户数据库文件 vim /etc/vsftpd/vusers.txt qq cento ...
- 实现验证的vsftpd虚拟用户
实现基于文件验证的vsftpd虚拟用户--(一台) 一.创建用户数据库文件 vim /etc/vsftpd/vuser cd /etc/vsftpd/ db_load -T -t hash -f vu ...
随机推荐
- axios 异步加载 导致 {{}} 中变量为 undefined 报错 的 解决方案
情景:axios 异步加载数据,当返回数据为一个 数组 时,双花括号中 这样写 会报错 {{informationDetail[0].img}} 解决方案一:通过 v-if 进行判断 解决方案二:单独 ...
- vim 处理换行符
1. 设置文件格式 :set fileformats=unix,dos 2. 查询当前文件格式 :set fileformat? 3. 转换文件格式 :set fileformat=dos 4. 设置 ...
- html5 cocos2d js Access-Control-Allow-Origin
1.No 'Access-Control-Allow-Origin' header is present on the requested 近期在接html5的渠道,遇到了跨域的问题,使用 js 的 ...
- MVC项目总结
View命名 View下有多个模块的文件夹,我们根据微软的规定,每个模块下的首页都为Index.cshtml命名 获得当前页面的控制器名称 var currentControllerName = th ...
- java 匿名类和匿名方法
package com.test; interface product{ int getPrice(); } public class News { /** * @param args */ publ ...
- 【Python基础】之不同的文件在不同目录下导入指定模块的方法
如下图三个文件的目录路径 – project |– 1 | |– 2 | | |– 3 | | | |– owen.py ...
- golang 内存池
一般来说,内存池都是采用预分配的方式,分为固定大小的和非固定大小块,固定大小的内存效率高,非固定大小灵活.同时,分为单线程和多线程版的,单线程不需要考虑并发问题. 一般内存池的实现思想:分配一块比较大 ...
- [转]Win10输入法图标消失且只能输入英文的解决方法
今天电脑开机后发现输入法图标不见了,而且只能输入英文,上网查了很多资料终于找到了解决方案,现摘录如下,以防再次遇到问题,便于查找.谢谢提供解决方案的大牛,如有侵权,请联系本人进行删除(文末放置了原文地 ...
- JQ动态获取数据
转:JQUERY获取浏览器窗口的高度和宽度 June 27, 2012 <script type="text/javascript"> $(document).read ...
- x86 的 TSS 任务切换机制
转自:http://blog.chinaunix.net/uid-587665-id-2732907.html [0]写在前面 segment descriptors 构建保护模式下的最基本.最根本的 ...