vsftpd部署(centos7.9)

news/2024/12/25 13:19:45/文章来源:https://www.cnblogs.com/ruiops/p/18424598

说明:
– vsftpd的版本:vsftpd-3.0.2-29.el7_9.x86_64
– ftp根目录:/var/www
– ftp 配置文件目录:/etc/vsftpd
– ftp 虚拟用户权限配置文件目录:/etc/vsftpd/user_conf

实现目标:
– 匿名用户可以登录,但是不能访问虚拟用户的宿主目录,只能访问共享目录
– 虚拟用户对自己的宿主目录有任何权限,且只能在自己宿主目录中操作

搭建过程
1. 安装vsftpd,ftp和libdb-utils(需要安装db包,用来加密虚拟用户的账号信息,centos7已经安装好了)

#阿里云服务器默认安装,此处可忽略
[root@CentOS ~]# yum install -y vsftpd ftp
  1. 创建本地用户(用于映射虚拟用户)
# 建立ftp用户目录
[root@CentOS ~]# mkdir -p /var/www/test.com
# 创建用户
[root@CentOS ~]# useradd -d /var/www/ vsftp -s /sbin/nologin
# 更改权限和主组权限
[root@CentOS ~]# chmod 755 /var/www/
[root@CentOS ~]# chown vsftp.vsftp /var/www/  -R
  1. 修改配置文件
[root@CentOS ~]# cd /etc/vsftpd
[root@CentOS ~]# mv vsftpd.conf vsftpd.conf.bak
[root@CentOS ~]# vim /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_file=/var/log/xferlog
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
#修改ftp默认端口(涉及等保和网络安全检查会扫描默认的21端口,所以修改端口号)
listen_port=1802
# 限制pasv的打开端口范围(不开这个ftp客户端连不上)
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10010
# 修改ftp默认目录
chroot_local_user=YES
local_root=/var/www/test.com
anon_root=/var/www/test.com
anon_umask=022
# pam认证文件,注意下列值要跟第5步文件名一致
pam_service_name=vsftpd
#虚拟用户权限配置目录
user_config_dir=/etc/vsftpd/user_conf
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES
one_process_model=NO
#开启虚拟用户
guest_enable=YES
guest_username=vsftp
  1. 创建存储虚拟用户的文件
[root@CentOS ~]# mkdir /etc/vsftpd/user_conf/
[root@CentOS ~]# cd /etc/vsftpd/user_conf
[root@CentOS ~]# vim lyh
# 设置登录后禁锢的目录
local_root=/var/www/test.com
# 开放写权限
write_enable=yes
# 开放下载权限
anon_world_readable_only=no
# 开放上传权限
anon_upload_enable=yes
# 开放创建目录的权限
anon_mkdir_write_enable=yes
# 开放删除和重命名的权限
anon_other_write_enable=yes
  1. 生成数据库文件并创建PAM认证文件
[root@CentOS ~]# cd /etc/vsftpd/
[root@CentOS ~]# vim virtusers
xxx
gF9@@rH1%h22;8~
[root@CentOS ~]# db_load -T -t hash -f virtusers virtusers.db
[root@CentOS ~]# chmod 600 virtusers.db
[root@CentOS ~]# cd /etc/pam.d/
[root@CentOS ~]# mv vsftpd vsftpd.bak
[root@CentOS ~]# vim /etc/pam.d/vsftpd
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
  1. 启动vsftpd服务
[root@CentOS ~]# systemctl start vsftpd
[root@CentOS ~]# systemctl enable vsftpd
  1. 更改虚拟用户目录权限
[root@CentOS ~]# mkdir /var/ftp/admin && chmod 700 /var/ftp/admin
[root@CentOS ~]# mkdir /var/ftp/user && chmod 700 /var/ftp/user
[root@CentOS ~]# chown -R vsftp.root  /var/ftp
  1. 测试访问
[root@CentOS ~]# ftp 127.0.0.1Connected to 127.0.0.1 (127.0.0.1).220 (vsFTPd 3.0.2)Name (127.0.0.1:root): xxx331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> exit221 Goodbye.
  1. 添加新用户(不需要重启vsftpd服务)
[root@CentOS ~]# vim /etc/vsftpd/vuser_list
admin
123456
user
123456
test
123456
#创建test用户对应的目录并授权
[root@CentOS ~]# mkdir /var/ftp/test && chown vsftp:root /var/www/test
#重新生成加密的db文件
[root@CentOS ~]# cd /etc/vsftpd
[root@CentOS ~]# db_load -T -t hash -f vuser_list vuser_list.db
# 删除用户就是把添加用户的操作撤销,然后删除加密的db文件重新生成即可。
# 测试访问,此时添加的test用户的/var/ftp/test目录的权限是755,匿名用户可以登录。若要屏蔽,修改权限为700即可。
  1. 问题处理

– 报错1:226 Transfer done (but failed to open directory)
解决:关闭selinux和防火墙
– 报错2:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
解决:配置文件中加入 allow_writeable_chroot=YES 针对标准vsftpd(standonly)模式,然后重启ftp。

  1. vsftp上传文件权限问题
    file_open_mode上传档案的权限,与chmod 所使用的数值相同。如果希望上传的文件可以执行,设此值为0777。
    默认情况下vsftp上传之后文件的权限是600,目录权限是700

* local_umask=xxx这是指定本地用户上传后的文件权限设置
* anon_umask=xxx这是指定虚拟用户上传后的文件权限设置
* umask是unix操作系统的概念,umask决定目录和文件被创建时得到的初始权限
* umask = 022时,新建的目录 权限是755,文件的权限是 644
* umask = 077时,新建的目录 权限是700,文件的权限时 600

  1. 部署云服务器上,安全组放开1802还是连接失败
    按照配置文件中设置被动端口范围,放开安全组

  2. 使用FileZilla连接报超时
    修改配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/801235.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

隐私保护体系下网络威胁情报共享的研究现状和方案设计

来源:http://netinfo-security.org/article/2024/1671-1122/1671-1122-24-7-1129.shtml威胁情报 网络威胁情报是关于网络中正在进行的或潜在的恶意活动信息,涵盖但不限于特定的恶意软件样本、恶意IP地址、钓鱼电子邮件信息、黑客组织的入侵行为等内容,对于提前感知预警、防范…

Logisim-013-◇汉字显示

转码在线工具地址 https://www.23bei.com/tool/54.html#仓库地址 https://gitee.com/gitliang/logisim-to-cpu

spring6.1在java17环境下使用反射

引包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><version>3.3.4</version> </dependency> 反射代码编写简单的反射方法,如下所示 package com.lw.reflect.c…

实景三维+耕地保护:构建耕地资源管理的全闭环新模式

在耕地资源日益珍贵的今天,如何高效、精准地实施耕地保护,成为了我国农业可持续发展与生态文明建设的关键课题。“实景三维+耕地保护”的创新模式,能够为这一挑战提供突破性的解决方案,打造一个从前端监测到后端管理的全闭环耕地保护管理模式。本文将深入分析这一模式的核心…

IDEA 如何设置TAB页显示多行

前言 我们在使用IDEA开发时,经常需要打开多个TAB页,但是,IDEA默认的方式是最多只能打开少量的TAB页,且打开的TAB页只能堆积在一行上显示,如果超出了数量,就会自动隐藏。这样对于我能经常需要在多个不同TAB页之间打开来说,是比较麻烦的,那么有什么办法能改变下设置呢? …

深入剖析RocketMQ消息消费原理

本文参考转载至《RocketMQ技术内幕 第2版》一. 消息消费概述 消息消费以组的模式开展,一个消费组可以包含多个消费者,每个消费组可以订阅多个主题,消费组之间有集群模式和广播模式两种消费模式。集群模式是当前主题下的同一条消息只允许被其中一个消费者消费。广播模式是当前…

dc-8

靶机下载地址:dc-8 找到靶机 nmap -sV 192.168.6.0/24查看端口 疑似有注入点开始尝试 python sqlmap.py -u "http://192.168.6.135/?nid=*" --dbs 查库python sqlmap.py -u "http://192.168.6.135/?nid=*" -D "d7db" --tables 查表python sqlm…

27. 守护进程、进程间通信

1. 僵尸进程与孤儿进程1.1 前言 在unix中,所有的子进程都是由父进程创建的,子进程再创建新的子进程 子进程的结束和父进程的运行是一个异步的过程,即子进程运行完成时,父进程并不知道 当子进程运行完成时,父进程需要调用wait()或waitpid()来获取子进程的运行状态 1.2 僵尸…

BUU XSS COURSE 1

启动靶机有留言板和登录功能,很明显是存储性xss,通过留言功能插入xss代码,获取cookie登录后台 先测试过滤 <script>alert(1);</script> 查看源代码发现script被过滤 <input onfocus="alert(xss);">好像只过滤了script找一个xss平台或者自己用服…

Wireshark开源抓包工具

Wireshark零基础使用教程(超详细) - 元宇宙-Metaverse - 博客园 (cnblogs.com)一、Wireshark是什么 Wireshark是使用最广泛的一款「开源抓包软件」,常用来检测网络问题、攻击溯源、或者分析底层通信机制。 它使用WinPCAP作为接口,直接与网卡进行数据报文交换。 二、Wiresha…

Prompt提示词概念

什么是prompt提示词? 叮!快来看看我和文心一言的奇妙对话~什么是提示工程(prompt engineering)?点击链接 https://yiyan.baidu.com/share/vMZ69XCFTc?utm_invite_code=P0HSh4T14mrU4TwxGbJ%2BSw%3D%3D&utm_name=SGlkZGVuX3N0YXJz&utm_fission_type=common -- 文心…

C#|.net core 基础 - 深拷贝的五大类N种实现方式

C#深拷贝复杂,文中介绍了五大类N种深拷贝方法,包括简单引用类型、手动方式、序列化方式、第三方库方式和扩展视野方式,并对比了性能。建议使用AutoMapper和DeepCloner等成熟库或根据性能需求选择表达式树和Emit。在实际应用中经常会有这样的需求:获取一个与原对象数据相同但…