烂泥:ubuntu下vsftpd虚拟用户配置
本文由ilanniweb提供友情赞助,首发于烂泥行天下
想要获得更多的文章,可以关注我微信ilanniweb。
以前搭建vsftpd都是在centos下,本以为在ubuntu按照以前的步骤搭建即可。可是实际情况告诉我是,我太想当然了。经过一番的折腾终于把ubuntu下vsftpd虚拟用户的配置搞定了,下面就把我的配置步骤贴出来供得为参考。
一、业务要求
现在要求创建一个FTP账号ailanni,该账号只能登录到/www目录下,不能切换到上级目录。同时处于安全考虑还要求该账号上传的文件权限为644,即上传的文件具有可读可写权限,但是没有可执行权限。
除此之外还要求该用户不能是系统用户,即使用vsftpd的虚拟用户。
要求看起来比较简单,下面我们开始进行配置。
PS:以下实验全部在ubuntu server 14.04 X64上进行。有关centos的操作可以参考这篇文章《烂泥:Vsftpd使用虚拟用户,访问FTP》。
二、vsftpd安装
在配置vsftpd之前,我们先安装vsftpd,vsftpd的安装比较简单。我们再次直接使用apt-get进行安装,如下:
sudo apt-get -y install vsftpd

vsftpd的安装很简单,我们现在来查看下vsftpd都安装了那些文件。如下:
dpkg -L vsftpd |tac

通过上图,我们可以看出vsftpd在安装时,生成了很多文件,其中/etc/init/vsftpd.conf、/etc/vsftpd.conf比较重要。
/etc/init/vsftpd.conf是vsftpd的初始化文件,而/etc/vsftpd.conf是vsftpd的配置文件。
现在我们来查看下/etc/init/vsftpd.conf文件。如下:
cat /etc/init/vsftpd.conf

通过上图,我们可以很明显的看出vsftpd初始化时使用的配置文件就是/etc/vsftpd.conf文件。
为什么在此我要指出这一点呢?是因为我原以为ubuntu下vsftpd和centos下的一样,可以把vsftpd的配置文件存放到/etc/vsftpd/目录下。这一点是和centos不同的。
除此之外,还有一点不同,就是vsftpd的启动、停止、重启脚本。
在ubuntu下要启动、停止、重启vsftpd,我们必须使用以下命令:
sudo service vsftpd stop
sudo service vsftpd start
sudo service vsftpd restart
而在centos下,我们可以使用以下命令:
service vsftpd stop
/etc/init.d/vsftpd stop
最后,我们再来查看下vsftpd的服务脚本。如下:
cat /lib/systemd/system/vsftpd.service

三、vsftpd配置
vsftpd安装完毕后,我们现在开始配置vsftpd,不过在正式配置之前,我们还有几步工作要做。
3.1 用户相关配置
因为是使用vsftpd的虚拟用户,所以我们需要先在系统中创建一个用户,并且该用户对/www目录具有可读可写可执行权限。
创建用户,如下:
sudo useradd -m -s /bin/bash ftpilanni
cat /etc/passwd |grep ftpilanni

注意:创建的用户ftpilanni现在是无法登录到系统的,因为没有给该用户设置密码。在此,我们也无需ftpilanni登录到系统,这样相对来说比较安全。
用户创建完毕后,我们来创建对应的目录并修改其所属用户,如下:
sudo mkdir /www
sudo chown -R ftpilanni:ftpilanni /www/

有关用户相关配置结束后,我们开始设置登录vsftp的用户与密码文件login.txt。如下:
sudo mkdir /etc/vsftpd/
sudo vim /etc/vsftpd/login.txt
ailanni
ailannipassword

login.txt为登录vsftpd的用户与密码文件。
login.txt设置完毕后,我们要使用db_load进行加密。而db_load需要db-util这个软件。所以需要我们现在安装db-util,如下:
sudo apt-get -y install db-util

db-util安装完毕后,现在开始使用db_load对loginx.txt进行加密。如下:
sudo db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db

loginx.txt加密完成后,我们现在开始配置vsftpd的PAM验证。
3.2 PAM验证配置
vsftpd的PAM验证,在此我没有使用vsftpd安装时所生成的/etc/pam.d/vsftpd文件。
因为经过我多次的测试,发现如果使用该文件进行验证的话,无法验证通过。不知道为什么,猜想很有可能是vsftpd的一个BUG。
创建验证文件,如下:
sudo vim /etc/pam.d/vsftpd.virtual
auth required pam_userdb.so db=/etc/vsftpd/login
account required pam_userdb.so db=/etc/vsftpd/login

vsftpd.virtual文件的内容,也可以根据OS的版本进行调整。我现在使用的是ubuntu x64,所以也可以填写为:
auth required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/login
其中/etc/vsftpd/login对应/etc/vsftpd/login.db文件
3.3 vsftp权限配置
现在正式配置vsftpd,vsftpd的几乎所有配置项都在/etc/vsftpd.conf文件中进行。
根据业务要求vsftpd.conf配置内容如下:
grep -vE "^#|^$" /etc/vsftpd.conf
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_local_user=YES
chroot_list_enable=NO
allow_writeable_chroot=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
guest_enable=YES
pam_service_name=vsftpd.virtual
user_config_dir=/etc/vsftpd/vu
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000

在以上配置文件中,有几点需要重点指出。
local_enable=YES
write_enable=YES
local_umask=022
这两项是启用系统用户的写权限。特别是write_enable=YES项一定要启用,否则vsftpd虚拟用户将无法登录vsftpd。
为什么会是这样?因为虚拟用户依赖与系统用户。
chroot_local_user=YES
chroot_list_enable=NO
allow_writeable_chroot=YES
这三项是配置vsftpd用户禁止切换上级目录的权限。
guest_enable=YES
pam_service_name=vsftpd.virtual
user_config_dir=/etc/vsftpd/vu
这三项是启用vsftpd虚拟用以及虚拟用户账号配置目录。
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
这三项是启用vsftpd被动模式及相关端口。
3.4 虚拟用户相关配置
vsftpd配置文件修改文件后,现在开始配置虚拟用户的相关权限。如下:
sudo mkdir /etc/vsftpd/vu
sudo vim /etc/vsftpd/vu/ailanni
guest_username=ftpilanni
local_root=/www/
virtual_use_local_privs=YES
anon_umask=133

以上配置参数,其中guest_username=ftpilanni表示的是设置FTP对应的系统用户为ftpilanni
local_root=/www/表示使用本地用户登录到ftp时的默认目录。
virtual_use_local_privs=YES虚拟用户和本地用户有相同的权限。
anon_umask表示文件上传的默认掩码。计算方式是777减去anon_umask就是上传文件的权限。在此我们设置的是133,也就是说上传后文件的权限是644。即上传的文件对所属用户来说只有读写权限,没有执行权限。
以上全部配置完毕后,我们来重启vsftpd,如下:
sudo service vsftpd restart

四、测试
现在我们来使用ailanni用户登录vsftpd进行测试。


通过以上两张图,我们可以很明显的看到vsftpd的配置已经达到了业务的要求。
五、IPtables配置
在实际生产环境中,为了安全起见,我们一般是开启防火墙的。
在ubuntu上,我们也可以使用IPtables来进行防护。
IPtables配置如下:
sudo iptables-save >/home/ilanni/iptables.rule

sudo iptables-restore < /home/ilanni/iptables.rule
sudo iptables -nL

sudo vim /etc/network/interfaces
pre-up iptables-restore < /home/ilanni/iptables.rule
post-down iptables-save < /home/ilanni/iptables.rule

烂泥:ubuntu下vsftpd虚拟用户配置的更多相关文章
- ubuntu server vsftpd 虚拟用户及目录
ubuntu server vsftpd 虚拟用户及目录 一:需求场景: 在ubuntu server上开设一个虚拟网站,在网站目录建立一个ftp目录,允许用户通过ftp上传网站文件到网站目录: 同时 ...
- VSFTPD虚拟用户配置
转载:http://www.cnblogs.com/allenjin/archive/2011/12/03/2274542.html 以下操作验证OK!!!! VSFTPD虚拟用户配置 VSFTP = ...
- vsftpd 虚拟用户配置
vsftpd 虚拟用户的作用是 通过不同的虚拟用户可以有不同的根目录. 从 2.3.5 版本之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能在具有写权限了,如果检查 ...
- [ 总结 ] vsftpd 虚拟用户配置
需求:在不更改目录权限的前提下,ftp用户对目录里的文件拥有所有权. [root@server2 ~]# yum install vsftpd -y [root@server2 ~]# cd /etc ...
- vsftpd虚拟用户创建实例(转载)
vsftpd虚拟用户创建实例 发布:theboy 来源:net [大 中 小] vsftpd虚拟用户创建实例,有需要的朋友可以参考下. vsftpd虚拟用户创建实例,有需要的朋友可以参考 ...
- FTP服务器虚拟用户配置
FTP服务配置问题及解决方案 使用被动模式,设置云主机IP为被动模式数据传输地址:在配置文件内添加 pasv_enable=YES pasv_promiscuous=YES pasv_address= ...
- Ubuntu 12.04 LTS为例演示vsftpd虚拟用户 的配置
vsftpd虚拟用户 2012-05-19 15:46:59| 分类: GNU/Linux | 标签:ubuntu vsftpd ftp 虚拟用户 |举报|字号 订阅 我们登录FTP有 ...
- 烂泥:Postfix邮件服务器搭建之虚拟用户配置
virtual_gid_maps = static: virtual_transport = dovecot dovecot_destination_recipient_limit = 1 注意:po ...
- vsftpd安装及虚拟用户配置
服务器环境:CentOS6.9 Linux 2.6.32-696.10.1.el6.x86_64 安装vsftpd.db4.db4-utils # yum -y install vsftpd db4 ...
随机推荐
- 操作系统与c语言
以下是根据看书后的理解做的总结: 最早,unix是使用汇编编写,但是非常简单.后来觉得汇编,换种机器又得重新用另外一种机器汇编重写,太麻烦.于是想设计一种通用的语言,到各种机器上都能运行 当时 ...
- PHP内核探索之变量(6)- 后续内核探索系列大纲备忘
年前因为工作比较饱和,现在又忙着换工作的事情,基本停止了对博文的更新.后续的博文,还是慢慢补上吧. 为了不至于过于发散,先搞个未成形的大纲,如下: PHP内核探索之变量 不平凡的字符串 PHP内核探 ...
- C#读取Excel文件:通过OleDb连接,把excel文件作为数据源来读取
转载于:http://developer.51cto.com/art/200908/142392.htm C#读取Excel文件可以通过直接读取和OleDb连接,把excel文件作为数据源来读取: ...
- 修改windows系统文件权限
修改windows系统文件总是提示没有权限,虽然已是administrator也不管用. 以下方法可以解决: 右键属性,安全,高级,所有者,编辑,选择当前用户并确定, 回到上一页再确定, 然后在安全页 ...
- go语言 类型:基础类型和复合类型
Go 语言中包括以下内置基础类型:布尔型:bool整型:int int64 int32 int16 int8 uint8(byte) uint16 uint32 uint64 uint浮点型:floa ...
- 尝试加载 Oracle 客户端库时引发 BadImageFormatException。问题记录
电脑是win8 64位,安装oracle 11g r2 64位的,谁知道一切装完毕后,打开项目却连不上oracle数据了...首先是pl/sql连不上,装了oracle服务器,应该是不用再装客户端,p ...
- HtmlEncode和JavaScriptEncode(预防XSS)
在数据添加到DOM时候,我们可以需要对内容进行HtmlEncode或JavaScriptEncode,以预防XSS攻击. JavaScriptEncode 使用“\”对特殊字符进行转义,除数字字母之外 ...
- jQuery绑定事件的四种方式
jQuery提供了多种绑定事件的方式,每种方式各有其特点,明白了它们之间的异同点,有助于我们在写代码的时候进行正确的选择,从而写出优雅而容易维护的代码.下面我们来看下jQuery中绑定事件的方式都 ...
- [SharePoint] SharePoint 错误集 3
阅读目录 1. workflow 流程走不下去,报 workflow fails to run 的错误 2. 安装sharepoint prerequisit总是在web server (iis)这步 ...
- Web服务器具体开发流程
下面是我个人对Web服务器开发流程的一点理解,下面做出了大概的模型,实现了基本的功能,下面也有所有的代码可以提供参考: 一开始学的时候不要把网站想的太复杂了,把网站的流程和大概的原理框架搞清楚,在通过 ...