注意:
- 小心防火墙和SELinux的阻拦;
- 小心FTP服务器其他配置的影响,这些配置你并不知道;
- 小心Linux系统本身用户权限,文件权限的限制;
昨天因为在Linux上搭建FTP服务器,又整整栽进去了一下午的时间,本来早上一直联系开通远程服务ssh登录的事情。但是沟通来沟通去,最后结果还是不可用,感觉非常恼火。最终还是要自己搭建一个FTP服务器来做测试。既然,决定自己搭建FTP服务器了,就要开始动手干。之前远程服务器也是我自己搭建的FTP服务器,过程虽然也是很曲折,但是好歹也是程工了。有了上次的经验,我就觉得应该没什么问题。但是,没想到还是阴沟里翻了船。在搭建的过程中,遇到了很多很多在我看来熟悉而又陌生的问题,这些问题曾经遇到过,但是着手解决的时候,还是丈二和尚摸不着头脑,完全是一头雾水,就是在瞎鼓捣,上网查资料,自己根据仅有的印象瞎配置一通。耗到晚上8,9点依然没有成功。就说明一个问题:
- 之前的那次完全就是瞎猫碰找了死耗子,撞了大运,还以为自己啥都懂了。
- 做完之后,没有做一个复盘总结,完成了就扔到一边去。
吸取了之前的教训,就不得不在这里做一个复盘。以防下一次在同样的地方栽跟头。那到时候就只能说明自己是在是愚蠢与活该了。
正文
1. 啥是FTP服务器
FTP是一个协议,就像HTTP协议一样,也是为了网络连通交互。FTP就是要完成远程的上传下载这么个功能。在Linux好像本身就有个Sftp的服务。我没有用,因为从网上抄的话,这方面的资料太少,不好抄。可能也有其他类似的服务吧,实在没工夫去寻根问底了。我就用流行的vsftp。
注意:说上面一段废话是有目的的。第一个linux中本身就有sftp服务,意思就是这个玩意儿和linux深度集成的,这是不同于其他的服务,要有这个认识,我们才能够理解他的好多配置文件本身就在系统之中,然后,他使用的登录账户本身就是linux系统的账户。这一点,我刚开始做的时候,就没有理解,总认为vsftp本身要去哪里配置登录用户信息,其实,根本不用。直接创建系统用户就可以了。
2.安装FTP客户端
之前测试ftp服务是否正常运行,我都用谷歌浏览器,或者windows的文件资源管理器,来输入ftp协议路径。
但是呢,谷歌浏览器总是不成功,后来发现是在版本80以后,不再支持了。这是我踩的一个大坑啊。windows的文件资源管理器也有诡异的地方,就是有缓存,往往还莫名其妙的连接失败,报一些不知所云的错误,让人大为光火。所以,在爬坑的过程中,找到了一个国人做的ftp客户端FileZilla。还是很好用的。本身ftp协议慢慢的要被淘汰,被很多人所嫌弃,为此做服务的就变少了。
每次踩坑之后,复盘发现,这些所谓的坑不过是自己相关知识块的短缺造成的,在相关知识领域的人来说,这都是司空见惯的,如果我专注于研究谷歌浏览器版本差异,那么不再支持ftp协议,不就是一条很简单的信息嘛。但是,不知道的人,会为此付出很多的代价。咋样才能做到不踩坑呢。其实,就是我们在完成一个功能的时候,首先要意识到这个任务涉及到庞杂的知识块,很多知识块又是不言自明的。我们执着于把每个知识块都搞懂是不可能的,所以,就要有撞了南墙快回头的本领。我总是执着于一些挫败,非要搞个水落石出,最终的结果就是鱼死网破。
FileZilla这个ftp客户端软件安装简单,在这里就不多赘述了。
2. 安装vsftp服务器
- 查看系统中是否安装了vsftp
rpm -qa|grep vsftpd
- 安装vsftpd
yum install -y vsftpd
- 进入vsftp配置文件目录
cd /etc/vsftpd/
- 创建vsftp配置备份文件
mv vsftpd.conf vsftpd.conf_bak
- 创建vsftp删掉#注释的配置文件
cat vsftpd.conf_bak |grep -v "#" > vsftpd.conf
关闭防火墙和SELinux
这是惯用套路了,每次有服务需要从外部网络请求的时候,我们都要事先检查这两个服务的情况,否则也是栽坑不断啊。
- 关闭防火墙
firewall-cmd --state
systemctl stop firewalld.service
#暂时关闭
systemctl disable firewalld.service
#永久关闭 - 关闭SELinux
getenforce
setenforce 0
#暂时关闭
vim /etc/selinux/config
#永久关闭
3. 配置匿名登录
上面,我们把准备工作都做足了,下面,我们开始实现第一种情况:配置匿名用户访问ftp服务。
- vsftpd.conf配置如下
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
这段配置了就加了极端关于匿名用户权限的配置,注意哪些anon开头的配置项。
注意:在用vim打开文件的时候,竟然没有vim。一个小插曲,我用如下命令解决:
yum install -y install vim*
- 重启ftp服务
service vsftpd restart
- 测试连接ftp服务
我们使用FileZilla客户端工具来连接ftp服务,发现正常,直接进入的是/var/ftp
这个匿名用户默认的文件夹。
但是,我们要创建目录的时候,是失败的。为啥捏?那是因为我们配置文件虽然开启了权限,但是linux系统文件夹是没有给我们匿名用户操作的权限的,那我们就来授权:
chmod 777 /var/ftp/pub/
经过上面的一系列的骚操作,我们就实现了匿名用户登录的功能了。
4.配置本地用户登录
我们实际使用的过程中,当然不是简单的匿名登录这么简单了,必须要使用账户才可以登录。而这里的本地用户登录,就是我们再登录连接ftp服务的过程中,使用的账户是linux系统的本地用户,这两个用户是用的一套账户,就是linux的账户系统。
- 修改vsftpd.conf
anonymous_enable=NO
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
关注上面的配置,我们把关于匿名的权限删除,并不允许匿名登录。就这样?是的。
- 删除ftpusers配置文件中相关登录用户名称
- 删除user_list配置文件中相关登录用户名称
比如,我们打算用root用户登录,那就把root这个名称删掉。
注意:每次修改配置文件,都要重启ftp服务。
使用root用户登录操作ftp,风险很大。我们可以创建一个专门的用户来操作ftp。
- 创建一个用户,这个用户不能登录系统。
useradd -s /sbin/nologin zhangsan
坑点:如果发现使用
不能登录系统的用户
登录时报错,那么就是vsftpd过度验证导致的。需要修改/etc/pam.d/vsftp里的配置,注释掉#auth required pam_shells.so
感悟:照着视屏操作,依旧是坑点不断。无法躲避啊。
收尾
通过上面的一系列的骚操作,我们完成ftp服务的部署。但是,就因此有了很大的成长了吗?没有,我还是照葫芦画瓢。这也不是我的独创。我只能说点我的体会。上手安装一个服务,我遇到的困境:
- 我本身对于linux环境不熟悉,那么在操作的时候难免就会很心虚。不信任我输入的每一条命令。所以,这个对linux的学习还要加强。
- 对于vsftp这个服务,我也是完全不熟悉,在看很多的人文章中,很多人也是不了解的。对匿名用户的配置应该怎么样配置;对于登录用户的配置,要修改哪些,删除哪些,就没有人提到过;在客户端操作文件夹的时候,权限的问题,也没有人提。这里有些是关于linux系统需要进一步配置,有些还是要对vsftp服务本身要进一步配置。当二者交叉结合的时候,我更是懵逼了。
回过头去看网络上的文章,真是令人作呕,不知所云,连这个简单的需求都讲不清楚,云山雾罩的。
本来想去官网看看的,但是官网还被粉刷打不开。哎。。。
转头在内网寻找,也都是二道贩子的文章。这不就陷入了两难的绝境了嘛。
但是,这也说明一个问题,这个事情应该是太简单,没什么可说的。所以,还是要冷静下来,分析问题,才能够解决问题。
附录
- 将所有用户禁锢在自己的家目录下
chroot_local_user=YES
-
vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot 错误解决方法
从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。
https://blog.csdn.net/u013632755/article/details/83717695 - 开启某些用户随意切换目录,指定配置这些用户配置文件的位置
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list