Linux部署FTP服务

什么是FTP服务

        FTP(File Transfer Protocol,文件传输协议)是TCP/IP协议组中的协议之一。该协议是Internet文件传输的基础,它由一系列规格说明文档所定义,目的是让用户能把一个主机上的文件复制到另一个主机上,同时也允许用户与远程主机建立连接,以访问存储在远程主机上的文件,然后把文件从远程主机传到本地计算机,或从本地计算机传到远程主机。

        FTP的主要作用就是让用户连接上一个可存储计算机文件的服务器,在服务器上用户可以进行文件的上传、下载、查看、更名、删除等操作,就像在本地计算机上操作一样方便。通常,连接FTP服务器需使用FTP客户端软件,用户通过FTP客户端程序向FTP服务器发出命令来请求服务,FTP服务器作出响应,并返回请求的结果。

        需要注意的是,FTP的传输效率非常高,因此在网络上传输大的文件时,一般都采用该协议。但是,FTP并不提供一般文件系统的访问、修改等权限,它只负责完成文件的传输。

FTP端口号

控制连接:TCP 21,用于发送FTP命令信息

数据连接:TCP 20,用于上传、下载数据

FTP的模式

主动模式:服务端从 20 端口主动向客户端发起连接

被动模式:服务端在指定范围内某个端口被动等待客户端连接

FTP的传输模式

文本模式:ASCII 模式,以文本序列传输数据

二进制模式:Binary 模式,以二进制序列传输数据

FTP的用户类型

匿名用户:anonymous 或 ftp

本地用户:帐号名称、密码等信息保存在 passwd、shadow 文件中

虚拟用户:使用独立的帐号/密码数据文件

安装FTP

[root@bogon ~]# yum -y install vsftpd

匿名用户

        安装好以后默认就启用了匿名用户,但是权限是只能查看和下载,如果想要让匿名用户拥有上传文件,创建目录或者移动等其他权限则需要配置。

修改配置文件

# 在anonymous_enable=YES下添加
anon_umask=022
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes# anon_umask:设置匿名用户上传文件时的umask值,umask决定了新文件和目录的默认权限  
# 022意味着新文件或目录的权限将被设置为755(目录)或644(文件)减去umask值  
anon_umask=022  # anon_upload_enable:允许匿名用户上传文件  
# yes表示启用,no表示禁用  
anon_upload_enable=yes  # anon_mkdir_write_enable:允许匿名用户创建目录  
# yes表示启用,no表示禁用  
anon_mkdir_write_enable=yes  # anon_other_write_enable:允许匿名用户进行其他写操作(如重命名和删除)  
# 请注意,这个选项通常是不安全的,因为它允许匿名用户删除或修改服务器上的任何文件  
# yes表示启用,no表示禁用  
anon_other_write_enable=yes
[root@bogon ~]# grep -v '^#' /etc/vsftpd/vsftpd.conf | grep -v '^$'
anonymous_enable=YES
anon_umask=022
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

重启服务

[root@bogon ~]# chown ftp /var/ftp/pub
[root@bogon ~]# systemctl restart vsftpd

客户端测试

        使用匿名用户登录的时候可以使用ftp用户或者anonymous用户登录,密码直接按回车即可

[root@bogon ~]# date > time.txt
[root@bogon ~]# ftp 192.168.207.131
Connected to 192.168.207.131 (192.168.207.131).
220 (vsFTPd 3.0.2)
Name (192.168.207.131:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> put time.txt
local: time.txt remote: time.txt
227 Entering Passive Mode (192,168,207,131,66,247).
150 Ok to send data.
226 Transfer complete.
29 bytes sent in 5.9e-05 secs (491.53 Kbytes/sec)
ftp> ls
227 Entering Passive Mode (192,168,207,131,241,119).
150 Here comes the directory listing.
-rw-r--r--    1 14       50             29 Jun 13 03:16 time.txt
226 Directory send OK.
ftp> get time.txt
local: time.txt remote: time.txt
227 Entering Passive Mode (192,168,207,131,37,42).
150 Opening BINARY mode data connection for time.txt (29 bytes).
226 Transfer complete.
29 bytes received in 0.000224 secs (129.46 Kbytes/sec)

本地用户

修改配置文件

# 在local_enable=YES下添加
chroot_local_user=yes
allow_writeable_chroot=yes# chroot_local_user:如果启用(yes),则本地用户(非匿名用户)登录后将被chroot到其主目录。  
# 这意味着用户将只能访问其主目录及其子目录,不能访问系统上的其他目录。  
# 这是一个增强安全性的措施,可以防止用户访问系统文件或执行恶意代码。  
chroot_local_user=yes  # allow_writeable_chroot:在某些情况下,如果用户的家目录是可写的(即用户可以在其中创建或修改文件),  
# 那么在启用chroot后可能会导致vsftpd无法启动或用户无法登录。  
# 启用allow_writeable_chroot(yes)允许vsftpd在这种情况下继续运行,即使chroot目录是可写的。  
# 然而,请注意,这可能会稍微降低安全性,因为恶意用户可能会尝试利用可写的chroot目录来执行攻击。  
# 在大多数情况下,如果你的chroot目录不需要是可写的,最好保持这个选项为no。  
allow_writeable_chroot=yes
[root@bogon ~]# grep -v '^#' /etc/vsftpd/vsftpd.conf | grep -v '^$'
anonymous_enable=YES
anon_umask=022
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes
local_enable=YES
chroot_local_user=yes
allow_writeable_chroot=yes
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

重启服务

[root@bogon ~]# systemctl restart vsftpd

创建用户

[root@bogon ~]# useradd zhangsan
[root@bogon ~]# echo '123' | passwd --stdin zhangsan
Changing password for user zhangsan.
passwd: all authentication tokens updated successfully.

客户端测试

[root@bogon ~]# ftp 192.168.207.131
Connected to 192.168.207.131 (192.168.207.131).
220 (vsFTPd 3.0.2)
Name (192.168.207.131:root): zhangsan
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,207,131,161,43).
150 Here comes the directory listing.
226 Directory send OK.
ftp> put time.txt
local: time.txt remote: time.txt
227 Entering Passive Mode (192,168,207,131,148,58).
150 Ok to send data.
226 Transfer complete.
29 bytes sent in 7.6e-05 secs (381.58 Kbytes/sec)
ftp> get time.txt
local: time.txt remote: time.txt
227 Entering Passive Mode (192,168,207,131,200,167).
150 Opening BINARY mode data connection for time.txt (29 bytes).
226 Transfer complete.
29 bytes received in 0.00024 secs (120.83 Kbytes/sec)
ftp> 

黑名单白名单

        /etc/vsftpd/user_list 和 /etc/vsftpd/ftpusers 是 vsftpd FTP 服务器使用的两个重要文件,用于控制用户访问权限。这两个文件的具体作用如下:

/etc/vsftpd/ftpusers
这个文件包含了一个用户列表,列表中的用户将被拒绝通过 FTP 访问服务器。
默认情况下,这个文件通常包含如 root, bin, daemon, adm, lp, sync, shutdown, halt, mail, news, uucp, operator, games, gopher, ftp, nobody, www-data, backup, list, irc 和 gnats 等系统或服务用户。
这些用户由于具有特殊的系统权限或用于特定的服务,因此不应通过 FTP 访问服务器,以避免安全风险。
/etc/vsftpd/user_list
这个文件的作用取决于 vsftpd 配置文件中的 userlist_deny 和 userlist_enable 设置。
当 userlist_enable=YES 时,vsftpd 会检查这个文件。
如果 userlist_deny=YES(默认值),则 user_list 文件中的用户将被拒绝访问 FTP 服务器。这类似于 ftpusers 文件,但通常用于定义额外的用户限制。
如果 userlist_deny=NO,则只有列在 user_list 文件中的用户才被允许访问 FTP 服务器,其他所有用户都将被拒绝。这可以用于创建一个只允许特定用户访问的白名单。
总结:

  • ftpusers 是一个固定的黑名单,列在其中的用户无论如何都不能通过 FTP 访问服务器。
  • user_list 可以作为黑名单(默认)或白名单(当 userlist_deny=NO 时),具体取决于 vsftpd 的配置。

        为了服务器的安全,管理员应定期检查并更新这两个文件,确保只有合适的用户能够访问 FTP 服务。

虚拟用户

准备账号密码文件

        编写虚拟用户账号文件,一行是账号一行是密码,如下账号是lisi密码是123,账号是wanguw密码是123

[root@bogon ~]# cat /etc/vsftpd/vusers.list
lisi
123
wangwu
123

账号密码文件加密

[root@bogon ~]# cd /etc/vsftpd/
[root@bogon vsftpd]# db_load -T -t hash -f vusers.list vusers.db
[root@bogon vsftpd]# chmod 600 /etc/vsftpd/vusers.*

添加虚拟用户的映射账号

[root@bogon vsftpd]# useradd -d /var/ftproot -s /sbin/nologin myftp
[root@bogon vsftpd]# chmod 755 /var/ftproot

编写PAM文件

[root@bogon vsftpd]# cat /etc/pam.d/vsftpd.vu
auth    required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers

修改vsftpd配置文件

# 注释pam_service_name=vsftpd,在这一行下面添加
pam_service_name=vsftpd.vu
guest_enable=yes
guest_username=myftp
[root@bogon vsftpd]# grep -v '^#' /etc/vsftpd/vsftpd.conf | grep -v '^$'
anonymous_enable=YES
anon_umask=022
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes
local_enable=YES
chroot_local_user=yes
allow_writeable_chroot=yes
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.vu
guest_enable=yes
guest_username=myftp
userlist_enable=YES
tcp_wrappers=YES

重启服务

[root@bogon vsftpd]# systemctl restart vsftpd

客户端测试

[root@bogon ~]# ftp 192.168.207.131
Connected to 192.168.207.131 (192.168.207.131).
220 (vsFTPd 3.0.2)
Name (192.168.207.131:root): lisi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quit
221 Goodbye.
[root@bogon ~]# ftp 192.168.207.131
Connected to 192.168.207.131 (192.168.207.131).
220 (vsFTPd 3.0.2)
Name (192.168.207.131:root): wangwu
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

配置虚拟账号的权限

此时所有的虚拟账号都拥有相同的权限,我们可以通过修改配置文件设置每个用户的权限

# 主配置文件添加user_config_dir
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf 
user_config_dir=/etc/vsftpd/vusers_dir# /etc/vsftpd/vusers_dir目录没有就创建出来
# cd /etc/vsftpd/vusers_dir 切换目录
[root@localhost vusers_dir]# vi lisi
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes[root@localhost vusers_dir]# touch wangwu# 每个用户的权限就不一样了,重启服务就可以验证了
[root@localhost vusers_dir]# systemctl restart vsftpd

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

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

相关文章

如何实现网络隔离后,军工单位内网数据导出的安全性?

在现代信息化战争中,军工单位在信息安全方面的需求尤为突出。通常会采用物理隔离,将网络隔离成内网和外网,防止外部网络的恶意入侵和数据窃取。隔离后的数据仍存在内外网交换的需求,即涉及到内网数据导出,因此每日会面…

盒马鲜生礼品卡如何使用?

盒马鲜生的礼品卡除了在门店用以外,还有什么用处啊 毕竟家附近的盒马距离都太远了,好多卡最后都闲置下来了,而且以前都不知道盒马卡还会过期,浪费了好多 还好最近发现了 盒马鲜生礼品卡现在也能在收卡云上兑现了,而且…

低功耗蓝牙ble开发(二)——bluez5源码分析

3、bluetoothctl工具代码分析 Bluetoothctl工具的入口程序client/main.c中的main函数,现在跳到main函数开始分析 (1)client/main.c/main函数分析 int main(int argc, char *argv[]) { ……//命令行输入初始化,该函数里面调…

深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南

📢📢📢 深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南 Spring Cloud Sentinel 是阿里巴巴开源的一款强大的分布式系统流量防卫组件,专为微服务架构设计,提供流量控制、熔断降级…

watcher学习小结

架构 主要是watcher-api,watcher-applier,watcher-decision-engine watcher-applier watcher-decision-engine 将DecisionEngineManager和DecisionEngineSchedulingService封装到oslo_service,然后调service的launch_service,实…

NetSuite ERP项目中非批次物料—批次物料数据转换流程

最近在刚结束的项目上也再次碰到了非批次物料转换为批次物料的操作,因此也想把我们在处理数据流程中的心得写出来,以便复盘与总结,也分享给各位。 整体的步骤我们可分为准备工作,调整工作以及检查工作: 准备工作 主…

抖店退款退货率太高,平台也不帮助商家,快做不下去了怎么办?

我是王路飞。 现在很多商家对抖店的评价是:比拼多多还狠,动不动就扣保证金,退款率太高,而平台一边倒站买家,要是再遇到个别发疯的买家,商家真的很无助。 其实关于抖店退款退货率高、平台也不站在商家这一…

【运维项目经历|031】GitLab自动化运维管理平台项目

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专家博主 💊交流社区:CSDN云计算交流社区欢迎您的加入! 目…

【Flutter】路由组件的应用 (学习记录)

前言 在 Flutter 中,路由用于管理应用程序中不同页面之间的导航和跳转。Flutter 提供了多种方式来实现路由管理,包括基本的静态路由、动态路由、命名路由以及使用第三方库(如 GetX、Provider 等)来管理路由。 一、 静态路由&#…

编译结果处理的shell脚本

#!/bin/bash WEB"web" DIST"dist" RED\033[0:31m GREEN\033[0;32m NC\033[0m #生产打包传参 BUILD"b" if [ -e ${WEB} ];then#删历史文件rm -r ${WEB}rm ${WEB}.zip fi #编辑文件 npm run build #检查构建是否成功 if[ -e ${DIST} ];then#改名mv…

分布式事务的八种方案解析(1)

针对不同的分布式场景业界常见的解决方案有2PC、TCC、可靠消息最终一致性、最大努力通知等方案,以下总结8 种常见的解决方案,帮助大家在实际的分布式系统中更好地运用事务。 1.2PC 二阶段提交协议(Two-phase commit protocol)&…

好用的视频压缩软件

在当今数字化时代,视频已成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐,视频都扮演着重要的角色。视频的存储空间也越来越大,这给我们的设备存储带来了不小的挑战。因此,学习如何将视频压缩小点成为了一项实用的…

Qt QMake指南(如何写pro文件)

QMake相关介绍 QMake是一个通过编译Pro文件自动生成Makefile文件的工具。 扩展知识 这里是关于make、makefile、cmake、CMakeLists.txt、qmake等工具和文件之间关系的详细解释: 起始:当我们开始学习基础的helloworld项目时,一般使用gcc命令…

微信营销在使用时应该注意什么?

(一)注重个人品牌的打造 微信好友的信任是开展个人微信营销成功的基础,因此,平时应利用朋友圈和微信群发布一些有助于提升个人形象的信息。 (二)发送营销信息不可过滥 如果一个人的朋友圈内容充斥营销信息&…

叁[3],VM二次开发异常处理

1,开发环境 VS2022/WPF/.NetFramework4.8 VM4.2 2,"模块状态0,错误码10100005,错误信息:模块与平台不匹配" 现象描述: 1,WPF/NetFramework项目中打开方案,对工具做模板&#xff0c…

开源可视化表单可以用在哪些行业中?

很多客户朋友会询问我们,什么样的行业可以使用低代码技术平台及开源可视化表单?其实,随着社会的进步和发展,很多中小型企业都希望通过低代码技术平台能够让企业实现提质增效的目的,也想借助它的优势特点进入流程化办公…

MySql通过 Procedure 循环删除数据

一、问题描述 在日常使用运维中,一些特殊情况需要批量删除陈旧或异常数据。 如果通过 delete from 【表名】 where 【条件】 直接删除,可能会由于数据量过大,事务执行时间过长,造成死锁。 二、解决方案 通过 Procedure 使用循环…

怎么提升机器人外呼的转化效率

在某些情况下,如市场调查、产品推广等,语音机器人可以高效地完成大量的呼叫任务,并能通过预设的语音脚本和智能识别功能,初步筛选和分类潜在客户。此时,不转人工可能更为高效和经济。 然而,在一些需要深度沟…

jenkins使用注意问题

1.在编写流水线时并不知道当前处在哪个目录,导致名使用不当,以及文件位置不清楚 流水线任务默认路径是,test4_mvn为jenkins任务名 [Pipeline] sh (hide)pwd /var/jenkins_home/workspace/test4_mvn maven任务也是,看来是一样的…

前端相关面试题--html

html是什么 html是超文本标记语言,与js和css一样,是由W3C(万维网联盟)制定的一套语言,超文本 指的是连接一个网站内或多个网站的网页的链接 标记是 html使用各种标记 来注明文本、图片、链接等 以便在浏览器这种进行 …