FTP一键安装脚本(linux版)

news/2024/12/28 0:35:11/文章来源:https://www.cnblogs.com/2287keybord/p/18627835

简述: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

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-24secript_dir=$(cd $(dirname "$0");pwd)
ftp_data="${secript_dir}"/ftpchcek_friewalld(){echo "开始检查防火墙设置"systemctl status firewalld |grep runing & >/dev/nullif [ $? -ne 0 ]thenfirewall-cmd --add-port=21/tcp --zone=public --permanentfirewall-cmd --add-service=ftpfirewall-cmd --reloadfiif [ $? -eq 0 ]thenecho "防火墙开启成功"fiuseradd -s /sbin/nologin ftp
}
#搭建ftp
install_vsftp(){echo "开始安装vsftp 并且检查环境"yum -y install vsftpd libdb-utilsif [ $? -ne 0 ]thenecho "请检查你的yum源情况,是否出现无法用,可单独在终端执行 yum makecache 测试"exit 1fi#检查防火墙,开放21端口chcek_friewalldecho "开始配置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
LWTread -p "输入ftp用户:" ftp_userif [ ! -n "$ftp_user" ];thenftp_user=testfiread -p "输入ftp用户密码:" ftp_passwdif [ ! -n "$ftp_passwd" ];thenftp_passwd=123456ficd /etc/vsftpdecho $ftp_user >/etc/vsftpd/user.txtecho $ftp_passwd >>/etc/vsftpd/user.txtdb_load -T -t hash -f user.txt vsftpd_login.dbchmod 600 /etc/vsftpd/vsftpd_login.dbtouch /etc/pam.d/vsftpd.vuecho "判断此系统是32位操作系统还是64位"#判断centos系统位64位还是32位xd=`getconf LONG_BIT`if [ $xd  -eq '64' ];thenecho "此系统为64位"echo "auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login" >  /etc/pam.d/vsftpd.vuecho "account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login" >> /etc/pam.d/vsftpd.vuelseecho "auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login" > /etc/pam.d/vsftpd.vuecho "account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login" >> /etc/pam.d/vsftpd.vufi#限制用户切换工作目录touch /etc/vsftpd/chroot_listecho $ftp_user >>/etc/vsftpd/chroot_list#配置虚拟用户的配置文件mkdir -p /etc/vsftpd/vsftpd_user_confcd /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
LWTecho "local_root="$ftp_data/$ftp_user>>$ftp_usermkdir -p $ftp_datachown -R ftp:root $ftp_datachmod o+rw $ftp_datamkdir -p $ftp_data/$ftp_userchmod -R 777 $ftp_data/$ftp_usersystemctl restart vsftpd.service
}
#创建虚拟用户
create_user(){ftp_passwd=123456read -p "输入你要创建的用户名:" ftp_userif [ ! -n  "$ftp_user" ];thenecho "你没有输入用户名,退出"exit 1elseread -p "输入密码:" ftp_passif [ ! -n "$ftp_pass" ];thenecho "密码没有输入,默认123456"elseftp_passwd=$ftp_passfificd /etc/vsftpdecho $ftp_user >>/etc/vsftpd/user.txtecho $ftp_passwd >>/etc/vsftpd/user.txtdb_load -T -t hash -f user.txt /etc/vsftpd/vsftpd_login.dbchmod 600 /etc/vsftpd/vsftpd_login.dbecho $ftp_user >>/etc/vsftpd/chroot_listcd /etc/vsftpd/vsftpd_user_confcat >$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
LWTecho "local_root="$ftp_data/$ftp_user>>$ftp_usermkdir -p $ftp_data/$ftp_userchmod -R 777 $ftp_data/$ftp_user
}echo "输入你要操作的内容"
select var in install_vsftpd create_user quit
docase $var ininstall_vsftpd)install_vsftp;;;create_user)create_user;;quit)exit 1;;esac
done

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

2.1 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: 077chown_upload_mode
The file mode to force for chown()ed anonymous uploads. (Added in v2.0.6).
Default: 0600

3. 性能

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

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

4. FTP常见问题

4.1 FTP时间戳相差8小时

# 配置文件指定时间,然后重启服务
vim /etc/vsftpd/vsftpd.confuse_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!

image

参考: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.6 客户端连接

4.6.1 MAC电脑连接FTP

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

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

4.6.2 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版)

点击查看

我希望、我希望你没有活在别人希望的希望里。

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

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

相关文章

React—01—基本学习,如何在html中直接使用react;

一、react的特点:<script>标签这里要加一个“text/babel”,babel才知道这个<script>标签里要解析js代码,否则babel不会启动。 React 组件是返回标签的 JavaScript 函数:哪个组件是通过改变 state 实现可响应的,或者哪个组件拥有 这个 state。 然后我们需要确定…

记录python+pyside+qml+qtcharts 使用,防踩坑

使用QML-qtquick 进行开发时,有个使用chart图表的需求,看了一大圈,网上都是qmake或是cmake来构建QTchart,用python开发也只搜到QtWidgets模块进行图表绘制。然而我对qtwidgets不是很了解,想要的是QML开发,在使用ChartView{}时一直闪退,没有效果。经历了苦苦搜寻,终于在 h…

制作了一款 pdf 转换图片的工具( csharp 版 )

在 Windsurf 的帮助下,制作了一款 windows 下的 pdf 转换图片(png/jpg/tif)工具。支持递归查找 pdf,一些配置给写死了,适合简单使用。 PDF 批量转图片工具 这是一个功能强大且易用的 PDF 转图片工具,专为批量处理 PDF 文件设计。它能够将 PDF 文件的每一页转换为高质量的…

C# WPF PrintDialog 打印(1)

参考“WPF 打印实例”的文章:https://www.cnblogs.com/gnielee/archive/2010/07/02/wpf-print-sample.html 测试程序: 首先打印Canvas效果:看起来似乎没问题,但是调整窗体尺寸遮挡部分元素:再打印Canvas效果:可以发现PrintVisual方法只打印了可见部分的元素,测试打印Dat…

CentOS8安装

安装方法跟Centos7无差异。 一、下载安装包镜像地址:https://mirrors.aliyun.com/centos-vault/centos/8.2.2004/isos/x86_64/?spm=a2c6h.25603864.0.0.1f647af6cvFFgO 二、安装操作系统 安装界面如下, 三、后续工作a、配置ip地址 [root@localhost ~]# cat /etc/sysconfi…

某视频tv app 签名算法分析

一、基本信息 分析工具:objection、frida 二、加解密分析 通过抓包发现请求体里有签名校验 sign ,并且响应体里返回的数据是密文,所以本次的目标就是破解签名 sign 以及响应包加密算法。2.1 请求签名 sign 从 sign 的数值长度上判断可能是 MD5,先使用 objection hook java.…

Metal RT压缩

iOS设备的屏幕分辨率越来越高,渲染时需要的RT的分辨率和内存的开销都更高了。苹果官方在2021年发布的A15 Bonic芯片中支持了RT的lossy压缩,可以减少50%的内存footprint。 MetalRT压缩是什么? Apple在2018年就已经提供了RT的lossless压缩方案,可以节省带宽,从而降低功耗。在…

百度地图轨迹绘制以及轨迹回放以及鼠标滑过自定义样式

用百度地图的绘制轨迹以及相关的轨迹回放,鼠标滑过展示与否的自定义弹窗的整理 图片展示组件代码:<!--* @Author: menxiaojin* @Date: 2023-07-12 14:03:03* @LastEditors: menxiaojin* @LastEditTime: 2023-07-20 19:41:02 --> <!--首页地图组件--> <templat…

【护网】IP WhitePass:IP过滤,白名单过滤,用于护网CDN、负载地址过滤等;

免责声明 由于传播、利用本公众号夜组安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号夜组安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!所有工具安全性自测!!!工具介绍 在护…

async/await 异步连接通讯设备

1. 在项目中遇到,获取上下两把扫码枪的结果,但是只有其中一把扫码枪能扫码,因为码可能在上面也可能在下面2. 起初我是用的同步的方法,先使用下面的扫码枪,再使用上面的扫码枪,扫码枪扫描超时为1秒,但是这样的缺点就是会浪费一把扫码枪扫描的时间3. 为了节约时间,将方法…