Linux —— FTP 安装及配置基础实践

前言

学技术,自己一向认为,一定不要不求甚解,尤其作为并未接受过相关知识系统教育的人,因为对知识体系缺乏系统全面的认识,故在平常自学中,更应该多动手实践,实践能亲手验证相关问题,获得成就感,同时也能加深理解,或获得意外收获。

自己对Linux 系统知之甚少,很多概念的东西也比较模糊,更多时候是针对某个具体知识点进行学习与实践,相信随着积累,自己学习的知识一定会慢慢系统化,这算是对自己的鼓励吧。

本来是要在虚拟机Linux系统中安装其他软件,但安装包在本机,故想通过FTP传入虚拟机进行安装,对Linux 中FTP服务也不太清楚,没办法,从基础开始实践咯。此日志关系FTP安装及配置。

 

一、环境准备

采用windows系统上安装虚拟机方式运行Linux系统。相关软件或系统如下:

虚拟机软件VMware workstation player16:https://www.vmware.com/cn/products/workstation-player/workstation-player-evaluation.html

Linux系统(Centos7):https://mirrors.aliyun.com/centos/

注:VMware 中试过暂时无法安装Centos8。

 

二、Centos 系统安装FTP服务

Linux系统中安装软件与windows系统不同,Linux中软件需从软件源下载,软件源相当于软件仓库。软件源并没有统一的由谁管理,只要你乐意,你也可以制作软件源并公开出来,为了更直观的感受,看看阿里云下载的Centos7中默认的软件源(网易软件源:http://mirrors.163.com/)。软件源相关的概念可从其他地方深入了解,此处仅关注如何在Linux 中安装软件。

已经知道软件存在于软件源,那么如下安装到本地Linux 系统呢?Linux系统中安装软件需用到软件包管理器,不同版本Linux系统中使用的软件包管理器是不太相同的,汇总起来一般是:yum、apt、rpm、dpkg,使用的Centos7中采用的是yum。

软件包管理器区别:https://blog.csdn.net/qq_26182553/article/details/79869666

Windows系统中,需要知道软件安装包下载地址,下载安装即可,Linux中需要知道需安装软件的名称,软件包管理器会自动从系统的软件源中查找并下载。下面开始安装FTP服务(软件名vsftpd)。

1、查看软件源

# 查看软件源
yum repolist

结果:

2、安装FTP服务

# 安装ftp服务
yum -y install vsftpd

3、查看FTP服务安装位置

# 查看ftp服务安装位置(需在/目录下执行)
find -name vsftpd

结果:

说明:此实践各项操作都是在超级管理员下进行。/etc 目录下一般放置的都是配置文件,从图中看出安装位置为/usr/sbin/vsftpd。

4、运行FTP服务

# 运行|重启ftp服务
service vsftpd start|restart

# 查看控制进程中运行中的vsftpd
top

结果:

top命令界面ftp运行状态

5、Windows中连接虚拟机ftp服务

打开Window cmd窗口,查看windows中ftp服务提供的各项命令:

基础命令:

# ftp基础命令
# 连接某域名ftp服务器
open 域名
# 关闭连接
close
# 退出ftp命令
bye

先查看虚拟机的ip地址(此实践中为:192.168.80.129):

# 虚拟机中查看主机ip信息
ip address show

window cmd窗口通过ftp工具连接虚拟机ftp服务:

可看到连接成功,但登陆失败了,说明FTP服务是正常的,后面就涉及到FTP服务的配置了。

 

三、FTP服务配置

1、默认配置文件配置内容

从前面通过find命令查看vsftpd 位置大概知道,ftp服务配置文件位置为:/etc/vsftpd。查看该目录/文件情况:

ftp配置信息文件夹

从文件列表大可知,ftpusers、user_list大概存放了ftp服务管理的用户信息,暂时不管,我们查看下配置文件vsftpd.conf 原内容。

翻译及整理后默认配置文件中所有配置项说明如下:

# 配置样例文件,/etc/vsftpd/vsftpd.conf
# 这份文件简化了ftp的部分配置,让ftp精灵进程更加有用。请查看vsftpd.conf.5以获取所有遵循的配置。
# 注意:这份文件中配置项并不是ftp的完整配置项清单,请查看vsftpd.conf.5手册以了解ftp的完整能力。
#
anonymous_enable=YES # 是否允许匿名FTP(默认开启,注释掉也将是开启)
local_enable=YES # 去注释以允许本地用户登录。在SELinux在为ftp_home_dir进行强制检查时,配置项有用
write_enable=YES # 去注释以允许所有写命令
local_umask=022 # 本地用户的默认umask端口是077,大多数ftpd服务是用的022端口,故根据需要设置此配置项值
#anon_upload_enable=YES # 是否允许匿名用户上传文件,为true时还需write_enable为YES时生效。在SELinux 对allow_ftpd_anon_write与allow_ftpd_full_access 布尔值进行强制检查时有用。
#anon_mkdir_write_enable=YES # 是否允许匿名用户创建新路径
dirmessage_enable=YES # 用户进入某目录时,是否将路径信息返回给访问用户
xferlog_enable=YES # 是否打开上传与下载日志记录功能
connect_from_port_20=YES # 是否确保从端口20(数据端口)进行连接(ftp一般用的20、21端口,21为控制端口即读写命令用)
#chown_uploads=YES # 是否让一个匿名文件(匿名用户上传)可被另一个用户拥有。建议不要用root用户上传文件!(chown即change own,为linux命令)
#chown_username=whoever
#xferlog_file=/var/log/xferlog # 用此配置项以重新制定日志文件位置
xferlog_std_format=YES # 是否以ftpd xferlog标准格式输出日志,记住默认日志文件位置为/var/log/xferlog
#idle_session_timeout=600 # 会话空闲多长时间后认为超时
#data_connection_timeout=120 # 数据连接多长时间后认为超时
#nopriv_user=ftpsecure # 定义一个唯一用户用于ftp server作为完全隔离及未授权的用户。建议定义
#async_abor_enable=YES # 定义此配置项后,服务器将能处理异步ABOR请求,处于安全考虑时不应开启,但若不开启,部分老的ftp客户端连接可能出问题(注ftp ABOR命令会中断正在进行的数据通道,但不会关闭控制通道,故开启时可能存在部分正在传输数据时传输中断的情况。ABOR用于开启紧急的连接。)
#ascii_upload_enable=YES # 默认情况下,ftp服务会假装允许ASCII模式但实际上忽略此请求。打开此选项以允许ftp服务在ASCII模式时对文件进行mangling操作。vsftpd.conf(5)人工手册解释了此选项关闭时的默认行为。请记住在一些ftp服务中,ASCII支持可通过“SIZE /big/file”命令来允许否定服务攻击(DoS,Denial # of service)。ASCII 模式是FTP协议中恐怖的特点。
#ascii_download_enable=YES
#ftpd_banner=Welcome to blah FTP service. # 可通过此配置项自定义登录banner 字符串
#deny_email_enable=YES # 你可以指定一个不允许匿名电子邮件地址的文件。对某些DoS攻击显然有用。
# (默认遵循)
#banned_email_file=/etc/vsftpd/banned_emails
#chroot_local_user=YES # 你可指定一个特定的本地用户清单,使其允许通过chroot() 到他们的home路径。如果chroot_local_user设置为YES,那么这个列表就变成不可chroot()的用户列表。(警告:chroot操作非常危险,如果使用chroot,请确保用户在chroot内没有顶级目录的写权限。)
#chroot_list_enable=YES
# (默认遵循)
#chroot_list_file=/etc/vsftpd/chroot_list
#list_recure_enable=YES # 你可能会激活内建的ls的“-R”选项。此选项默认关闭,主要为了防止远程用户可能导致的大量I/O,尤其在大型站点上。然而,一些中间件FTP客户端,如“ncftp”、“mirror”假定使用了“-R”,此时鼓励开启此选项。
#listen=NO # 当listen指令启用时,vsftpd运行在standalone模式并监听ipv4 socket。这个指令不能与listen_ipv6一起使用
listen_ipv6=YES # 监听ipv6 socket,与listen二选一,即不能同时监听ipv4与ipv6 socket
pam_service_name=vsftpd # PAM认证模块对应的文件,此配置即对应pam模块相应配置文件(/etc/pam.d/vsfpd)
userlist_enable=YES # 与登录相关,此配置为YES,不允许user_list 与ftpusers中用户登录,否则允许,默认YES
tcp_wrappers=YES # 作用暂未知,后面了解

查看FTP服务所有配置项文档 :1、http://vsftpd.beasts.org/vsftpd_conf.html ;2、https://linux.die.net/man/5/vsftpd.conf

多读读配置项文档,理解能更上一个层次!

2、登录FTP服务

在使用默认配置情况下,登录FTP返回530,Permission Denied。根据此提示怀疑是权限问题,是否为user_list中配置问题呢?查看下配置文件中user_list文件(/etc/vsftpd/user_list):

此文件头部的说明中得知:

1)、当userlist_deny=NO时,仅允许此文件中列出的用户访问服务,当user_list=YES时(默认),从不允许此文件中列出的用户访问,甚至不会提示用户提交密码;

2)、vsftpd默认的PAM 配置也会检查"/etc/vsftpd/ftpusers"以决定不能访问的用户。

所以用户要能访问,至少需满足以上2点中的条件。故分别修改配置文件(/etc/vsftpd/vsftpd.conf)中配置项userlist_deny值为NO,并且修改ftpusers 中用户列表,去掉用户root,重启ftp服务:

service vsftpd restart

Windows cmd窗口再次测试连接ftp服务结果:

3、FTP资源文件管理

上一步中,用户root 已经可以通过ftp方式登录Linux系统访问ftp服务,执行ls命令后可见仅有一个文件anaconda-ks.cfg文件,问题在于,vsftpd.conf配置文件中并不能看出ftp服务的资源文件位置,或者说我们如何才能设置某个路径为我们的FTP服务工作路径呢?

此处对这个问题闲聊下。首先,在Linux了解上,不是小白,真问不出这个问题;其次,这个问题本身提问方式是不正确的。

这并非坏事,就如小朋友学东西是很快的,因为在这之前,他们对所学一无所知,此外,你看小朋友的某些问题,常常让你觉得不可思议:他们怎么会提出这样基础的问题?没错,在大人看来,很多东西理所当然,但在小朋友眼里,可能还只是一堆问号!

回到问题本身,第一个疑问,登录ftp服务位置,并不能看出资源文件位置。因为ftp登录成功,通过ls查看的到的文件列表并非绝对路径,所以考虑用find命令查看anaconda-ks.cfg文件位置,发现居然在/root下,而此目录特殊地方在于,它是我登录账号root的hom根路径,那么是否意味着登录ftp之后的资源位置其实就是用户的根目录呢?实际上,经过测试,确实如此,那么第二个问题也一同顺带解答了,也难怪实际工作中,为了文件统一管理,我们通常会新建一个用户,专用于登录ftp。

此处疑问从提出到解决过程中,自己最大的收获在于,自己对Linux 用户关于与FTP服务有了新的认识。

Linux 中所有操作都是通过用户登录账号后进行的,至于用户在访问上表现的差异性,则是通过权限控制,如用户可访问FTP服务,是因为用户具有登录FTP服务的权限,用户可通过SSH方式登录,则是用户具有SSH方式登录服务器的权限。此外,对于FTP服务的理解也发生些许变化,首先FTP登录后并不能像普通意义上登录服务器那样,可启动某服务或执行脚本等操作,这需回到FTP本质上理解,FTP是文件传输协议,所以登录后能进行的仅是ftp命令提供的与文件传输相关的操作。

理解上转变后,下面我们直接在Linux系统中root根目录创建文件,并通过window cmd连接ftp服务查看最新文件列表:

模拟实际应用中,业务服务通过ftp客户端连接服务器FTP服务,并使用同一个账号登录,我们假定账号为ftp,且文件资源统一放置于目录/home/ftp 中。

这个过程中容易踩坑,此处仅记录多次实践后得出的正确操作过程与相关配置。

步骤一:创建用户ftp,并指定用户更目录及初始密码

# 添加用户ftp并指定用户登录后路径为/home/ftp
-> useradd -d /home/ftp ftp
# 为用户设置初始密码
-> passwd ftp

步骤二:为使用户可通过登陆FTP服务,需配置将用户加入FTP用户列表配置文件

1)、/etc/vsftpd/vsftpd.conf 中检查并修改用户管理相关配置

userlist_enable=YES|NO #是否启用FTP用户管理
userlist_deny=YES|NO #userlist_enable为YES时,此配置生效,YES:用户列表不能登陆;NO用户列表可以登录,默认YES
userlist_file=/etc/vsftpd/user_list #用户列表文件,根据前面两配置项值决定是允许还是不允许登录,值即默认值

# 说明:样例配置文件中,可能并没有这三项,可编辑加上。此实践中,我们让用户列表文件中列出的用户可以登录FTP服务,配置值为:
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list

2)、将ftp添加进user_list文件(此处即文件/etc/vsftpd/user_list)

3)、检查ftpusers文件中(PAM使用的不允许用户通过FTP方式登录的用户列表),不包含ftp用户

4)、重启服务(service vsftpd restart),打开windows cmd连接测试,结果如图:

错误提示:500 OOPS:vsftpd:refusing to run with writable root inside chroot()。

此错误看起来是因为ftp用户对其主目录(/home/ftp)具有写权限导致的,将主目录可写权限去掉确实能访问,也能执行ls 列出文件列表命令,但实践发现,此时ftp用户无法在自己目录手动进行写相关操作(如创建文件、删除文件等)。

也有的文章说在ftp配置文件中添加配置项 allow_writeable_chroot=YES,经过实践,此方法也不可行。另外,也尝试修改以下3个配置项:

chroot_list_enable=YES|NO #是否允许chroot()到用户home目录
chroot_list_file=/etc/vsftpd/chroot_list #启用chroot()时,可chroot()的用户列表,默认此值
chroot_local_user=YES|NO #用户列表“取反”操作,如果设置为YES,list文件中用户变成不可chroot()的用户列表

并创建chroot_list文件,并向文件中添加ftp用户名,再次连接也无果。经过反复尝试,最终也是发现,只需开启匿名上传及文件创建即可,相关配置(注意第一个配置项):

anon_upload_enable=YES #允许匿名用户上传文件,仅write_enable=YES时有用。此外,也是FTP用户需创建文件路径的开关(这点容易被忽略)
anon_mkdir_write_enable=YES #允许匿名FTP用户创建路径

修改后再次重启服务,再次测试登录,依旧提示相同错误。

此错误暂时未找到解决方法(且此错误只发生在帐号ftp上,其他用户能正常连接并进行文件上传下载操作),后面处理,为了上传文件,可临时将用户home目录权限改为不可写,待FTP登录成功后再改为可写,以便FTP客户端上传文件。

 

四、传输文件

此部分简要介绍ftp客户端部分常用命令。

1、文件查看:ls、dir

 

2、文件下载:recv

使用:recev 文件名 [保存路径]

 

3、文件上传:put

使用:put 本地文件路径 服务器上保存路径

 

4、路径创建:mkdir

使用:mkdir 相对路径

 

可见,部分命令与linux系统中是一致的。

 

 

 

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值