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

时间: 2024-12-30 11:14:58

ubuntu下vsftpd虚拟用户配置的相关文章

centos 6.0 vsftpd虚拟用户配置总结

如果你已经对pam有所了解,请跳过,我知道的可能还不如你多.你不感兴趣也请跳过,因为不看这个也可配置. 用户 <-> vsftpd <-> PAM模块 <-> 用户和密码数据库 vsftpd用了一种很聪明同时也是unix/linux规范的方法来认证用户,就是PAM.大家对于PAM,也许有些陌生,但是一直在用.所谓PAM,英文是:Pluggable Authentication Modules,可拔插认证模    块(不知道这样翻译对不对).看见plug这个关键字,就知道

vsftpd 虚拟用户配置步骤_FTP服务器

yum -y install vsftpd*yum -y install db4*============================================================================先建立一个包含虚拟用户名及其口令的文本文件 , 然后在此基础上生成虚拟用户口令库文件 :#vim logins.txt 添加以下信息 ( 单数行为用户名 , 偶数行为口令 ) : 123     // 用户名 456     // 密码 :wq        //

linux中vsftpd虚拟用户配置脚本示例

每次新安装服务器后,都要进行一系列的配置,安装软件,修改配置等,为了今后更好的部署vsftpd,特此写了个脚本用于部署 登录FTP有三种方式,匿名登录.本地用户登录和虚拟用户登录. 匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous. 本地用户登录:使用系统用户登录,在/etc/passwd中. 虚拟用户登录:这是FTP专有用户,有两种方式实现虚拟用户,本地数据文件和数据库服务器. FTP虚拟用户是FTP服务器的专有用户,使用虚拟用户登录FTP,只能访问FTP服务器提供的

vsftpd虚拟用户与匿名用户配合使用

前几天写过一篇有关vsftpd虚拟用户的文章,今天再来介绍有关vsftpd虚拟用户与匿名用户配合使用的案例. 要求:在公司FTP服务器上,用户ilanni对/data目录下所有的目录都具有管理员权限,即删除.新建.重命名.上传等.而匿名用户可以浏览data目录下的所有目录,其中只对tmp目录具有管理员权限. 这样可以达到只有一个管理员账号,可以对/data目录进行操作,而公司的其他员工帐号都可以浏览/data目录,并且在/data/tmp目录下可以新建自己的目录,并上传文件等权限. 有关vsft

linux中Vsftp虚拟用户配置

1.添加虚拟用户列表 创建一个虚拟用户列表文件,保存需要配置的虚拟帐号,格式为:第一行用户名,第二行密码,依次类推. # vi /etc/vsftpd/virtual_user_list ftp_www 123456 ftp_log 123456 2.生成虚拟用户口令认证文件   通过db_load命令生成认证文件.查询db_load命令是否已安装,未安装则先安装. # rpm -qa |grep db4-utils 本地CentOS未安装,直接通过yum安装即可. # yum -y insta

判断vsftpd虚拟用户无法登陆故障方法

又是vsftpd虚拟用户无法登陆,以前常用apache用户,这次自己建了一个用户vuser,折腾半天不得要领.   看了上次的无法登陆文章,里面提到了一个方法,就是在服务器上用ftp命令登陆,会提示详细的错误信息,而在客户端则无错误日志.切记切记. ftp>ftp 127.0.0.1 按照步骤执行操作, 在登录输入账号密码的时候会提示详细错误

紧急求助:linux vsftpd虚拟用户能上传、下载文件,没有删除权限

问题描述 紧急求助:linux vsftpd虚拟用户能上传.下载文件,没有删除权限 SELinux设置为disable了,文件属主是virtural(virtual是虚拟用户所在的本地用户) 解决方案 写个脚本将文件扫描到就赋予所有权限呢 解决方案二: 把write_enable=yes前面的注释取消试试

Ubuntu下Telnet服务器的配置方法_Linux

1. 首先介绍linux中的守护进程 在Linux系统中有一个特殊的守护进程inetd(InterNET services Daemon),它用于Internet标准服务,通常在系统启动时启动.通过命令行可以给出inetd的配置文件,该配置文件列出了inetd所提供的服务清单.如果没有在命令行给出配置文件,那么inetd将从文件/etc/inetd.conf中读取它的配置信息.inetd的主要任务是为那些没有在系统初始化时启动的服务器进程监听请求,它在同配置文件中列出的服务相关联的TCP或UDP

ubuntu下如何查看用户登录及系统授权相关信息【转】

转自:http://www.tuicool.com/articles/ia67Bj 如何在ubuntu下查看相关用户登录历史,进行系统的日志跟踪和分析,以便发现系统登录问题,进行安全策略防护呢?ubuntu下的一些命令提供了很好的管理手段方法,较好地满足您的这些需求. 1,使用who命令查看当前登录状况. 如图所示,通过who命令可以查看到当前用户及ip的登录情况. 2,使用last命令查看最近登录情况. 如图所示,last命令列出最近一段时间的用户登录时间及ip记录. 3,使用lastlog命