Advertisement

FTP 服务器 linux安装

阅读量:

文章目录

  • 前言

  • 一、了解

  • 二、安装

    • 启动
    • 匿名连接
  • 三、创建用户

    • 1. 创建系统用户
    • 2. 连接
    • 3. 连接不上? 500
    • 4. 还是连接不上? 500
    • 5. 还还还是连不上?530

补充

复制代码
* vsftpd 配置
* * chroot
  * 禁用匿名登录
  * 日志
  * 黑白名单

前言

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

  • 无法通过ftp建立会话并遇到OOPS异常错误类型
  • 在尝试进行ftp操作时遇到了权限被拒绝的情况
  • 在成功登录后能够导航至父级目录和其他存储位置

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

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

一、了解

二、安装

参考文档:

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

默认几个位置:

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

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

启动

复制代码
    # 查看版本号信息
    vsftpd -v
    # 查看ftp状态
    systemctl status vsftpd
    
    
    shell

匿名连接

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

三、创建用户

1. 创建系统用户

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

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

比如,在此处创建了一个用户账户名为people@123。随后,在这个服务器上就能通过xshell 进行登录操作。即使在useradd命令中没有指定任何相关目录的情况下,默认情况下系统会将该账户引导至home/persons目录下

在这里插入图片描述
在这里插入图片描述

在本系统中,其中 aaa 和 people 是我们系统中定义的系统用户 ,我们可以观察到为这两个用户分别分配了 /home/aaa 和 /home/people 两个家目录。所有操作均已完成:

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

2. 连接

此时创建好的测试账号 can be accessed via shell command, also through xshell to perform xsftp operations, but it's important to note that direct FTP authentication is prohibited.

在这里插入图片描述

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

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

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

之后就能通过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
    
    
    shell

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

在配置文件中加上:

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

记得重启!

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
    
    
    
    shell
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/fWN3QYRcXT9zUHsvaKmSokVFpjOJ.png)

经过检查发现:上传文件的直接父目录属于非根用户的另一个账户。等同于在别人的家中建立一个家庭。

特别提醒:系统用户的家目录中,尤其是 directories with较大的 depth 的情况时需要注意。在这种情况下,默认情况下 parent directory 只能是 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
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/6nVHXb9SwsJFedWOxMfD3IroEA8q.png)

检查发现: 创建用户时候,关联了错误的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
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/vg63MOlNAQ4VzXFeowCZHDG1x9mJ.png)

请特别注意:首先确认你所在的系统上是否允许使用shell作为用户的登录方式;具体来说,请确保你的shell类型是系统允许使用的shell类型(即那些能够作为用户的登录shell)。当你的Shell不在/ etc/ sh shells文件夹内时,请确保你的Shell配置正确以便能够正常启动。

过去用户采用的是位于/sbin目录中的-nologin脚本文件,并非属于本系统的支持性工具;实际上应当使用/usr/bin目录下的-nologin脚本文件来实现正确配置。

补充

关于创建用户

创建系统用户 默认家目录

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

d : 表示一个目录 (directory) 。
rwx : 是文件的所有者所拥有的三种基本操作 (Read, Write, Execute) 。这三种操作分别对应于可读、可写、可执行的状态 。
— : 用于标识所属组的权限 (此处无操作) 。因此没有相应的访问控制 。
— : 用于标识其他用户群体的权限 (此处也无操作) 。同样没有相应的访问控制 。

useradd 命令

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

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

移除用户:

复制代码
    userdel -r aaa
    -r : 同时还删除对应的家目录。
    
    
    shell

如何设置用户不能登录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 路径进行合法性验证. 若用户的 shell 路径不在 /etc/shells 文件夹内, 则将导致该用户无法完成 login 过程.

几种shell 类型的解读:

bin/sh 为标准输入提供交互式Shell解释器 bin/bash 是最常用的Shell脚本执行器,默认启动
usr/bin/sh 和 usr/bin/bash 提供了扩展功能
bin/tcsh 基于复合 Shell 语言设计 bin/csh 基于C Shell语言开发
$usr/bin/nologin 用于阻止用户执行登录操作

不用系统指定的家目录

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

vsftpd 配置

chroot

Within the system vsftpd, commonly known as Very Secure FTP Daemon, chroot stands out as a critical security feature. It was designed to restrict the access of FTP users within a confined scope. The acronym for chroot is '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
    # 允许根目录可写
    
    
    
    shell
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/gtPOuFwQ9C5k6lKesz0V38LGcaTY.png)

禁用匿名登录

复制代码
    anonymous_enable=NO
    
    为了安全,最好禁用
    
    
    c

日志

黑白名单

因为默认情况下, FTP 连接的用户属于系统账户, 通常不允许所有系统账户都能登录 FTP 服务器. 这里可以通过将这些本地账户添加到白名单中, 从而仅允许指定的本地账户进行 FTP 连接.

复制代码
    userlist_enable=YES
    userlist_deny=NO
    userlist_file=/etc/vsftpd/user_list   # 在这里设置白名单
    
    
    shell

全部评论 (0)

还没有任何评论哟~