vsftpd基于数据库文件实现虚拟用户管理站点目录

本文涉及的产品
运维安全中心(堡垒机),免费版 6个月
运维安全中心(堡垒机),企业双擎版|50资产|一周时长
简介:

vsftpd基于数据库文件来实现虚拟用户管理站点目录:

ftp授权单个系统用户管理(此用户要禁止登陆服务器),虚拟出多个虚拟用户来管理不同的站点目录

一环境
(1)关闭selinux,centos6.8 x_86_64开启防火墙,放开ftp的端口

(2).存放虚拟用户的密码文件
[root@cacti vsftpd]# cat /etc/vsftpd/vsftpd_login
drxiaowu ##账户
ZkJxu55rt9 ##密码
yanyonG
Zk&aO=+w09
xiaowu
Zk&xi+wu96

(3)生成帐户的文件数据库
db_load -T -t hash -f vsftpd_login /etc/vsftpd/vsftpd_login.db
(4)修改文件数据库访问权限
chmod 600 /etc/vsftpd/vsftpd_login.db
(5)手工建立虚拟用户所需的PAM配置文件
[root@cacti extra]# cat /etc/pam.d/vsftpd.virtual 
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

(6)添加一个虚拟用户的入口帐户
useradd -d /var/www/html -s /sbin/nologin apache

二.生产环境配置演示:

2.1 完整生产配置文件如下:
[root@cacti test001]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog

listen=YES
listen_port=1029 ###默认ftp端口是21,现在修改ftp端口为1029
###listen_data_port=1011
pam_service_name=vsftpd.virtual
userlist_enable=YES
tcp_wrappers=YES
check_shell=YES
chroot_local_user=YES
guest_enable=YES
guest_username=apache
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/extra

2.2 多个不同的虚拟用户共享管理同一个站点目录的配置文件:
[root@cacti extra]# cat /etc/vsftpd/extra/drxiaowu 
local_root=/var/www/html/cacti
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
idle_session_timeout=600
data_connection_timeout=120
max_clients=3
max_per_ip=3
local_max_rate=50000
[root@cacti extra]# cat /etc/vsftpd/extra/yanyonG 
local_root=/var/www/html/cacti
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
max_clients=3
max_per_ip=2
local_max_rate=50000

2.2 多个不同的虚拟用户管理不同站点目录的配置文件:

[root@cacti extra]# cat xiaowu 
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/var/www/html/itop
max_clients=1
max_per_ip=2
local_max_rate=50000

[root@cacti extra]# cat drxiaowu 
local_root=/var/www/html/cacti
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
idle_session_timeout=600
data_connection_timeout=120
max_clients=3
max_per_ip=3
local_max_rate=50000

测试:
登陆xiaowu ftp账户测试:
[root@cacti itop]# lftp -p 1029 xiaowu@192.168.1.102
lftp xiaowu@192.168.1.102:/> mkdir test0000000001
mkdir ok, `test0000000001' created
lftp xiaowu@192.168.1.102:/> cd test0000000001/
lftp xiaowu@192.168.1.102:/test0000000001> put /root/10.13.23.24.sql 
265146 bytes transferred in 5 seconds (48.7K/s) 
lftp xiaowu@192.168.1.102:/test0000000001> ls
-rw-r--r-- 1 48 48 265146 Jan 14 05:47 10.13.23.24.sql
lftp xiaowu@192.168.1.102:/test0000000001> pwdbr/>ftp://xiaowu@192.168.1.102:1029/test0000000001
[root@cacti ~]# cd /var/www/html/itop
[root@cacti itop]# ll test0000000001/
total 260
-rw-r--r--. 1 apache apache 265146 Jan 14 13:47 10.13.23.24.sql

登陆drxiaowu ftp账户测试:

[root@cacti itop]# lftp -p 1029 drxiaowu@192.168.1.102
Password: 
lftp drxiaowu@192.168.1.102:~> ls 
lftp drxiaowu@192.168.1.102:/> mkdir txt0000001
mkdir ok, `txt0000001' created
lftp drxiaowu@192.168.1.102:/> cd txt0000001/
lftp drxiaowu@192.168.1.102:/txt0000001> put /root/MegaSAS.log 
187351 bytes transferred
lftp drxiaowu@192.168.1.102:/txt0000001> ls
-rw-r--r-- 1 48 48 187351 Jan 14 05:53 MegaSAS.log
lftp drxiaowu@192.168.1.102:/txt0000001> 
[root@cacti itop]# cd /var/www/html/cacti/
[root@cacti cacti]# ls txt0000001/
MegaSAS.log
[root@cacti cacti]# ll txt0000001/
total 184
-rw-r--r--. 1 apache apache 187351 Jan 14 13:53 MegaSAS.log

2.3 多个不同的虚拟用户管理不同站点目录的配置文件:
当前的站点目录不都是在/var/www/html 下了,而是在如下目录,例如:/data/www/testweb /var/www/html /opt/www 类似这样的多个目录:
配合文件如下:
[root@cacti /]# cat /etc/vsftpd/extra/xiaowu 
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/data/www/testweb
max_clients=1
max_per_ip=2
local_max_rate=50000

测试:
[root@cacti itop]# lftp -p 1029 xiaowu@192.168.1.102
Password: 
lftp xiaowu@192.168.1.102:~> ls 
lftp xiaowu@192.168.1.102:/> ls
lftp xiaowu@192.168.1.102:/> pwd
ftp://xiaowu@192.168.1.102:1029/

lftp xiaowu@192.168.1.102:/> put /root/10.13.23.24.sql 
put: Access failed: 553 Could not create file. (10.13.23.24.sql)
上传文件失败,原因是:虚拟用用户是apache,而指定的ftp的上传的站点目录/data/www/testweb却是root权限,所以没有权限上传。
授权testweb为apache权限
cd /data/www/
chown -R apache.apache testweb
重新上传:
[root@cacti www]# lftp -p 1029 xiaowu@192.168.1.102
Password: 
lftp xiaowu@192.168.1.102:~> ls 
lftp xiaowu@192.168.1.102:/> pwd
br/>ftp://xiaowu@192.168.1.102:1029/
lftp xiaowu@192.168.1.102:/> put /root/10.13.23.24.sql 
265146 bytes transferred in 5 seconds (48.8K/s) 
lftp xiaowu@192.168.1.102:/> ls
-rw-r--r-- 1 48 48 265146 Jan 14 06:09 10.13.23.24.sql
[root@cacti www]# ll /data/www/testweb/
total 260
-rw-r--r--. 1 apache apache 265146 Jan 14 14:09 10.13.23.24.sql
上传成功。

提示:此时其他的ftp用户drxiaowu yanyong 任然可以上传文件到/var/www/html/cacti /var/www/html/itop 目录下。


 本文转自 wjw555 51CTO博客,http://blog.51cto.com/wujianwei/2060748原文链接:


相关文章
|
2月前
|
SQL 关系型数据库 MySQL
数据库导入SQL文件:全面解析与操作指南
在数据库管理中,将SQL文件导入数据库是一个常见且重要的操作。无论是迁移数据、恢复备份,还是测试和开发环境搭建,掌握如何正确导入SQL文件都至关重要。本文将详细介绍数据库导入SQL文件的全过程,包括准备工作、操作步骤以及常见问题解决方案,旨在为数据库管理员和开发者提供全面的操作指南。一、准备工作在导
506 0
|
17天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
21天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
29天前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。
|
2月前
|
SQL 关系型数据库 MySQL
|
2月前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
45 2
|
2月前
|
SQL 存储 关系型数据库
SQL文件导入MySQL数据库的详细指南
数据库中的数据转移是一项常规任务,无论是在数据迁移过程中,还是在数据备份、还原场景中,导入导出SQL文件显得尤为重要。特别是在使用MySQL数据库时,如何将SQL文件导入数据库是一项基本技能。本文将详细介绍如何将SQL文件导入MySQL数据库,并提供一个清晰、完整的步骤指南。这篇文章的内容字数大约在
373 1
|
2月前
|
Java 关系型数据库 数据库连接
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第3天】Spring Boot项目中数据库连接问题可能源于配置错误或依赖缺失。YAML配置文件的格式不正确,如缩进错误,会导致解析失败;而数据库驱动不匹配、连接字符串或认证信息错误同样引发连接异常。解决方法包括检查并修正YAML格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
343 10
|
2月前
|
Java 关系型数据库 MySQL
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第4天】本文分析了Spring Boot应用在连接数据库时可能遇到的问题及其解决方案。主要从四个方面探讨:配置文件格式错误、依赖缺失或版本不兼容、数据库服务问题、配置属性未正确注入。针对这些问题,提供了详细的检查方法和调试技巧,如检查YAML格式、验证依赖版本、确认数据库服务状态及用户权限,并通过日志和断点调试定位问题。
187 6
|
2月前
|
Oracle 关系型数据库 数据库
oracle数据恢复—Oracle数据库文件损坏导致数据库打不开的数据恢复案例
打开oracle数据库时报错,报错信息:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。急需恢复zxfg用户下的数据。 出现上述报错的原因有:控制文件损坏、数据文件损坏、数据文件与控制文件的SCN不一致等。数据恢复工程师对数据库文件做进一步检测分析后发现sysaux01.dbf文件有坏块。修复sysaux01.dbf文件,启动数据库依然有许多查询报错。export和data pump工具无法使用,查询告警日志并分析报错,确认发生上述错误的原因就是sysaux01.dbf文件损坏。由于该文件损坏,从数据库层面无法修复数据库。由于system和用户表空间的数据文件是正常的,