热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

两种开设Vsftpd虚拟用户的方法

我们登录FTP有三种方式,匿名登录、本地用户登录和虚拟用户登录。匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous。本地用户登录:使用系统用户登录,在/etc/passwd中。虚拟用户登录:这是FTP专有用户,有两种方式实现虚拟用户,本地数据文

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

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

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

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

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

 

本文实验的Linux系统是CentOS 5 update2

 

一、本地数据文件方式

1. 添加虚拟用户口令文件

[root@CentOS5 /]#vi /etc/vsftpd/vftpuser.txt

添加虚拟用户名和密码,一行用户名,一行密码,以此类推。奇数行为用户名,偶数行为密码。

bobyuan #用户名

123456 #密码

markwang #用户名

123456 #密码

 

2. 生成虚拟用户口令认证文件

将刚添加的vftpuser.txt虚拟用户口令文件转换成系统识别的口令认证文件。

首先查看系统有没有安装生成口令认证文件所需的软件db4-utils。

[root@CentOS5 /]#rpm ?qa |grep db4-utils

[root@CentOS5 /]#rpm ?ivh db4-utils-4.3.29-9.fc6.i386.rpm

下面使用db_load命令生成虚拟用户口令认证文件。

[root@CentOS5 /]#db_load ?T ?t hash ?f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vftpuser.db

 

3. 编辑vsftpd的PAM认证文件

在/etc/pam.d目录下,

[root@CentOS5 /]#vi /etc/pam.d/vsftpd

将里面其他的都注释掉,添加下面这两行:

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser

account required /lib/security/pam_userdb.so db=/etc/vsftpd/vftpuser

 

4. 建立本地映射用户并设置宿主目录权限

所有的FTP虚拟用户需要使用一个系统用户,这个系统用户不需要密码。

[root@CentOS5 /]#useradd ?d /home/vftpsite ?s /sbin/nologin vftpuser

[root@CentOS5 /]#chmod 700 /home/vftpsite

 

5. 配置vsftpd.conf(设置虚拟用户配置项)

[root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf

guest_enable=YES #开启虚拟用户

guest_username=vftpuser #FTP虚拟用户对应的系统用户

pam_service_name=vsftpd #PAM认证文件

 

6. 重启vsftpd服务

[root@CentOS5 /]#service vsftpd restart

 

7. 测试虚拟用户登录FTP

C:\User\Administrator>ftp 192.168.120.240

连接到192.168.120.240。

220 Welcome to BOB FTP server

用户(192.168.120.240(none)):markwang

331 Please specify the password.

密码:

230 Login successful.

 

二、数据库服务器(MySQL)方式

1. 安装MySQL

我使用的是Tar包安装的MySQL,版本号:mysql-6.0.8-alpha.tar.gz

 

2. 建立本地映射用户并设置宿主目录权限

[root@CentOS5 /]#useradd ?d /home/vftpsite ?s /sbin/nologin vftpuser

[root@CentOS5 /]#chmod 700 /home/vftpsite

 

3. 配置vsftpd.conf(设置虚拟用户配置项)

[root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf

guest_enable=YES #开启虚拟用户

guest_username=vftpuser #FTP虚拟用户对应的系统用户

pam_service_name=vsftpd #PAM认证文件

 

4. 在MySQL中建立用户口令数据库

[root@CentOS5 /]#mysql ?u root ?p

mysql> create database vftpuser;   #建立虚拟用户数据库,库名vftpuser

mysql> use vftpuser;  #进入vftpuser数据库

 

mysql> create table users(name char(16) binary,passwd char(16) binary);  #建立虚拟用户口令表,表名users

 

mysql> insert into users (name,passwd) values ('bobyuan',password('111')); 

mysql>  insert into users (name,passwd) values ('markwang',password('111'));

#建立两个虚拟用户,bobyuan和markwang

注:在这里我用这种方法添加的虚拟用户密码都是经过MySQL加密的,加密后的密码pam-mysql不能识别(MySQL和pam-mysql兼容性有些问题),因此本次实验使用明文保存密码。
添加明文密码:
方法一:单个添加用户
mysql> insert into users (name,passwd) values ('bobyuan', '111');
mysql> insert into users (name,passwd) values ('markwang',‘111');
方法二:批量添加用户
新建vftpuser.txt文件
[root@CentOS5 /]#vi vftpuser.txt
添加用户名和密码,注意字段数据之间要用Tab键隔开。
bobyuan  111
markwang 111
mysql>use vftpuser;
mysql>load data local infile “/vftpuser.txt”into table users;

mysql>flush privileges;

 

mysql> grant select on vftpuser.users to vftpuser@localhost identified by '111111';  #授权vftpuser这个账号可以读取vftpuser数据库的user表

 

5. 验证第4步的设置是否成功

[root@CentOS5 /]#mysql ?u vftpuser ?p

mysql>show databases;

mysql>use vftpuser;

mysql>show tables;

mysql>select * from users;

mysql>quit

如下图:

 

6. 编译MySQL的PAM认证模块

查看/lib/security目录下有没有MySQL对应的PAM模块。

我下载的是pam_mysql-0.7RC1.tar.gz。

[root@CentOS5 /]#cd /usr/local/src

[root@CentOS5 src]#tar ?zxvf pam_mysql-0.7RC1.tar.gz

[root@CentOS5 src]#cd pam_mysql-0.7RC1

[root@CentOS5 pam_mysql-0.7RC1]# ./configure --with-mysql=/usr/local/mysql/ --with-pam-mods-dir=/lib/security/

[root@CentOS5 pam_mysql-0.7RC1]#make

[root@CentOS5 pam_mysql-0.7RC1]#make install

 

7. 编辑vsftpd的PAM认证文件

在/etc/pam.d目录下,

[root@CentOS5 /]#vi /etc/pam.d/vsftpd

将里面其他的都注释掉,添加下面这两行:

auth required pam_mysql.so user=vftpuser passwd=111111 host=localhost db=vftpuser table=users usercolumn=name passwdcolumn=passwd crypt=0

account required pam_mysql.so user=vftpuser passwd=111111 host=localhost db=vftpuser table=users usercolumn=name passwdcolumn=passwd crypt=0

crypt=0:表示口令使用明文方式保存在数据库中
crypt=1:表示口令使用UNIX的DES加密方式加密后保存在数据库中
crypt=2:表示口令使用MySQL的password()函数加密后保存在数据库中
crypt=3:表示口令使用MD5散列值的方式保存在数据库中

 

8. 重启vsftpd服务

[root@CentOS5 /]#service vsftpd restart

 

9. 测试虚拟用户登录FTP

C:\User\Administrator>ftp 192.168.120.240

Connected to 192.168.120.240.
220 Welcome to BOB FTP server
User (192.168.120.240:(none)): bobyuan
331 Please specify the password.
Password:
230 Login successful.
ftp> quit
221 Goodbye.

 

三、虚拟用户高级设置

1. virtual_use_local_privs参数

当virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限;

当virtual_use_local_privs=NO时,虚拟用户和匿名用户有相同的权限,默认是NO。

 

当virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。

 

当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_Only=YES,

anon_upload_enable=YES时,虚拟用户不能浏览目录,只能上传文件,无其他权限。

 

当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_Only=NO,

anon_upload_enable=NO时,虚拟用户只能下载文件,无其他权限。

 

当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_Only=NO,

anon_upload_enable=YES时,虚拟用户只能上传和下载文件,无其他权限。

 

当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_Only=NO,

anon_mkdir_write_enable=YES时,虚拟用户只能下载文件和创建文件夹,无其他权限。

 

当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_Only=NO,

anon_other_write_enable=YES时,虚拟用户只能下载、删除和重命名文件,无其他权限。

 

2. 建立各个虚拟用户自身的配置文件

[root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf

添加:

user_config_dir=/etc/vsftpd/vsftpd_user_conf

[root@CentOS5 /]#mkdir /etc/vsftpd/vsftpd_user_conf

编辑bobyuan的配置文件

[root@CentOS5 /]#vi /etc/vsftpd/vsftpd_user_conf/bobyuan

添加:

anon_world_readable_Only=NO #开放bobyuan的下载权限(只能下载)。注意这个地方千万不能写成YES,否则bobyuan将不能列出文件和目录。

编辑markwang的配置文件

[root@CentOS5 /]#vi /etc/vsftpd/vsftpd_user_conf/markwang

添加:

write_enable=YES #开放markwang的写权限

anon_world_readable_Only=NO #开放markwang的下载权限

anon_upload_enable=YES #开放markwang的上传权限

anon_mkdir_write_enable=YES #开放markwang创建目录的权限

anon_other_write_enable=YES #开放markwang删除和重命名的权限

 

四、虚拟用户配置文件(实验)

1. 所有虚拟用户使用统一配置

[root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf

write_enable=YES

anonymous_enable=NO

local_enable=YES

guest_enable=YES

guest_username=vftpuser

virtual_use_local_privs=NO

pam_service_name=vsftpd

anon_world_readable_Only=NO #可以下载

anon_upload_enable=NO(默认值) #不能上传

anon_mkdir_write_enable=NO(默认值) #不能新建文件夹

anon_other_write_enable=NO(默认值) #不能删除和重命名文件

ftpd_banner=Welcome to BOB FTP server

xferlog_enable=YES

xferlog_file=/var/log/vsftpd.log

xferlog_std_format=YES

ascii_upload_enable=YES

ascii_download_enable=YES

tcp_wrappers=NO

setproctitle_enable=YES

listen_port=21

connect_from_port_20=YES

idle_session_timeout=600

data_connection_timeout=120

max_clients=0

max_per_ip=3

local_max_rate=512000

 

2. 各个虚拟用户使用自身配置

[root@CentOS5 /]#vi /etc/vsftpd/vsftpd.conf

write_enable=YES

anonymous_enable=NO

local_enable=YES

guest_enable=YES

guest_username=vftpuser

virtual_use_local_privs=NO

pam_service_name=vsftpd

user_config_dir=/etc/vsftpd/vsftpd_user_conf

ftpd_banner=Welcome to BOB FTP server

xferlog_enable=YES

xferlog_file=/var/log/vsftpd.log

xferlog_std_format=YES

ascii_upload_enable=YES

ascii_download_enable=YES

tcp_wrappers=NO

setproctitle_enable=YES

listen_port=21

connect_from_port_20=YES

idle_session_timeout=600

data_connection_timeout=120

max_clients=0

max_per_ip=3

local_max_rate=512000

 

[root@CentOS5 /]#mkdir /etc/vsftpd/vsftpd_user_conf

编辑bobyuan(FTP匿名用户)的配置文件

[root@CentOS5 /]#vi /etc/vsftpd/vsftpd_user_conf/bobyuan

anon_world_readable_Only=NO

编辑ftpadmin(FTP匿名管理员)的配置文件

[root@CentOS5 /]#vi /etc/vsftpd/vsftpd_user_conf/ftpadmin

anon_world_readable_Only=NO

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES


推荐阅读
  • 本文介绍了数据库体系的基础知识,涵盖关系型数据库(如MySQL)和非关系型数据库(如MongoDB)的基本操作及高级功能。通过三个阶段的学习路径——基础、优化和部署,帮助读者全面掌握数据库的使用和管理。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 本文详细介绍了一种通过MySQL弱口令漏洞在Windows操作系统上获取SYSTEM权限的方法。该方法涉及使用自定义UDF DLL文件来执行任意命令,从而实现对远程服务器的完全控制。 ... [详细]
  • 版本控制工具——Git常用操作(下)
    本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 本文详细介绍了如何在PHP中进行数组删除、清空等操作,并提供了在Visual Studio Code中创建PHP文件的步骤。 ... [详细]
  • 离线安装Grafana Cloudera Manager插件并监控CDH集群
    本文详细介绍如何离线安装Cloudera Manager (CM) 插件,并通过Grafana监控CDH集群的健康状况和资源使用情况。该插件利用CM提供的API接口进行数据获取和展示。 ... [详细]
  • 苹果系统频繁弹窗提示无法验证服务器身份?竟是网易邮箱证书过期所致
    近日,众多苹果用户发现iOS、iPadOS和macOS系统频繁弹出无法验证服务器身份的警告。问题根源在于网易邮箱未能及时更新其数字证书,导致原证书过期后无法被信任。 ... [详细]
  • 探讨在开发、学习和实验过程中,使用 VMware 和 Docker 的优劣,帮助用户根据具体需求做出最佳选择。 ... [详细]
  • vivo Y5s配备了联发科Helio P65八核处理器,这款处理器采用12纳米工艺制造,具备两颗高性能Cortex-A75核心和六颗高效能Cortex-A55核心。此外,它还集成了先进的图像处理单元和语音唤醒功能,为用户提供卓越的性能体验。 ... [详细]
  • Linux环境下进程间通信:深入解析信号机制
    本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
author-avatar
372630243
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有