首页 > 系统相关 >FTP(linux版)

FTP(linux版)

时间:2024-12-24 17:33:29浏览次数:3  
标签:FTP ftp echo etc vsftpd user linux

简述:linux版权限可能会不容易理解,可参考windwos做为基础。

一、FTP(linux版)

1. ftp详解

简介:

vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。

vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。

比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。

vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。

特点:

①vsftpd 是以一般身份启动服务,所以对于 Linux 系统的使用权限较低,对于Linux 系统的危害就相对的减低了。此外, vsftpd 亦利用 chroot() 这个函式进行改换根目录的动作,使得系统工具不会被vsftpd 这支服务所误用;

②任何需要具有较高执行权限的 vsftpd 指令均以一支特殊的上层程序( parent process ) 所控制 ,该上层程序享有的较高执行权限功能已经被限制的相当的低,并以不影响Linux 本身的系统为准;

③所有来自 clients 端,想要使用这支上层程序所提供的较高执行权限之vsftpd 指令的需求,均被视为『不可信任的要求』来处理,必需要经过相当程度的身份确认后,方可利用该上层程序的功能。例如chown(), Login 的要求等等动作;

④此外,上面提到的上层程序中,依然使用 chroot() 的功能来限制使用者的执行权限。

参考:https://www.cnblogs.com/Sungeek/p/10148656.html

课程链接:https://www.bilibili.com/video/BV1s34y1K7Pi?p=58&vd_source=ca87130cb8d9e727a9cfa0f4e9d83456

2. ftp一键搭建脚本

用户管理二次执行即可

默认主配置文件路径:/etc/vsftpd/vsftpd.conf

虚拟用户路径:/etc/vsftpd/vsftpd_user_conf/

改良版,执行安装脚本后,脚本、FTP用户、数据目录均在当前目录下。

#!/bin/bash
# Function :auto install ftp
# Platform :Centos7.9
# Author   :2287
# Contact  :zhp2287@sina.com
# date     :2024-12-24


secript_dir=$(cd $(dirname "$0");pwd)
ftp_data="${secript_dir}"/ftp

chcek_friewalld(){
    echo "开始检查防火墙设置"
    systemctl status firewalld |grep runing & >/dev/null
    if [ $? -ne 0 ]
    then
        firewall-cmd --add-port=21/tcp --zone=public --permanent
        firewall-cmd --add-service=ftp
        firewall-cmd --reload
    fi
    if [ $? -eq 0 ]
    then
        echo "防火墙开启成功"
    fi
    useradd -s /sbin/nologin ftp
}
#搭建ftp
install_vsftp(){
    echo "开始安装vsftp 并且检查环境"
    yum -y install vsftpd libdb-utils
    if [ $? -ne 0 ]
    then
        echo "请检查你的yum源情况,是否出现无法用,可单独在终端执行 yum makecache 测试"
        exit 1
    fi
    #检查防火墙,开放21端口
    chcek_friewalld
    echo "开始配置ftp"
    mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
    #配置数据写入到配置文件

    cat >/etc/vsftpd/vsftpd.conf<<LWT
listen=yes
anonymous_enable=no
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user=yes
guest_enable=YES
guest_username=ftp
user_config_dir=/etc/vsftpd/vsftpd_user_conf
pam_service_name=vsftpd.vu
allow_writeable_chroot=YES
local_enable=YES
use_localtime=YES
LWT

    read -p "输入ftp用户:" ftp_user
    if [ ! -n "$ftp_user" ];then
        ftp_user=test
    fi
    read -p "输入ftp用户密码:" ftp_passwd
    if [ ! -n "$ftp_passwd" ];then
        ftp_passwd=123456
    fi
    cd /etc/vsftpd
    echo $ftp_user >/etc/vsftpd/user.txt
    echo $ftp_passwd >>/etc/vsftpd/user.txt
    db_load -T -t hash -f user.txt vsftpd_login.db
    chmod 600 /etc/vsftpd/vsftpd_login.db
    touch /etc/pam.d/vsftpd.vu
    echo "判断此系统是32位操作系统还是64位"
    #判断centos系统位64位还是32位
    xd=`getconf LONG_BIT`
    if [ $xd  -eq '64' ];then
        echo "此系统为64位"
        echo "auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login" >  /etc/pam.d/vsftpd.vu
        echo "account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login" >> /etc/pam.d/vsftpd.vu
    else
        echo "auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login" > /etc/pam.d/vsftpd.vu
        echo "account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login" >> /etc/pam.d/vsftpd.vu
    fi
    #限制用户切换工作目录
    touch /etc/vsftpd/chroot_list
    echo $ftp_user >>/etc/vsftpd/chroot_list
    #配置虚拟用户的配置文件
    mkdir -p /etc/vsftpd/vsftpd_user_conf
    cd /etc/vsftpd/vsftpd_user_conf
    #写入用户权限配置
    cat >$ftp_user <<LWT
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
LWT
    echo "local_root="$ftp_data/$ftp_user>>$ftp_user
    mkdir -p $ftp_data
    chown -R ftp:root $ftp_data
    chmod o+rw $ftp_data
    mkdir -p $ftp_data/$ftp_user
    chmod -R 777 $ftp_data/$ftp_user
    systemctl restart vsftpd.service
}
#创建虚拟用户
create_user(){
    ftp_passwd=123456
    read -p "输入你要创建的用户名:" ftp_user
    if [ ! -n  "$ftp_user" ];then
        echo "你没有输入用户名,退出"
        exit 1
    else
        read -p "输入密码:" ftp_pass
        if [ ! -n "$ftp_pass" ];then
            echo "密码没有输入,默认123456"
        else
            ftp_passwd=$ftp_pass
        fi
    fi
    cd /etc/vsftpd
    echo $ftp_user >>/etc/vsftpd/user.txt
    echo $ftp_passwd >>/etc/vsftpd/user.txt
    db_load -T -t hash -f user.txt /etc/vsftpd/vsftpd_login.db
    chmod 600 /etc/vsftpd/vsftpd_login.db
    echo $ftp_user >>/etc/vsftpd/chroot_list
    cd /etc/vsftpd/vsftpd_user_conf
    cat >$ftp_user<<LWT
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
LWT
    echo "local_root="$ftp_data/$ftp_user>>$ftp_user
    mkdir -p $ftp_data/$ftp_user
    chmod -R 777 $ftp_data/$ftp_user
}


echo "输入你要操作的内容"
select var in install_vsftpd create_user quit
do

    case $var in
    install_vsftpd)
        install_vsftp;
        ;;
    create_user)
        create_user
        ;;
    quit)
        exit 1
        ;;
    esac
done

参考链接:https://www.cnblogs.com/linyijia/p/13926325.html

3. 性能

24 小时内,vsftpd 已提供 2.6TB(是的,TB 级)数据,同时在线用户数通常超过 1,500。这还是在一台机器上。
alt text

参考:https://security.appspot.com/vsftpd.html#performance

4. 常见问题

4.1 FTP时间戳相差8小时

# 配置文件指定时间,然后重启服务
vim /etc/vsftpd/vsftpd.conf

use_localtime=YES

参考链接:https://blog.csdn.net/weixin_35763513/article/details/119601479

4.2 FTP中文乱码

FTP成功连接服务器后,出现乱码问题,如下图:

image

出现上述问题,一般是编码格式不对,解决办法如下:
1.点击 ftp上面的打开(或者“文件—打开”)按钮,会出现一个打开会话框
2.选中打开会话框中要设置的服务器,点击上面“属性”,会出现一个属性对话框
3.选择属性对话框中的“选项”页,将连接中的“使用UTF-8编码”对话框进行勾选,确定即可。连接成功后即正常显示。

image

参考链接:https://blog.csdn.net/s724842053/article/details/90748948

4.3 FTP删除文件夹失败

要删除FTP服务器上的文件夹时,必须确保文件夹下面没有其他文件,否则会删除失败!

可是,有些服务器考虑到安全等因素,通常会隐藏以点开始的文件名,例如“.test.txt”。于是,有的坏人就往服务器上上传以点开头的文件,我们在删除文件夹时,怎么也删不掉!!!

这时,我们使用FTP文件管理工具,强制显示隐藏的文件,就会发现隐藏的文件(以点开头的文件),删除它们,然后再删除文件夹,Done!

参考:https://blog.csdn.net/dhu86380/article/details/102064932

4.4 FTP软链接无法使用问题

简述:vsftpd本身不支持软连接,而在用FTP共享的时候又不想移动文件位置,这是一个变通方案。
Linux内核从2.4.0开始支持把一部分文件系统挂载到文件系统中的其他位置,mount命令的--bind选项正好提供了这个功能。
可以把需要共享的文件夹media/qfx/Qfx_01/挂载到FTP目录中的一个子目录上/srv/qfxFtp/Q_rmDisk/。这个目录对于vsftpd而言是一个正常文件系统的目录,于是就可以被共享了。当不需要共享目录时,直接umount即可。

mount --bind命令本身支持单个文件的挂载,可以把目标文件挂载到另外一个文件上,起到类似于软链接的功能。同目录的挂载类似,这也是vsftpd支持的。

# 临时挂载
# mount --bind 源目录 目标目录
mount --bind /data1/nginx/secript /data1/ftp/public/secript

###############################################################
# 永久挂载
# none 表示不需要文件系统类型指定。
# bind 指定这是一个绑定挂载。
# 0 0 分别表示不需要进行文件系统检查 (dump) 和启动时的挂载顺序 (pass)
vim /etc/fatab
/data1/nginx/secript /data1/ftp/public/secript none bind 0 0

参考:

https://blog.csdn.net/humanking7/article/details/87898889

https://blog.csdn.net/bianb123/article/details/103495754

4.5 FTP上传文件默认权限

上传文件默认权限本地用户虚拟用户,可单独配置用户上传权限,可以全局定义,所有用户使用同一个权限;

全局配置:即在服务主配置文件修改

局部配置: 在某个用户配置文件中修改

umask详解

当系统创建一个新文件或目录时,它会根据一组默认的权限设置进行,这通常是 666(rw-rw-rw-)对于文件和 777(rwxrwxrwx)对于目录。umask 值用于从这些默认权限中减去权限,从而得到实际的文件或目录权限。

umask 值由三个八进制数字组成,这些数字分别对应于文件所有者(user)、同组用户(group)、其他用户(others)的权限。每个数字的范围是 0 到 7,对应于二进制中的三位,分别表示读(4)、写(2)、执行(1)权限。权限位从默认值中被 umask 指定的位减去。

示例 umask 值

  • umask 022:这是许多系统的默认设置。这意味着所有者具有完全权限(7-0=7),而组用户和其他用户不能写入(7-2=5)。对于文件,这转换为 644(rw-r--r--),对于目录,这转换为 755(rwxr-xr-x)。
  • umask 002:这是在团队环境中常用的设置,允许组内用户编辑文件。这使得组内用户拥有与文件所有者相同的权限,对于文件,结果权限为 664(rw-rw-r--),对于目录,结果为 775(rwxrwxr-x)。

local_umask=000 的含义

在一些配置文件中,例如 FTP 服务器配置,您可能会看到 local_umask=000 的设置。这里的 000 代表没有任何权限被从默认权限中减去。因此:

  • 新创建的文件将具有 666 的权限,即 rw-rw-rw-(因为执行位通常不适用于文件)。
  • 新创建的目录将具有 777 的权限,即 rwxrwxrwx

安全注意事项

umask 设置为 000 是非常开放的设置,它允许所有用户读写执行新文件和目录。这在大多数情况下是不安全的,因为它可能允许非授权用户访问或修改文件。通常,更保守的 umask 值(如 022027)更适合维护系统安全。

# 文件默认权限 644
local_umask=000 # 本地用户
anon_umask=022	# 虚拟用户,当主配置文件和用户配置文件同时配置时,以用户配置为准(理解为全局、局部变量关系)

参考:https://blog.51cto.com/petermis/845000

官网:https://security.appspot.com/vsftpd/vsftpd_conf.html

anon_umask
The value that the umask for file creation is set to for anonymous users. NOTE! If you want to specify octal values, remember the "0" prefix otherwise the value will be treated as a base 10 integer!
Default: 077

chown_upload_mode
The file mode to force for chown()ed anonymous uploads. (Added in v2.0.6).
Default: 0600

4.6 客户端连接

4.7 MAC电脑连接FTP

mac电脑连接FTP客户端默认是无法连接的,记得好像是协议问题,需要在FTP服务器加配置,往往FTP已投产,时间花在这上面也不太值当, 客户端方便又高效同时也便于节点管理,快速解决办法,使用FTP客户端,Filezilla(支持mac电脑)xftp可爱的FTP,当然还有其它很多种,自行选择即可。

参考:https://blog.51cto.com/jayjaydream/5622754

4.8 Filezilla FTP客户端

官网:https://filezilla-project.org/download.php?show_all=1

filezilla 语言设置

要将filezilla设置为简体中文,按照以下步骤进行操作:

  1. 打开FileZilla软件,在顶部菜单中选择Edit(编辑)。
  2. 在下拉菜单中选择Settings(设置)。
  3. 在language(语言)下拉菜单中选chinesesimplified(简体中文)。
  4. 单击0K按钮保存更改。
  5. 重新启动FileZil训la软件,就可以看到界面已经切换为简体中文了。
  6. 在弹出的窗口中,选择interface(界面)选项卡。

注意:如果FileZilla软件没有提供简体中文选项,可能需要下载并安装简体中文语言包才能实现。

参考:https://wenku.csdn.net/answer/0af6e200b4de47dbb45470a25194bd4d

使用参考:https://blog.csdn.net/u011608357/article/details/125016918

二、FTP(windows版)

{{select * from blocks where id='20240108183212-y0kwmba'}}

标签:FTP,ftp,echo,etc,vsftpd,user,linux
From: https://www.cnblogs.com/2287keybord/p/18627835

相关文章

  • 启用Linux防火墙日志记录和分析功能
    防火墙的基本功能是阻止来自可疑网络/来源的连接。它会检查所有连接的源地址、目的地址和端口,并决定是否允许或阻止流量。防火墙的每个操作都会记录为日志数据。监控和分析这些日志对于保护您的网络免受攻击至关重要。要这样做,您需要首先启用日志功能。以下是在Linux防火墙中启用......
  • 【保姆级教程】10分钟搞定Linux安装JDK,小白也能轻松上手!
    本文将详细介绍如何在Linux系统上安装配置JDK环境,包括下载、安装、环境变量配置等全过程。一、准备工作1.1检查系统是否已安装JDKjava-version如果显示"commandnotfound",说明系统中还没有安装JDK。1.2下载JDK安装包访问Oracle官网下载页面:https://www.oracle.com/j......
  • 【RK3588 Linux 5.x 内核编程】-内核IO复用与poll
    内核IO复用与poll文章目录内核IO复用与poll1、IO复用2、Poll的使用2.1用户空间程序中使用Poll2.2在内核空间实现Poll3、驱动程序实现4、用户空间程序实现5、验证让我们假设应用程序想要根据其状态读取/写入许多IO(输入和输出)的情况。在这种情况......
  • Linux上安装和配置Syncthing,实现文件同步
    1、下载最新部署包curl-shttps://api.github.com/repos/syncthing/syncthing/releases/latest|grepbrowser_download_url|greplinux-amd64|cut-d'"'-f4|wget-qi-2、解压并安装tar-xvfsyncthing-linux-amd64-v1.28.1.tar.gzmvsyncthing-linux-amd64-v1.2......
  • Linux通过命令行nmcli工具控制WiFi
    nmcli是NetworkManager提供的命令行工具,它是大多数现代Linux发行版中默认包含的工具,功能非常强大,可以帮助管理网络连接,包括WiFi、以太网等。nmcli不仅可以查看可用的WiFi网络,还支持连接、断开和管理网络设置。安装(大多数发行版默认已安装nmcli):sudoaptinstallnetwor......
  • cs插件CrossC2——上线Linux系统
    介绍一款非常强大的cs插件GitHub-gloxec/CrossC2:generateCobaltStrike'scross-platformpayload,cs的可拓展性非常强大,以后会陆续更新各种插件!下载第一个至第三个加载cna文件,然后会出现下面的图标目前只支持反向的HTTPS连接和正向的TCP连接需要把keys文件复制到C......
  • linux系统load average表示什么
    把loadaverage理解为CPU核心数是错误的,网上以讹传讹.manuptime可见:loadaverage指的是处于task_running或task_uninterruptible状态的进程(或线程)数的平均值.处于task_running状态的进程(或线程),可能正在使用CPU或排队等待使用CPU.处于task_uninterruptible状态的进程(或线......
  • 嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
    此项目是基于人脸识别的考勤系统开发,包括如下模块:1、人脸识别考勤系统GUI界面设计,包括:(1)Qt环境(window环境/linux环境);(2)Qt工程创建分析;(3)Qt基本组件QwidgetQMainWindow,Qdialog,QLineEdit,Qlabel,QPushButton;(4)Qt界面布局,设计人脸识别考勤系统界面搭建;(5)考勤机界面设计(考勤......
  • Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + xlaunch桌面 )
    安装WSL1安装WSL1(1)启用“适用于Linux的Windows子系统”可选功能需要先启用“适用于Linux的Windows子系统”可选功能,然后才能在Windows上安装Linux分发。可以使用命令行的方式,也可以使用图形界面的方式。图形界面方式在【设置->更新与安全->开发者选项】中开......
  • Linux-screen命令
    对于Linux下运行多个程序或服务,使用Screen来启动不同的项目还是挺不错的。(比如说开个Terriria服务器,再开个Minecraft服务器,再跑个SpringBoot后台程序等等)以下只写了最基本的使用安装默认情况下可能是没安装的sudoaptupdatesudoaptinstallscreenScreen指令集screen......