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]:/>            #成功删除文件
时间: 2024-08-02 18:33:08

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

vsftpd搭建和创建虚拟账号

环境:CentOS 5.0 操作系统一.安装:1.安装Vsftpd服务相关部件:[[email protected] ~]# yum install vsftpd*Dependencies Resolved=============================================================================Package                 Arch       Version          Repository       

vsftpd之虚拟用户相关

虚拟用户: 所有虚拟用户都是系统用户的映射. 0.创建系统用户: #useradd vusers -s /sbin/nologin -d /var/ftproot #password vusers #chown vusers:vusers /var/ftproot 使用账号文件: 1.创建虚拟用户名单: #vim /etc/vsftpd/vusers USERNAME PASSWORD #db_load -T -t hash -f /etc/vsftpd/vusers /etc/vsftpd/v

centos6.5 最小化安装FTP虚拟账号配置

客户机:192.168.0.106 服务端:192.168.0.108(xiaohua108) 一.安装vsftp软件 1.服务端安装直接使用yum安装yum -y install vsftpd 2.客户端安装yum -y install lftp 二.创建虚拟账号 1.创建用户文本文件,添加用户,格式为一行用户一行密码 [[email protected] ~]# vim /etc/vsftpd/vsftpd_user.txt 此文件需要创建 xiaohua  #用户名 此用户名需要与下文创建

VSFTPD配置虚拟用户 -V2

1.安装vsftpd #yum install  vsftpd 2.建立虚拟用户,格式为第一行为用户名名,第二行为密码,然后类推 #vim /home/loginuser.txt 3.为虚拟用户生成建立db数据库,同时只有root用户才能读写 # db_load -T -t hash -f /home/loginuser.txt /etc/vsftpd/vsftpd_login.db # chmod 600 /etc/vsftpd/vsftpd_login.db 4.配置pam文件 # u (6

vsftpd+pam_mysql 虚拟用户配置

公司项目需求: 我们公司是化妆品电子商务公司 1.搭建一台ftp服务器用于上传包裹快递面单图片,实现基本的上传下载功能 2.vsftpd通过虚拟用户登录,可以外网访问 3.限制虚拟用户登录ip 4.虚拟用户相关配置文件可以界面操作添加.修改等,而且要及时更新 下面主要是1.2两步实现步骤及注意事项 3.4两步在另一篇博客里有详细的说明及代码(vsftpd+pam_mysql+shell) 安装pam_mysql  (请一定要安装,下面安装vsftpd错误3给出了解释)这里没有给出mysql的安装

ftp主动/被动模式+虚拟账号配置

FTP基础 FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口).通常21端口是命令端口,20端口是数据端口.当混入主动/被动模式的概念时,数据端口就有可能不是20了 FTP的主动模式    主动模式下,FTP客户端从任意的非特殊的端口(N > 1023)连入到FTP服务器的命令端口--21端口.然后客户端在N+1(N+1 >= 1024)端口监听,并且通过N+1(N+1 >= 1024)端口发送命令

vsftpd服务器配置虚拟用户

添加宿主用户 新建系统用户vsftpd,用户目录为/home/wwwroot, 用户登录终端设为/bin/false(即使之不能登录系统) useradd vsftpd -d /home/wwwroot -s /bin/false 所配置的虚拟用户其实都是映射成配置的宿主用户. 建立虚拟用户名单文件 touch /etc/vsftpd/virtusers 编辑虚拟用户名单文件: 第一行账号,第二行密码,注意:不能使用root做用户名,系统保留 vi /etc/vsftpd/virtusers 生

vsftpd配置虚拟用户

在VSFTP中,虚拟用户认证使用的是单独的口令库文件(pam_userdb),由可插入认证模块(PAM)认证.使用这种方式只能访问服务器为其提供的FTP服务,而不能访问系统的其它资源,由此来提高系统的安全性.并且配置更加灵活. 下面介绍配置过程.注意防火墙和selinx 1.生成虚拟用户口令文件. # vim /etc/vsftpd/login.txt ftpu1#用户名 1234#密码 ftpu2 qwer ftpu3 5678 2.生成口令库文件,并修改其权限: # db_load -T -

ftp虚拟账号登陆

配置使用虚拟用户登录的FTP服务器,可以避免使用操作系统帐号作为FTP用户带来的一些安全问题,也便于通过数据库或其它程序来进行管理. 废话不多说,这里记录下ftp虚拟账号登陆的部署过程及其中遇到的问题: yum安装vsftpd [[email protected] ~]#yum install -y vsftpd [[email protected] ~]#yum install -y db4 线上安装后的环境记录 [[email protected]_web vsftpd]# pwd /etc