FTP 服务器 linux安装

news2024/11/18 1:41:09

文章目录

  • 前言
  • 一、了解
  • 二、安装
    • 启动
    • 匿名连接
  • 三、创建用户
    • 1. 创建系统用户
    • 2. 连接
    • 3. 连接不上? 500
    • 4. 还是连接不上? 500
    • 5. 还还还是连不上?530
  • 补充
    • 关于创建用户
      • useradd 命令
      • 如何设置用户不能登录shell
      • 不用系统指定的家目录
    • vsftpd 配置
      • chroot
      • 禁用匿名登录
      • 日志
      • 黑白名单


前言

提示:这里可以添加本文要记录的大概内容:

  • ftp 连接失败:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
  • ftp 连接失败:530 permission denied
  • ftp 连接成功,但是能访问到上级目录和其他目录

提示:以下是本篇文章正文内容,下面案例可供参考

注意: 以下全部操作都是基于 SELinux= disable、防火墙关闭

一、了解

二、安装

参考文档: https://blog.csdn.net/DoupeLe/article/details/138261457

# 查询是有安装ftp
rpm -qa|grep vsftpd
# 卸载 vsftpd
yum remove vsftpd
# yum安装ftp
yum install -y vsftpd

默认几个位置:

配置文件 :/etc/vsftpd
根目录: /var/ftp
日志: /var/log/vsftpd.log

注意: 这里的yum 卸载会有遗留,最好去各主要文件夹下确认一下。

启动

# 查看版本号信息
vsftpd -v
# 查看ftp状态
systemctl status vsftpd

匿名连接

默认情况下是允许匿名连接的,进入后的根目录就是 /var/ftp

三、创建用户

1. 创建系统用户

[root@localhost vsftpd]# useradd people -s /bin/bash
[root@localhost vsftpd]# echo 123456 | passwd --stdin people
更改用户 aaa 的密码 。
passwd:所有的身份验证令牌已经成功更新。

注意,这个people 账户 指系统(linux)的用户账户哦。和 ftp 没有任何关系

比如,我这里创建了一个用户 people people@123。之后,people就可以通过xshell 登录到这个服务器了
并且,虽然我没有在useradd 的时候指定任何关联路径,但是这时候就默认登录后就到了 home/people 中了。

在这里插入图片描述

在这里插入图片描述

这里,aaa 和 people 都是我们创建的系统用户,可以看到分配了 /home/aaa 和 /home/people 两个家目录。
并且统一完成了:

# 家目录所有者
 chown -R username:username /home/username
# 家目录权限 用户 rwx
 chmod 700 /home/username

2. 连接

此时创建好的用户 test ,可以shell 登录,也可以xshell -> xsftp ,但是 不能走 ftp协议登录

在这里插入图片描述

还 需要vsftp(/etc/vsftpd/vsftpd.conf)保证如下配置

   # ☆☆☆☆☆☆ 允许本地用户登录(默认开启)。vsftpd 的“本地用户”指的是所在系统的用户,即在 Linux 系统中通过 useradd 命令或其他用户管理工具创建的用户
   local_enable=YES
   
   # ☆☆☆☆☆☆ 用户登录ftp后,只能到自己的家目录下,不能随便切换到其它目录。
   chroot_local_user=YES
   

修改配置文件后一定要重启!

之后就能通过ftp 连接了。

3. 连接不上? 500

我们在本地测试一下ftp localhost,发现登录失败:

在这里插入图片描述

原因: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
解释: 新版本的vsftp(我这里是3.0.2-28)针对用户安全性进行了升级使,用户被锁定的 chroot 目录不可写,防止安全漏洞
由此衍生出了两种解决方法:
(1)既然说家目录不能有写权限,那我就去掉好了。当然前提是本身没有写业务

dr-xr-x---
 
chmod 550 /home/test

(2) 如果你非写不可,那就只有修改ftp 服务器的规则了

在配置文件中加上:

# 允许在锁定用户家目录 (chroot) 的情况下保留用户的写权限
allow_writeable_chroot=YES

记得重启!

4. 还是连接不上? 500

[root@localhost var]# ftp localhost
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): ftpuser
331 Please specify the password.
Password:
500 OOPS: cannot change directory:/home/pheno/camera/dist/manage/upload
Login failed.
421 Service not available, remote server has closed connection

检查发现,因为 这个 upload 的上上级目录是属于非root的另一个用户。相当于,在别人家里建家

这里提醒: 系统用户的家目录,尤其是特别深的情况时,一定要注意,其父级只能属于root,不能为其他非root用户

5. 还还还是连不上?530

[root@localhost var]# ftp localhost
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): test
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.

检查发现: 创建用户时候,关联了错误的shell 命令

[root@localhost var]# cat /etc/shells  
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
/usr/bin/nologin
[root@localhost var]# usermod -s /usr/bin/nologin  test

注意,先确认一下,系统中可接受的 shell 类型,即那些可以被用作用户登录 shell 的 shell。如果用户的 shell 不在 /etc/shells 文件中,那么用户将无法登录。

之前用户创建用的是 -s /sbin/nologin,不是本系统的支持的shell,改成/usr/bin/nologin就可以了。

补充

关于创建用户

创建系统用户 默认家目录

  • 拥有者都是当前用户,
  • 而且权限都是固定的:drwx------ (对应数值的700)

d:表示这是一个目录(directory)。
rwx:表示所有者的权限。 可读、可写、可执行
—:表示所属组的权限。 无权限
—:表示其他用户的权限。 无权限

useradd 命令

现在来详细解释一下这个命令

useradd 【选项】 用户名
-m :  为用户创建家目录,不存在,则自动创建。默认是 /home/用户名
-d :  指定用户家目录  这个家目录最好不要预先存在,最好由系统自动建立
-s :指定用户的登录 shell     -s /bin/bash(普通的默认的)   -s /usr/bin/nologin
注意: 这里能指定的shell,一定要是系统承认的,也就是在/etc/shells 列表中的。

移除用户:

userdel -r aaa
-r : 同时还删除对应的家目录。

如何设置用户不能登录shell

先确认一下,系统中可接受的 shell 类型,即那些可以被用作用户登录 shell 的 shell,如下:

[root@localhost var]# cat /etc/shells  
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
/usr/bin/nologin

当用户尝试登录时,系统会检查用户的 shell 是否合法。如果用户的 shell 不在 /etc/shells 文件中,那么用户将无法登录。

几种shell 类型的解读:

/bin/sh
/bin/bash : 最常用的,默认
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
/usr/bin/nologin : 禁止用户登录

不用系统指定的家目录

 useradd -m -d /path/to/custom/home/directory username
 如果指定的目录不存在,-m 选项会自动创建该目录。

vsftpd 配置

chroot

在 vsftpd(Very Secure FTP Daemon)中,chroot 是一个重要的安全特性,它用于限制 FTP 用户的活动范围
chroot 的全称是 “change root”

chroot_local_user=YES
# 当设置为 YES 时,所有本地用户都会被 chroot 到他们的家目录。这意味着用户登录后只能访问他们的家目录及其子目录

chroot_list_enable=YES
# 如果设置为 YES,那么 vsftpd 会检查 chroot_list_file 指定的文件列表,只有在这个文件列表中的用户才会被 chroot 到指定的目录
chroot_list_file=/etc/vsftpd/chroot_list
# 配合上面的chroot_list_enable ,指定一个包含用户名的文件,其中每个用户行对应一个将被 chroot 的用户
## 注意,如果上面两个都被注释了,表示,任意用户都会被chroot到其根目录。

allow_writeable_chroot=YES
# 允许根目录可写

禁用匿名登录

anonymous_enable=NO

为了安全,最好禁用

日志

黑白名单

因为,默认ftp连接的用户都是系统用户,更多时候并不允许所有的系统用户都可以登录ftp服务器。
这里可以对这些本地用户加入白名单,来限制哪些本地用户可以连接ftp

userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list   # 在这里设置白名单

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

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

相关文章

Python | Leetcode Python题解之第443题压缩字符串

题目&#xff1a; 题解&#xff1a; class Solution:def compress(self, chars: List[str]) -> int:def reverse(left: int, right: int) -> None:while left < right:chars[left], chars[right] chars[right], chars[left]left 1right - 1n len(chars)write lef…

Android15音频进阶之新播放器HwAudioSource(八十六)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+…

面试扩展知识点

1.C语言中分为下面几个存储区 栈(stack): 由编译器自动分配释放堆(heap): 一般由程序员分配释放&#xff0c;若程序员不释放&#xff0c;程序结束时可能由OS回收全局区(静态区): 全局变量和静态变量的存储是放在一块的&#xff0c;初始化的全局变量和静态变量在一块区域&#…

线性表二——栈stack

第一题 #include<bits/stdc.h> using namespace std; stack<char> s; int n; string ced;//如何匹配 出现的右括号转换成同类型的左括号&#xff0c;方便我们直接和栈顶元素 char cheak(char c){if(c)) return (;if(c]) return [;if(c}) return {;return \0;/…

MySQL 高级 - 第十五章 | MySQL 事务日志

目录 第十五章 MySQL 事务日志15.1 redo 日志15.1.1 为什么需要 redo 日志15.1.2 redo 日志的优点与特点15.1.3 redo 的组成15.1.4 redo 的整体流程15.1.5 redo log 的刷盘策略15.1.6 不同刷盘策略演示15.1.7 写入 redo log buffer 过程15.1.8 redo log file 15.2 undo 日志15.…

lombok详细教程(详解)

Lombok 极速上手 此笔记来自于b站白马 背景 ⚠️ 开始学习Lombok前至少需要保证完成 JavaSE 课程中的注解部分&#xff0c;本课程采用的版本为 Java17 我们发现&#xff0c;在以往编写项目时&#xff0c;尤其是在类进行类内部成员字段封装时&#xff0c;需要编写大量的 get…

看480p、720p、1080p、2k、4k、视频一般需要多大带宽呢?

看视频都喜欢看高清&#xff0c;那么一般来说看电影不卡顿需要多大带宽呢&#xff1f; 以4K为例&#xff0c;这里引用一位网友的回答&#xff1a;“视频分辨率4092*2160&#xff0c;每个像素用红蓝绿三个256色(8bit)的数据表示&#xff0c;视频帧数为60fps&#xff0c;那么一秒…

基于微信小程序爱心领养小程序设计与实现(源码+参考文档+定制开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

excel统计分析(5): 非线性回归分析

非线性回归模型分类 非线性回归分析和预测模型包括&#xff1a;指数、对数、幂函数、多项式等。 &#xff08;1&#xff09;指数回归模型 指数回归模型适用于因变量随自变量的增加而迅速增长或减少的情况。 Yβ0⋅e^(β1⋅X) 其中&#xff0c;e是自然对数的底数&#xff0c;…

锐捷 NBR 1300G路由器 越权CLI命令执行漏洞

漏洞描述 锐捷NBR 1300G路由器 越权CLI命令执行漏洞&#xff0c;guest账户可以越权获取管理员账号密码 漏洞复现 FOFA title"锐捷网络 --NBR路由器--登录界面" 请求包 POST /WEB_VMS/LEVEL15/ HTTP/1.1 Host: Connection: keep-alive Content-Length: 73 Autho…

[SAP ABAP] SELECTION-SCREEN

SELECTION-SCREEN用来调节系统生成的画面 REPORT z437_test_2024.TABLES: mara, zdbt_sch_437.SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. " Title1 PARAMETERS:p_1 DEFAULT A,p_2 TYPE char10. SELECTION-SCREEN END OF BLOCK b1.SELECTION-SCREEN …

深入理解同步和异步与reactor和proactor模式

在现代网络编程中&#xff0c;I/O 设计模式对于提高性能和资源利用率至关重要。本文将探讨两种主要的网络 I/O 设计模式&#xff1a;同步 I/O 和异步 I/O&#xff0c;以及它们的实现方式。 同步 I/O 同步 I/O 模式要求用户通过系统调用函数&#xff0c;如 read(), write(), c…

Win10系统使用mstsc远程电脑的时候发现隔一段时间就无法使用剪贴板_rdpclip---Windows运维工作笔记055

最近在使用温湿系统的远程桌面功能的时候发现,每当使用一段时间的时候,这个时候远程桌面功能的粘贴板就没办法使用了。 正常情况下,不管我一个电脑远程了多少台电脑,那么这些电脑之间都是可以使用粘贴板的,可以用来从一个电脑中截了图,然后粘贴到另一个电脑中。 但是现…

【C++笔试强训】如何成为算法糕手Day6

学习编程就得循环渐进&#xff0c;扎实基础&#xff0c;勿在浮沙筑高台 循环渐进Forward-CSDN博客 目录 循环渐进Forward-CSDN博客 第一题&#xff1a;大数加法 思路&#xff1a; 第二题&#xff1a;链表相加 思路&#xff1a; 第三题&#xff1a;大数乘法 思路&#xf…

第五十八周周报 FE-GNN

文章目录 week58 FE-GNN摘要Abstract一、大数据相关1. 完全分布式zookeeper2. 污水处理过程2.1 污水处理的基本方法2.2 污水处理基本工艺流程 二、文献阅读1. 题目2. Abstract3. 文献解读3.1 Introduce3.2 创新点 4. 网络框架4.1 特征子空间平坦化4.2 结构化主成分4.3 结论 5. …

class 027 堆结构常见题目

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。 这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐. https://space.bilibili.com/8888480?spm_id_f…

C++入门基础知识88(实例)——实例13【求一个数的阶乘】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于求一个数的阶乘的相关内容&#xff01; …

Oracle Data Guard备库清理归档脚本

1 说明 我们知道在Oracle Data Guard架构中归档模式是必须打开的&#xff0c;主库将日志传输到备库&#xff0c;最终存放到备库的归档日志文件中。随着系统的运行&#xff0c;归档日志文件会不断累积&#xff0c;如果不及时清理&#xff0c;则会造成归档空间被写满&#xff0c…

进程的那些事--实现shell

目录 前言 一、预备知识 二、实现步骤 1.思路 2.实现 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 学习的本质就是变现 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、预备知识 char * fgets ( char * str, i…

Qt开发技巧(十)新版随机数,模拟鼠标移动,QTextEdit卡死问题,函数返回值,参数结构化,选项卡控件,窗体属性

继续讲一些Qt开发中的技巧操作&#xff1a; 1.新版随机数 Qt中有自己的随机数取值方法&#xff0c;Qt5.10以前使用qsrand方法&#xff0c; Qt5.10以后提供了新的类 QRandomGenerator QRandomGenerator64 管理随机数&#xff0c;使用更方便&#xff0c;尤其是取某个区间的随机数…