vsftpd使用虚拟账号功能以及设置相关权限

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vsftpd使用虚拟账号功能以及设置相关权限相关的知识,希望对你有一定的参考价值。

我们登录FTP有三种方式,匿名登录、本地用户登录和虚拟用户登录。

匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous。

本地用户登录:使用系统用户登录,在/etc/passwd中。

虚拟用户登录:这是FTP专有用户,有两种方式实现虚拟用户,本地数据文件和数据库服务器。

FTP虚拟用户是FTP服务器的专有用户,使用虚拟用户登录FTP,只能访问FTP服务器提供的资源,大大增强了系统的安全。

例:FTP虚拟账号

公司为了宣传最新的产品信息,计划搭建FTP服务器,为客户提供相关的文档的下载。对所有互联网开放共享目录,允许下载产品信息,禁止上传。公司的合作单位能够使用FTP服务器进行上传和下载,但不可以删除数据。需要保证服务器的稳定性并做优化。


创建FTP虚拟账号。允许客户使用FTP账号下载文件。合作伙伴账号:vip账号 可以上传文件。

需考虑到服务器的安全性,所以关闭实体用户登录,是用虚拟账号验证机制,并对不同账号设置不同的权限。 保证服务器的性能,还需要根据用户等级,限制客户端的连接数以及下载速度。


1、创建用户数据库:

(1)创建用户文本文件

先建立用户文本文件vsftpd_virtualuser.txt,添加两个虚拟账号,公共账号ftp以及客户账号vip

[[email protected] vsftpd]# vim /etc/vsftpd/vsftpd_virtualuser.txt  #写入以下内容,格式:一行账号一行密码。
ftp      #用户                                      
123456         #密码
vip                                            
123456

(2)生成数据库

保存虚拟账号和密码的文本文件无法被系统账号直接调用。我们需要使用db_load命令生成db数据库文件。

安装:

[[email protected] vsftpd]# rpm -qf `which db_load`

db4-utils-4.7.25-22.el6.x86_64
[[email protected] vsftpd]# db_load -T -t hash -f /etc/vsftpd/vsftpd_virtualuser.txt /etc/vsftpd/vsftpd_virtualuser.db

选项:

    -T            允许应用程序能够将文本文件转译载入进数据库。

    -t hash    使用hash码加密。

    -f             指定包含用户名和密码文本文件。此文件格式:奇数行用户名、偶数行密码。

[[email protected] vsftpd]# rm -rf vsftpd_virtualuser.txt        #为了安全,删除此文件。后期将不再使用此文件。

(3)修改数据库文件访问权限

[[email protected] vsftpd]# chmod 600 /etc/vsftpd/vsftpd_virtualuser.db 
[[email protected] vsftpd]# ls -l /etc/vsftpd/vsftpd_virtualuser.db 
-rw------- 1 root root 12288 9月  24 13:16 /etc/vsftpd/vsftpd_virtualuser.db


2、配置PAM文件

为了使服务器能够使用数据库文件,对客户端进行身份验证,需要调用系统的PAM模块。

PAM概述:

PAM(Pluggable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。

[[email protected] vsftpd]# vim  /etc/pam.d/vsftpd

修改vsfptd对应的PAM配置文件/etc/pam.d/vsftpd。将默认配置使用“#”全部注释,添加两行

auth    required        /lib64/security/pam_userdb.so   db=/etc/vsftpd/vsftpd_virtualuser

account required        /lib64/security/pam_userdb.so   db=/etc/vsftpd/vsftpd_virtualuser


3、创建虚拟账号对应的系统用户及FTP共享的目录。

对于公共账号和客户账号,因为需要配置不同的权限,所以可以将两个账号的目录进行隔离,控制用户的文件访问。公共账号ftp对应系统账号ftpuser,并指定其主目录为/var/ftp/share,而客户账号vip对应系统账号ftpvip,指定主目录为/var/ftp/vip。

[[email protected] vsftpd]# useradd -d /var/ftp/share ftpuser
[[email protected] vsftpd]# useradd -d /var/ftp/share ftpvip
[[email protected] vsftpd]# chmod -R 500 /var/ftp/share/                    #修改权限
[[email protected] vsftpd]# chmod -R 700 /var/ftp/vip/
[[email protected]  vsftpd]#  chown ftpuser /var/ftp/share
[[email protected]  vsftpd]#  chown ftpvip /var/ftp/vip

chmod -R 500 /var/ftp/share/    : 公共账号ftp只允许下载,修改share目录其他用户权限 rx 可读可执行。

chmod -R 500 /var/ftp/vip/        : 客户账号vip允许上传和下载,所以对vip目录权限设置为  rwx ,可读可写可执行。


4、建立配置文件:

一个配置文件无法实现此功能,需要为每个账户建立独立的配置文件,并根据需要进行相应的设置。

(1)修改vsftpd.comf 主配置文件

[[email protected] vsftpd]# cat  /etc/vsftpd/vsftpd.conf | grep -v "#"
anonymous_enable=NO                                #不允许匿名登录
local_enable=YES                                   
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
max_clients=300                        #设置FTP服务器最大接入客户端数为300个
max_per_ip=10                         #设置每个IP地址最大连接数为10
user_config_dir=/etc/vsftpd/vuserconfig            #设置虚拟账号的主目录为/vuserconfig
userlist_enable=YES
tcp_wrappers=YES

(2)建立虚拟账号配置文件

在user_config_dir指定路径下,建立与虚拟账号同名的配置文件并添加相应的配置字段。

首先建立公共账号ftp的配置文件

[[email protected] vuserconfig]# mkdir /etc/vsftpd/vuserconfig
[[email protected] vuserconfig]# touch /etc/vsftpd/vuserconfig/ftp
[[email protected] vuserconfig]# touch /etc/vsftpd/vuserconfig/vip

配置虚拟账号配置文件,写入以下内容:

[[email protected] vuserconfig]# vim /etc/vsftpd/vuserconfig/ftp 
guest_enable=yes
guest_username=ftpuser
anon_world_readable_only=no
anon_max_rate=50000

解释:

guest_enable=yes                            #开启虚拟账号登录

guest_username=ftpuser                #设置ftp 对应的系统账号名称为ftpuser

anon_world_readable_only=no       #允许匿名用户浏览整个服务器的文件系统

anon_max_rate=50000                    #限定传输速率为50KB/s

   注意:

            vsftpd对于文件传输速度限制并不是绝对锁定在一个数值上,而是在80%~120%之间变化,比如设置100KB/s,则实际速度在80~120KB/s之间变化。

[[email protected] vuserconfig]# vim /etc/vsftpd/vuserconfig/vip
guest_enable=yes
guest_username=ftpvip
anon_world_readable_only=no
write_enable=yes
anon_mkdir_write_enable=yes
anon_upload_enable=yes
anon_max_rate=100000

解释:        

guest_enable=yes                            #开启虚拟账号登录

guest_username=ftpvip                   #设置ftp对应的系统账号为ftpvip

anon_world_readable_only=no       #允许匿名用户浏览整个服务器的文件系统

write_enable=yes                             #允许在文件系统写入权限

anon_mkdir_write_enable=yes        #允许创建文件夹

anon_upload_enable=yes                #开启匿名账号的上传功能

anon_max_rate=100000                  #限定传输速度为100KB/s


重启vsftpd服务使配置文件生效

[[email protected] ~]# service vsftpd restart
关闭 vsftpd:                                           [确定]
为 vsftpd 启动 vsftpd:                                    [确定]


测试:可以通过ftp客户端和Windows进行测试。

(1)公共账号ftp测试

在公共账号测试前,我们先建立个测试文件。

[[email protected] ~]# cp /mnt/Packages/mysql-embedded-5.1.73-8.el6_8.x86_64.rpm /var/ftp/share   #共享的文件要大一些,方面后期测试下载速度。
[[email protected] ~]# cp -r /boot/grub/ /var/ftp/share/                            #复制一个目录

在Linux下测试。

ftp客户端命令:

lftp    ftpIP    -u    username,passwd

或:

lftp ftpIP    -u    username


使用公共账号ftp,登录ftp服务器

[[email protected] ftp]# lftp 192.168.2.208 -u ftp,123456
lftp [email protected]:~> ls
drwxr-xr-x    2 0        0            4096 Sep 24 06:30 grub
-r--r--r--    1 0        0         2567552 Sep 24 06:29 mysql-embedded-5.1.73-8.el6_8.x86_64.rpm
-r-x------    1 0        0            2007 Sep 24 05:03 passwd
-r-x------    1 0        0        821772288 Sep 24 05:01 text.txt
lftp [email protected]:/> get mysql-embedded-5.1.73-8.el6_8.x86_64.rpm 
2567552 bytes transferred in 51 seconds (48.8K/s)       #速度限制在50KB/s左右

 使用vip账号登录ftp服务器

[[email protected] ftp]# lftp 192.168.2.208 -u vip
口令: 
lftp [email protected]:~> ls            
-rw-r--r--    1 0        0        91459584 Sep 24 06:53 text.txt
lftp [email protected]:/> put text.log            #可以上传
lftp [email protected]:/> ls
-rw-------    1 505      505             0 Sep 24 06:55 text.log
-rw-r--r--    1 0        0        91459584 Sep 24 06:53 text.txt
lftp [email protected]:/> rm -r text.log          #无法删除
rm: Access failed: 550 Permission denied. (text.log)

[[email protected] ftp]# cp /var/ftp/share/mysql-embedded-5.1.73-8.el6_8.x86_64.rpm /var/ftp/vip/a.zip
lftp [email protected]:~> ls            
-r--r--r--    1 0        0         2567552 Sep 24 07:00 a.zip
-rw-------    1 505      505             0 Sep 24 06:55 text.log
lftp [email protected]:/> get a.zip
2567552 bytes transferred in 26 seconds (97.6K/s)     #速度在100KB/s左右

 

到这一步,我们已经成功创建了两个虚拟账号vip以及ftp,并且权限全部设置完毕。


如果后期vip账号想要删除某个文件怎么办呢?


drwx------    2 505      505          4096 Sep 24 06:22 text.log
lftp [email protected]:/> rm text.log/
rm: Access failed: 550 Permission denied. (text.log/)     #删除失败

编辑vip账号的配置文件,添加一行。

[[email protected] vuserconfig]# vim vip 
guest_enable=yes
guest_username=ftpvip
anon_world_readable_only=no
write_enable=yes
anon_mkdir_write_enable=yes
anon_upload_enable=yes
anon_max_rate=100000
anon_other_write_enable=yes        #添加此行

重启vsftpd服务重读配置文件

[[email protected] vuserconfig]# service vsftpd restart
关闭 vsftpd:                                          [确定]
为 vsftpd 启动 vsftpd:                                    [确定]


再次尝试删除文件

[[email protected] ~]# lftp 192.168.2.208 -u vip
口令: 
lftp [email protected]:~> ls            
-r--r--r--    1 0        0         2567552 Sep 24 07:00 a.zip
-rw-------    1 505      505             0 Sep 24 06:55 text.log
lftp [email protected]:/> rm -r text.log
rm 成功, 删除 `text.log‘
lftp [email protected]:/>            #成功删除文件

本文出自 “PooV的博客” 博客,请务必保留此出处http://xyhms.blog.51cto.com/12505169/1968187

以上是关于vsftpd使用虚拟账号功能以及设置相关权限的主要内容,如果未能解决你的问题,请参考以下文章

vsftp建立虚拟用户不同目录分配不同权限操作步骤详解

vsftpd搭建和创建虚拟账号

centos7 安装vsftpd安装和配置以及虚拟用户权限分配

vsftp 部署

Vsftp-虚拟用户配置

Vsftp-虚拟用户配置