首页 > 系统相关 >文件系统 FTP Ubuntu 安装入门介绍

文件系统 FTP Ubuntu 安装入门介绍

时间:2024-08-03 16:27:39浏览次数:16  
标签:FTP ftp 端口 文件系统 vsftpd File Ubuntu 服务器

文件服务系列

文件存储服务系统(File Storage Service System)-00-文件服务器是什么?为什么需要?

文件存储服务系统(File Storage Service System)-01-常见的文件协议介绍

文件系统 FTP Ubuntu 安装入门介绍

文件存储服务系统(File Storage Service System)-02-SFTP 协议介绍

分布式文件服务系统(Distributed File System, DFS)-00-分布式文件服务系统是什么?

分布式存储系统-01-minio 入门介绍

分布式存储系统-02-开源的分布式文件系统 Fastdfs 安装入门介绍

分布式存储系统-03-ceph 一个可扩展的分布式存储系统介绍

分布式存储系统-04-GlusterFS 是一个基于对象的开源分布式文件系统,适用于云存储和媒体流等场景

分布式存储系统-05-Lustre 是一个高性能的分布式文件系统,主要用于大型超级计算机集群

分布式存储系统-06-MooseFS 是一个开源的分布式文件系统,设计用于提供高可靠性和扩展性

分布式存储系统-07-OpenAFS 是 Andrew File System 的开源实现,是一个分布式网络文件系统

分布式存储系统-08-OrangeFS 是 PVFS 的下一代版本,是一个面向高性能计算的开源并行文件系统

FTP

环境: Ubuntu 14.04

blog zh_CN

ubuntu14.04

  • Install
全新安装:apt-get install vsftpd
重新安装:apt-get --reinstall install vsftpd
卸载并清除配置文件:apt-get --purge remove vsftpd
  • Start & Restart
$   service vsftpd start
$   service vsftpd restart

注意:

网上文章很多有提及/etc/init.d/vsftpd start 之类的启动方式。但是这个目录下我不存在 vsftpd. 这个目录确实有: /etc/init/vsftpd.conf

vsftpd 已經進化為 Upstart job
設定檔放在
/etc/init/vsftpd.conf
  • Create ftp user

1.此用户只是用来使用ftp服务的
2.此用户不可登录服务器
3.此用户不能访问ftp指定文件夹之外的文件

(1) 创建一个用户ftp0

useradd -d /home/ftp0 -m ftp0

(2) 修改ftp0的密码

passwd ftp0
  • Config /etc/vsftpd.conf
anonymous_enable=NO         # 不允许匿名访问
write_enable=YES            # 允许写
local_enable=YES            # 允许本地主机访问
chroot_local_user=YES       # 只能访问自身的目录,此处有坑,需加上下面一行

报错误信息:

“500 OOPS: vsftpd: refusing to run with writable root inside chroot()”

从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。

(1) 启用了chroot的话,根目录要设置为不可写

chmod a-w /home/ftp0

(2) 或者添加一句话

allow_writeable_chroot=YES #允许写自身的目录

可是添加这句话可能会导致服务重启失败。。。

无奈之下。。。chroot_local_user=YES这句话暂时不加。

  • 让用户不能登录
$   usermod -s /sbin/nologin ftp0

after all these, restart the ftp service:

# service vsftpd restart
vsftpd stop/waiting
vsftpd start/pre-start, process 10305
# service vsftpd status
vsftpd start/running, process 10305
  • Test
# ftp
ftp> open 192.168.2.108
Connected to 192.168.2.108.
220 (vsFTPd 3.0.2)
Name (192.168.2.108:hbb): ftp0
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.

需要 vi /etc/shells, 最后一行添加:

/sbin/nologin

重新测试:

# ftp
ftp> open 192.168.2.108
Connected to 192.168.2.108.
220 (vsFTPd 3.0.2)
Name (192.168.2.108:hbb): ftp0
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

21 端口查看:

netstat -npltu | grep 21
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      11398/vsftpd

Ftp Java code

  • Java 测试代码
package com.ryo.ftp;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

import java.io.File;
import java.io.FileInputStream;

/**
 * @author houbinbin
 * @on 17/1/1
 */
public class FTPTest {

    private FTPClient ftp;

    /**
     * @param path     上传到ftp服务器哪个路径下
     * @param addr     地址
     * @param port     端口号
     * @param username 用户名
     * @param password 密码
     * @return
     * @throws Exception
     */
    private boolean connect(String path, String addr, int port, String username, String password) throws Exception {
        boolean result = false;
        ftp = new FTPClient();
        int reply;
        ftp.connect(addr, port);
        ftp.login(username, password);
        ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
        reply = ftp.getReplyCode();
        if (!FTPReply.isPositiveCompletion(reply)) {
            ftp.disconnect();
            return result;
        }
        ftp.changeWorkingDirectory(path);
        result = true;
        return result;
    }

    /**
     * @param file 上传的文件或文件夹
     * @throws Exception
     */
    private void upload(File file) throws Exception {
        if (file.isDirectory()) {
            ftp.makeDirectory(file.getName());
            ftp.changeWorkingDirectory(file.getName());
            String[] files = file.list();
            for (int i = 0; i < files.length; i++) {
                File file1 = new File(file.getPath() + "\\" + files[i]);
                if (file1.isDirectory()) {
                    upload(file1);
                    ftp.changeToParentDirectory();
                } else {
                    File file2 = new File(file.getPath() + "\\" + files[i]);
                    FileInputStream input = new FileInputStream(file2);
                    ftp.storeFile(file2.getName(), input);
                    input.close();
                }
            }
        } else {
            File file2 = new File(file.getPath());
            FileInputStream input = new FileInputStream(file2);
            ftp.storeFile(file2.getName(), input);
            input.close();
        }
    }

    //测试即使指定其他用户的文件夹,还要没有写的权限也无法上传。
    public static void main(String[] args) throws Exception {
        FTPTest t = new FTPTest();
        t.connect("/home/ftp0/", "192.168.2.108", 21, "ftp0", "123456");
        File file = new File("/Users/houbinbin/Downloads/ftptest.txt");
        t.upload(file);
    }

}

chat

详细介绍一下 FTP 协议

FTP(File Transfer Protocol)是用于在网络上进行文件传输的标准协议。

它是应用层协议,使用 TCP 端口 21 进行通信,主要用于在客户端和服务器之间上传、下载和管理文件。以下是对 FTP 协议的详细介绍:

FTP 协议概述

工作原理

FTP 协议采用客户端-服务器架构,主要涉及两个通信通道:

  1. 控制连接:用于传输控制信息(如命令和响应),使用 TCP 端口 21。
  2. 数据连接:用于传输实际的文件数据,使用 TCP 端口 20 或动态分配的端口。

传输模式

FTP 有两种传输模式:

  1. 主动模式(Active Mode)

    • 客户端通过随机的高位端口连接到服务器的控制端口(21)。
    • 客户端在传输数据时告诉服务器监听一个随机高位端口。
    • 服务器从其数据端口(20)连接到客户端指定的高位端口进行数据传输。
  2. 被动模式(Passive Mode)

    • 客户端通过随机的高位端口连接到服务器的控制端口(21)。
    • 客户端请求服务器进入被动模式,服务器选择一个随机高位端口并告知客户端。
    • 客户端从其随机高位端口连接到服务器的该随机高位端口进行数据传输。

FTP 命令和响应

常见 FTP 命令

  • USER:提供用户名
  • PASS:提供密码
  • CWD:改变工作目录
  • PWD:打印工作目录
  • LIST:列出文件和目录
  • RETR:下载文件
  • STOR:上传文件
  • DELE:删除文件
  • QUIT:退出会话

常见 FTP 响应代码

  • 1xx:积极的初始答复(如150,表示文件状态良好,准备打开数据连接)
  • 2xx:成功(如200,表示命令成功)
  • 3xx:需要进一步的信息(如331,表示用户名正确,需要密码)
  • 4xx:暂时的负面答复(如421,表示服务不可用,关闭控制连接)
  • 5xx:永久的负面答复(如530,表示未登录)

安全性

传统的 FTP 协议没有加密机制,传输的数据和凭证都是以明文形式发送的,这会导致安全风险。因此,衍生出了以下更安全的版本:

  1. FTPS(FTP Secure/SSL):通过 SSL/TLS 对 FTP 连接进行加密。
  2. SFTP(SSH File Transfer Protocol):虽然名称相似,但 SFTP 是基于 SSH 的完全独立的协议,提供加密的数据传输。

使用场景

  • 文件共享:FTP 服务器可用于在组织内部或与客户之间共享大文件。
  • 网站管理:许多网站管理员使用 FTP 来上传和管理网站文件。
  • 数据备份:FTP 可用于将数据备份到远程服务器。

FTP 的优缺点

优点

  • 简单:易于实现和使用。
  • 跨平台:广泛支持各种操作系统和设备。
  • 效率高:传输大文件时性能较好。

缺点

  • 不安全:传统的 FTP 缺乏加密机制,容易被攻击。
  • 防火墙问题:主动模式和被动模式的连接建立可能会被防火墙阻止。
  • 过时:相对于现代文件传输协议,FTP 的功能和安全性不足。

相关工具

  • FTP 客户端:FileZilla、WinSCP、Cyberduck 等。
  • FTP 服务器:vsftpd、ProFTPD、FileZilla Server 等。

结论

FTP 协议作为一种古老而广泛使用的文件传输协议,尽管在现代安全要求下显得不够完善,但在一些场景中仍然非常有用。

对于需要更高安全性的场景,可以选择 FTPS 或 SFTP 等替代方案。

标签:FTP,ftp,端口,文件系统,vsftpd,File,Ubuntu,服务器
From: https://www.cnblogs.com/houbbBlogs/p/18340681

相关文章

  • Jetson Orin Nano安装(烧录)Ubuntu22.04.4LTS
    1、准备材料JetsonOrinNano(8GB)外设(键盘、屏幕、鼠标、网线、电源适配器)主机(也可以是虚拟机,只要是ubuntu系统就可以)2、下载SDKmanger下载地址:JetPackSDK|NVIDIA开发者进入下载位置并解压:cdDownloads/sudodpkg-isdkmanager_2.1.0-11682_amd64.deb第一次解压......
  • Ubuntu22.04 + Mysql5.7 + Docker + 主备复制方案
    同时运行两个MySQL5.7容器。这种方式可以实现数据库的主-备复制架构,提高系统的可靠性。下面是一个示例,演示如何运行两个MySQL5.7容器,一个作为主节点,一个作为备节点:1.运行主MySQL容器:sudodockerrun-d\--namemysql-57-master\--restart=always\......
  • Ubuntu 22.04 阿里云镜像仓库管理
    参考地址https://cr.console.aliyun.com/repository/cn-hangzhou/xuankang/xiaochengxu/details公网地址registry.cn-hangzhou.aliyuncs.com/xuankang/xiaochengxu专有网络registry-vpc.cn-hangzhou.aliyuncs.com/xuankang/xiaochengxu经典网络registry-internal.cn-hangzhou.ali......
  • Ubuntu 22.04 Git 代码维护
    1.国内git托管代1.1Gitee(码云):是一个由开源中国推出的代码托管平台,提供了类似于GitHub的功能,如代码管理、项目协作等。1.2Coding:由腾讯推出的一个开发者平台,提供Git代码托管、持续集成、项目管理等功能。1.3GitLabChina:这是GitLab在中国的本地化服务,提供Git......
  • Ubuntu 22.04 + Pycharm + Flask 配置 Flask 项目
    1.安装Flask及相关依赖在虚拟环境中安装Flask和MySQL相关的库:pipinstallFlaskFlask-MySQLdb2.创建Flask项目结构创建一个基本的Flask项目结构:mkdirmy_flask_appcdmy_flask_appmkdirapptouchapp/__init__.pyapp/routes.py3.配置Fla......
  • Ubuntu20.04 + Mysql8.0安装
    1.安装MySQL8.0sudoaptupdatesudoapt-getinstallsoftware-properties-commonsudoapt-getinstallwgetwget-chttps://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.debsudodpkg-imysql-apt-config_0.8.22-1_all.debsudoapt-getinstallmysql-server......
  • Ubuntu22.04 + 阿里云Docker安装及镜像加速
    1.docker安装1.1阿里云方式安装(https://developer.aliyun.com/article/110806)使用官方安装脚本自动安装(仅适用于公网环境)curl-fsSL https://get.docker.com |bash-sdocker--mirrorAliyun手动安装帮助(阿里云ECS可以通过内网安装,见注释部分内容)Ubuntu14.0416.0......
  • 从头装一台 ubuntu 电脑你需要什么?
    1.首先是硬件:cpu:12600kfpdd盒装1040gpu:306012g咸鱼1600主板:华擎z690pg4d5pdd760内存:阿斯加特海拉DDR56400pdd603固态:Ti6001Tpdd434机箱:先马朱雀jd178cpu散热:利民PA120pdd155电源:玄武550v4pdd190合计:4960其中,机箱、显卡都是以前的2.......
  • 轻松搞定 Nginx 在 CentOS 和 Ubuntu 上的安装与配置
    注:这是对我以前博客进行优化后再次发布的,博客中的截图为以前的。原博客已删除。如何安装nginxnginx是一款开源、高性能的Web和反向代理服务器,支持HTTP、HTTPS、SMTP、POP3和IMAP协议。由于其轻量级、资源占用少和强大的并发能力,nginx广泛用于多种场景。本文将介绍如何在CentOS和......
  • Ubuntu安装jdk17
    1、下载下载地址:wgethttps://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz也可以手动下载传输上去 2、解压tar-zxvf jdk-17_linux-x64_bin.tar.gz 3、修改环境变量exportJAVA_HOME=/home/dingchong/tools/jdk-17.0.12exportCLASSPATH=.:$J......