【centos】【vsftpd】FTP本地用户登录配置

目录

    • ftp与sftp
    • 安装vsftpd和ftp
    • 本地用户登录-不限制访问目录
    • 本地用户登录-限制访问目录
    • 有可能影响连接的问题
      • pam认证
      • selinux策略
      • 被动模式
      • 防火墙
      • ipv4和ipv6
    • 报错
      • 1、 530 Login incorrect
      • 2、500 OOPS: vsftpd: refusing to run with writable root inside chroot()
      • 3、227 Entering Passive Mode (10,1,58,5,242,166). ftp: connect: 没有到主机的路由
      • 4、425 Failed to establish connection. Error EElFTPSError: Control channel transfer error 114690

ftp与sftp

  • 差异非常大
  • ftp相当于一种网络协议,可运行在不同操作系统,默认使用21端口和20端口,明文传输且不稳定
  • sftp基于ssh,默认使用22端口,Linux自带,加密传输且稳定
  • vsftpd是用于配置ftp,与sftp无关
  • sftp无需配置,相当于ssh远程连接,本地用户使用sftp user@XX.XX.XX.XX即可

安装vsftpd和ftp

  1. ftp用于测试
    yum install -y vsftpd* ftp*
    
  2. 启动
    systemctl start vsftpd
    
  3. 防火墙开放21端口
    firewall-cmd --zone=public --add-port=21/tcp --permanent
    firewall-cmd --reload
    firewall-cmd --zone=public --list-ports
    
  4. 测试
    systemctl status vsftpd
    netstat -ntlp | grep vsftpd
    ftp XX.XX.XX.XX
    
    默认配置下,匿名用户登录,密码为空
    在这里插入图片描述

本地用户登录-不限制访问目录

不可匿名登录
禁止其他用户访问
仅本地用户ftpuser可访问
默认访问目录/home/ftpuser
可访问其他目录

  1. 新增本地用户ftpuser

    useradd -d /home/ftpuser -s /bin/bash ftpuser
    passwd ftpuser
    
  2. 修改配置
    /etc/vsftpd/vsftpd.conf默认配置如下

    anonymous_enable=YES
    local_enable=YES
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=NO
    listen_ipv6=YES
    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES
    

    修改后

    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
    listen=NO
    listen_ipv6=YES
    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES# YES,user_list用户为黑名单,禁止登录;NO则为白名单,可登录
    userlist_deny=YES
    # chroot_list本地用户可登录ftp名单,且本地用户需要在/etc/shells范围内或者修改/etc/pam.d/vsftpd的pam限制
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list
    # 设置根目录可写
    allow_writeable_chroot=YES
  3. /etc/vsftpd/下新建chroot_list文件,然后写入本地用户ftpuser,一行代表一个用户

  4. 重启systemctl restart vsftpd

  5. 本机测试ftp XX.XX.XX.XX 成功

本地用户登录-限制访问目录

不可匿名登录
禁止其他用户访问
仅本地用户ftptest可访问
仅可访问目录/var/ftp

  1. 新增本地用户ftptest
    useradd -d /var/ftp -s /sbin/nologin ftptest
    passwd ftptest
    chmod -R 777 /var/ftp
    
  2. 修改/etc/pam.d/vsftpd,使用户可通过pam验证
    [root@localhost vsftpd]# vi /etc/pam.d/vsftpd#%PAM-1.0session    optional     pam_keyinit.so    force revokeauth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed#auth       required     pam_shells.soauth       include      password-authaccount    include      password-authsession    required     pam_loginuid.sosession    include      password-auth
    
  3. 修改配置
    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
    listen=NO
    listen_ipv6=YES
    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES# YES,user_list用户为黑名单,禁止登录;NO则为白名单,可登录
    userlist_deny=YES
    # 限制访问目录本地用户仅可访问/var/ftp
    chroot_local_user=YES
    local_root=/var/ftp
    # 设置根目录可写
    allow_writeable_chroot=YES
    
  4. 重启systemctl restart vsftpd
  5. 本机测试ftp XX.XX.XX.XX 成功

有可能影响连接的问题

pam认证

可根据情况注释

  • auth required pam_shells.so: 仅允许用户的shell是 /etc/shells文件内的shell,才能登录
  • auth required pam_listfile.so:/etc/ftpusers 中的用户禁止登陆
# cat /etc/pam.d/vsftpd
#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth

selinux策略

安全增强模块,根据情况修改

  • ftpd_full_access :影响创建新目录等
  • tftp_home_dir:影响ftp根目录访问等
setsebool -P tftp_home_dir 1
setsebool -P ftpd_full_access 1
systemctl restart vsftpd
# sestatus -b | grep ftp
ftpd_anon_write                             off
ftpd_connect_all_unreserved                 off
ftpd_connect_db                             off
ftpd_full_access                            on
ftpd_use_cifs                               off
ftpd_use_fusefs                             off
ftpd_use_nfs                                off
ftpd_use_passive_mode                       off
httpd_can_connect_ftp                       off
httpd_enable_ftp_server                     off
tftp_anon_write                             off
tftp_home_dir                               on

被动模式

pasv_enable=YES
pasv_min_port=31000
pasv_max_port=31999

防火墙

firewall-cmd --zone=public --add-port=31000-31999/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports

ipv4和ipv6

默认ipv6,可修改为ipv4配置

listen=YES
listen_ipv6=NO

报错

1、 530 Login incorrect

  • 确认用户账密无误

  • 网上的pam_service_name=vsftpd方法无效

  • 查看/etc/pam.d/vsftpd文件,对以下两条要求进行排查,我的用户是/sbin/nologin,不在/etc/shells范围内。

    • auth required pam_shells.so: 仅允许用户的shell是 /etc/shells文件内的shell,才能登录
    • auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed:/etc/ftpusers 中的用户禁止登陆
    [root@localhost vsftpd]# cat /etc/pam.d/vsftpd
    #%PAM-1.0
    session    optional     pam_keyinit.so    force revoke
    auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
    auth       required     pam_shells.so
    auth       include      password-auth
    account    include      password-auth
    session    required     pam_loginuid.so
    session    include      password-auth
    [root@localhost vsftpd]# cat /etc/shells
    /bin/sh
    /bin/bash
    /usr/bin/sh
    /usr/bin/bash
    
    • 方案一:可以修改/etc/pam.d/vsftpd注释掉 auth required pam_shells.so
    • 方案二:修改用户登录属性,usermod -s /bin/bash ftptest
  • 重启验证,该报错解决,但登录时出现先报错500 OOPS: vsftpd: refusing to run with writable root inside chroot(),见下条

2、500 OOPS: vsftpd: refusing to run with writable root inside chroot()

原因:安装的最新版本,增加了对配置错误的强制检查,要求根目录不可写

Add stronger checks for the configuration error of running with a
writeable root directory inside a chroot(). This may bite people who
carelessly turned on chroot_local_user but such is life.

  • 方案一:配置文件设置allow_writeable_chroot=YES
  • 方案二:设置ftptest用户根目录不可写chmod a-w ftptest

3、227 Entering Passive Mode (10,1,58,5,242,166). ftp: connect: 没有到主机的路由

描述:本机ftp测试没问题;内网其他服务器ftp登陆成功,但执行ls等命令报错
原因:被动模式端口问题

  • 方案一:登录后,输入passive,关掉被动模式
    ftp> passive
    Passive mode off.
    ftp> ls
    200 PORT command successful. Consider using PASV.
    150 Here comes the directory listing.
    drwxrwxrwx    2 0        0               6 Jun 09  2021 pub
    drwxr-xr-x    2 1001     1001            6 Feb 20 06:05 test
    226 Directory send OK.
    
  • 方案二:配置文件设置被动模式,并开放防火墙端口31000-31999
    配置
    pasv_enable=YES
    pasv_min_port=31000
    pasv_max_port=31999
    
    防火墙
    firewall-cmd --zone=public --add-port=31000-31999/tcp --permanent
    firewall-cmd --reload
    firewall-cmd --zone=public --list-ports
    

4、425 Failed to establish connection. Error EElFTPSError: Control channel transfer error 114690

描述:内网正常,外网登陆成功但执行其他命令失败
原因:防火墙添加端口后,未firewall-cmd --reload使其生效

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

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

相关文章

day41WEB 攻防-通用漏洞XMLXXE无回显DTD 实体伪协议代码审计

本章知识点: 1 、 XML&XXE- 原理 & 发现 & 利用 & 修复等 2 、 XML&XXE- 黑盒模式下的发现与利用 3 、 XML&XXE- 白盒模式下的审计与利用 4 、 XML&XXE- 无回显 & 伪协议 & 产生层面 配套资源(百度网盘&#x…

飞天使-linux操作的一些技巧与知识点7-devops

文章目录 简述devopsCICD 简述devops 让技术团队,运维,测试等团队实现一体式流程自动化 进阶版图 CICD 持续集成, 从编译,测试,发布的完成自动化流程 持续交付,包含持续集成,并且将项目部署…

C#之WPF学习之路(3)

目录 布局控件 布局控件概述 Panel基类 Grid控件(网格布局) 一、左右排列 二、上下排列 三、上下左右排列 四、跨列排列 五、固定列宽 六、调整行高和列宽 七、Grid显示网格线 总结 UniformGrid控件(均分布局) Stac…

代码随想录Day60 | 647. 回文子串 647. 回文子串

代码随想录Day60 | 647. 回文子串 647. 回文子串 647.回文子串516.最长回文子序列 647.回文子串 文档讲解:代码随想录 视频讲解: 动态规划,字符串性质决定了DP数组的定义 | LeetCode:647.回文子串 状态 dp数组 dp[i][j] 表示字符串…

c++逻辑值bool使用介绍

在 C 中,bool 是一种基本数据类型,用于表示逻辑值,取值为 true 或 false。bool 类型通常用于条件判断和逻辑运算,是 C 中非常重要的数据类型之一。 以下是关于 bool 类型的详细介绍: 定义和赋值: bool i…

Vue v-for、v-if、v-show常见问题

vue使用v-for遍历对象时,是按照什么顺序遍历的?如何保证顺序? 会先判断对象是否存在iterator接口,如果有循环执行next()方法。 没有iterator的情况下,会调用Object.Keys()方法,在不同的浏览器中&#xff…

Ansible-Tower web界面管理安装

Ansible-Tower web界面管理安装 Ansible-Tower 介绍 Ansible-Tower(之前叫做awx)是将ansible的指令界面化,简明直观,简单易用。Ansibke-tower其实就是一个图形化的任务调度,复杂服务部署,IT自动化的一个管…

有哪些适合程序员做的副业?

如果你经常玩知乎、看公众号(软件、工具、互联网这几类的)你就会发现,好多资源连接都变成了夸克网盘、迅雷网盘的资源链接。 例如:天涯神贴,基本上全是夸克、UC、迅雷网盘的资源链接。 有资源的前提下,迅雷…

pytorch建模的三种方式

# 可以使用以下3种方式构建模型: # # 1,继承nn.Module基类构建自定义模型。 # # 2,使用nn.Sequential按层顺序构建模型。 # # 3,继承nn.Module基类构建模型并辅助应用模型容器进行封装(nn.Sequential,nn.ModuleList,nn.ModuleDict…

泛微e-office系统敏感信息泄露漏洞

声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任 1、系统简介 泛微e-office系统是标准、易用、快速部署上线的专业协同OA软…

jackson、gson、fastjson和json-lib四种主流json解析框架对比

一、四种框架的介绍和对比 在Java中,Jackson、Gson、Fastjson和json-lib都是流行的JSON解析框架,它们各自有一些特点和优势。下面是对它们进行简要介绍和对比: 1.1 介绍 1) Jackson: Jackson是由FasterXML开发的一个高性能的J…

01VScode开发stm32环境搭建

title: VScode开发stm32环境搭建 tags: STM32vscode 1.准备工作 1.下载并安装VSCODE 在百度上搜索vscode记住一定要是官方的 不然你自己就是在给自己下毒2345全来了 打红圈一定要有不然就是在垃圾网站上下的 VSCode下载链接 选一个适合你的      安装正常流程走就行不再…

Kafka生产常见问题分析与总结

Kafka生产常见问题分析与总结 消息丢失 生产者 acks 0 不需要等待任何Broker确认收到消息的回复就可以继续发消息 性能最高,但是最容易丢消息,对于数据丢失不敏感的场景可以使用,如大数据统计报表 acks 1 只要等待Broker中的leader成功写…

入侵检测系统的设计与实现

入侵检测系统(Intrusion Detection System,简称IDS)是一种能够监视网络或计算机系统活动的安全工具,旨在识别并响应可能的恶意行为或安全事件。这些事件可能包括未经授权的访问、恶意软件、拒绝服务攻击等。入侵检测系统通过不同的…

高并发Server的基石:reactor反应堆模式

业务开发同学只关心业务处理流程。但是我们开发的程序都是运行服务端server上,服务端server接收到IO请求后,是如何处理请求并最终进入业务流程的呢?这里不得不提到reactor反应堆模型。nginx tomcat redis nodejs dubbo等软件的网络处理模型都…

JS进阶——一些常用的字符串方法

charAt(index): 返回在指定位置的字符。 const str "Hello"; console.log(str.charAt(1)); // 输出 "e" concat(string2, string3, ..., stringX): 连接两个或更多字符串,并返回新的字符串。 const str1 "Hello"; const str2 …

SwiftUI 支持拖放功能的集合视图(Grid)如何捕获手指按下并抬起这一操作

功能需求 假设我们开发了一款 SwiftUI 应用,其中用户可以通过拖放 Grid 中的 Cell 来完成一些操作。现在,我们希望用户在某个 Cell 被按下并随后抬起手指时得到通知,这能够实现吗? 如上图所示,我们准确地捕获到了手指在 Grid 的 Cell 上按下再抬起这一操作!那么它是如何…

R语言【BIEN】——BIEN_occurrence_species():从BIEN中提取指定物种的观察数据

Package BIEN version 1.2.6 Description BIEN_occurrence_species()从BIEN数据库下载特定物种的观察记录。 Usage BIEN_occurrence_species(species,cultivated FALSE,new.world NULL,all.taxonomy FALSE,native.status FALSE,natives.only TRUE,observation.type FAL…

Linux之ACL访问控制列表

一、ACL权限的介绍 1.1 什么是ACL 访问控制列表(ACL)是一种网络安全技术,它通过在网络设备(如路由器、交换机和防火墙)上定义一系列规则,对进出接口的数据包进行控制。这些规则可以包含“允许”&…

123 Linux C++ 系统编程2 Linux 上安装卸载程序三种方法,linux 下解压缩命令 tar介绍。kill命令,top命令,umask 命令

一 通过命令和网络直接安装 sudo apt-get update sudo apt-get update 的工作就是将自己本地 ubutun的软件列表和 aliyun 的软件列表对比,如不一样,则更新。 sudo apt-get install 软件名 真正的安装 那么这里就有一个问题了, 怎么从aliy…