这两天因为工作所需,要在RedHat上安装ftp服务,因为以前配置过vsftpd,觉得这个简单,于是掉进了一个不小的坑。正应了我自己的名言:开发无难事,开发无易事(不好意思,暂时还没成为名言)。
首先是vsftpd的官网vsftpd.beasts.org不知为何打不开了,不应该是被墙啊。我党从来只墙西方腐朽的生活方式,不墙人家的先进技术啊。虽说度娘一下vsftpd,有诸多绿色下载、开源中国之类的网站扑面而来,仿佛火车站周围的小旅馆老板娘向你热情招手。无奈老狗疑心堪比曹孟德,总觉得这些网站的软件里捆绑了不干不净的东西。东搜西搜之下,却发现了这么个好网站http://pkgs.org/(不是广告),提供Linux的各种软件包下载,每种软件包都按Arch、CentOS、Debian、openSUSE等版本分类。而且如果有依赖包,也一并列出供选择。实乃居家旅行、系统安装、杀人灭口必备良站(真不是广告)。于是找到vsftpd的安装包,翻到R字头一看,靠嘞!独独没有Red Hat!不带这么玩人的啊……
其实细想也释然了,人家网站上列出的都是Arch、Debian这些童叟无欺的免费开源Linux,Red Hat这种收费企业版自然不好侧身其中。好在还有CentOS版的vsftpd供下载嘛,偷偷跟入门级的小狗狗们说一声:“其实CentOS就是Red Hat根据Linux的开源规定释放出的源码编译成的。你们心里有数就好,别张扬,免得老鸟级的狗狗们笑话我们没见识。”
在这里多废话一句,老狗以软海沉浮二十载的经验预测,开源、免费、社区化开发才是软件业的未来趋势,Windows这类以销售来维持生命力的软件迟早将走向末路,现在就能看到它们消亡的迹象了(似乎地球人都知道啊)。
哎呀,我废话太多,这毛病真是无可救药!赶紧把话题扯回来,根据操作系统版本,我下载了CentOS 6版本的vsftpd安装包“vsftpd-sysvinit-3.0.2-9.el7.x86_64.rpm”,rpm文件如何安装不需要我多说,下面我只是简单记录一下操作:
vsftpd-sysvinit-3.0.2-9.el7.x86_64.rpm文件上传到/tmp目录下,我习惯把rpm包放到这个目录里,因为经常要清理的。
rpm-ivh vsftpd-sysvinit-3.0.2-9.el7.x86_64.rpm安装,如果系统提示却依赖包,可以加--force--nodeps参数忽略,不建议,这样安装的包有很大的几率不能正常工作。
安装好vsftpd后痛苦才真正开始。
首先启动vsftpd服务:servicevsftpd start
查询服务运行级信息:chkconfig--list vsftpd
可以看到这时6个运行级都是off,说明一下运行级的含义:
指定读系统服务要在哪一个执行等级中开启或关毕。
等级0表示:关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动
在这块我也是一知半解,根据网上说的,等级2到5都要on就对了,于是:chkconfig --level 2345 vsftpd on
在本地试下:ftpxxx.xxx.xxx.xxx(国际惯例xxx.xxx.xxx.xxx代表你的ip地址)
跳出提示,大概意思是目前的设置不允许匿名用户访问。好吧,意料之中,继续度娘。
修改配置文件/etc/vsftpd/vsftpd.conf
# 控制是否允许匿名用户登入,YES为允许匿名登入,NO 为不允许。默认值为YES。
anonymous_enable=YES
光匿名登录还不行,我还得指定几个Linux系统用户可以登录ftp,对于用户的访问控制可以通过/etc/vsftpd目录下的user_list和ftpusers文件来实现。
# 控制哪些用户可以访问或不能访问FTP服务器,里面写着用户名称。一个用户名称一行。有时候user_list文件在/etc目录下,文件名是vsftpd.user_list
userlist_file=/etc/vsftpd/user_list
# 是否启用user_list文件
userlist_enable=YES
# 决定user_list文件中的用户是否能够访问FTP服务器。若设置为YES,则user_list文件中的用户不允许访问FTP,若设置为NO,则只有user_list文件中的用户才能访问FTP。
userlist_deny=NO
注意坑爹的设计开始出现了,user_list文件里列出的用户到底是能访问还是不能访问ftp服务器,是由userlist_deny参数的值决定的。我就是在这里开始被绕晕的,为了让各位不至于再晕,我建议大家不管三七二十一先把这个参数值设为NO!原因后面我再说。
刚才还说到ftpusers文件也是控制用户访问FTP服务的,那跟user_list文件有什么区别呢?开始的时候我也迷惑了,把ftp用户在两个文件里都添加上了,想着这样总该万无一失了吧。
配置完成,接下来重启vsftpd服务:servicevsftpd restart
然后在客户端上用ftp用户登录,提示:PermissionDenied
我掀!这TM又是怎么回事?于是又是各种体位度娘,各种修改配置,各种姿势反复抽插……登录服务!对不起!终于度娘在被千百遍蹂躏后吐出这么一句:
“ftpusers列表中的用户不能访问FTP,这是vsftpd服务在启动后已经决定的,只要在这个列表里面用户都不能访问FTP,没有其它的开关可以控制”
我再掀!这设计也太坑爹了吧!ftpuser这名字起的就让人觉得是允许访问ftp的用户列表啊!要屏蔽的用户为什么不叫denied_user、forbidden_user什么的,好歹不会让人误会啊。这绝对是vsftpd的开发者当初脑抽了,弄出这么个不伦不类的设计。
所以各位该明白我为什么建议大家干脆把userlist_deny参数设置为NO了吧,这样配置以后,user_list文件中存放允许访问ftp服务的用户列表,ftpuser文件中存放不允许访问ftp服务的用户列表。这样至少可以把user_list和ftpuser两个文件的作用完全区分开,不至于混淆。
到此vsftpd安装和配置的坑爹之旅基本完成,至少ftp服务可以正常使用了。写作此文备忘,并供各位参考。如有帮助,谢谢打赏!
欢迎扫码关注我的微信公众号
请用金钱蹂躏我的自尊