最近公司测试环境需要搭建ftp,正好自己稍微有点空且这方面确实不会,就自告奋勇说让我先试试,玩炸了你们再帮忙重装系统重新搭吧(手动滑稽),虽然最终是完成了,但是中间磕磕碰碰遇到一些小问题,到处查百度,最终得以解决,感觉有必要还是记录一下,以后自己再次搭建时候还可以参考(主要是另一个测试环境也是这样搭建了一遍,结果现在搭的时候又遇到各种问题,感觉有记录的必要)

第一步:

输入命令:rpm -qa |grep vsftpd,用于查看是否已经安装vsftpd,如果没有任何输出,则说明没有安装。

第二步:

如果没有安装,输入命令:yum -y install vsftpd,进行直接安装

PS:有些情况下该命令会报错,比如没连外网的情况下,该命令执行不了,具体如何解决还是得百度,这个暂时没遇到,但是好像挺麻烦的,好像要弄什么挂载镜像当源用啥的。

第三步:

添加ftp用户账号,命令如下:

useradd -d /home/ftptest ftptest  //创建用户ftptest,其主目录为/home/ftptest

passwd ftptest  //为用户ftptest设置密码,输入完该命令后会让你输两遍密码

usermod -s /sbin/nologin ftptest  //设定该用户仅能用于ftp

usermod -d /home/ftptest  //更改用户主目录为/home/ftptest,如果创建时候目录没指定错,就不需要这个命令了

PS:当时我请教的人,他说那个专门搞服务器的朱工说这样用useradd建立的用户不安全,应该弄一个只能用于ftp无法登陆服务器的账号,具体咋弄我和他也不清楚,反正先这样建着测试环境够用了

第四步:

修改相关配置文件,位置在/etc/vsftpd/vsftpd.conf,我的配置具体内容如下,注意我 // 注释只是为了方便这里看,实际上linux那边这样是不认的

anonymous_enable=NO //允许匿名访问
local_enable=YES //允许本地用户访问
write_enable=YES //允许写入,修改权限
local_umask=022 //本地用户文件上传后的权限是-rw-r--r,本地用户上传最高权限为666,默认权限为666-022=644,即local_umask=022
dirmessage_enable=YES //是否显示目录说明文件, 默认是YES
xferlog_enable=YES //如果启用该选项,系统将会维护记录服务器上传和下载情况的日志文件。默认情况下,该日志文件为 /var/log/vsftpd.log。但也可以通过配置文件中的 vsftpd_log_file 选项来指定其他文件。默认值为NO
connect_from_port_20=YES //确保ftp-datad 数据传送使用port 20(20号端口)
xferlog_std_format=YES //如果启用该选项,传输日志文件将以标准 xferlog 的格式书写,该格式的日志文件默认为 /var/log/xferlog,也可以通过 xferlog_file 选项对其进行设定。默认值为NO
chroot_local_user=YES //是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)
chroot_list_enable=NO //是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用)
chroot_list_file=/etc/vsftpd/chroot_list //否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值,当其为yes时,该文件为排除名单,为no时,该文件为限制名单
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES //为yes时, /etc/vsftpd/user__list文件中的用户将不能访问vsftpd服务器
userlist_deny=NO //默认没有这一项,与下面这条参数:userlist_file=/etc/vsftpd/localuser_list 结合使用。
userlist_file=/etc/vsftpd/user_list //默认没有这一项,uerlist_deny为YES时,这里面的用户则不能登录,当为NO时,这里面的用户可以登录,和/etc/vsftpd/user_list是一个意思
tcp_wrappers=YES //大概意思是是否用防火墙过滤一些请求,一种控制主机访问的安全工具
allow_writeable_chroot=YES //只能访问自身所属目录
pasv_enable=Yes //启用被动模式
pasv_max_port=10100 //被动模式下最高端口
pasv_min_port=10090 //被动模式下最低端口

第五步:

启动或重启ftp服务(如果之前已经启动了的话)

启动命令:service vsftpd start

重启命令:service vsftpd restart

PS:好像不同版本的linux,启动重启ftp的命令不同?百度资料时候似乎有看到过这说法

第六步:

不出意外,此时会感觉已经大功告成了,没错,ftp本身应该是已经完事了,但是防火墙的21端口还没开出去,客户端连接时候应该是一直连不上。

开放端口:firewall-cmd --permanent --zone=public --add-port=21/tcp

重启防火墙:firewall-cmd --reload

第七步:

此时此刻好像真的完成了,21开放,客户端能请求并输入账号密码了,但是会发现登陆是成功了,却经常报如下错误:

200 port command successful. consider using pasv 425 failed to establish connection

百度上有说是什么客户端防火墙问题的,有说是selinux要关掉的,有说是ftp用户权限没设置好的,有说是用户主目录没建的

以上可能性不能说没有,但是我这边经确认问题在于被动模式的端口没开放

开放端口:firewall-cmd --permanent --zone=public --add-port=10090-10100/tcp

PS:注意这个10090-10100请配合上面那个配置文件使用,另外请别忘记还得重启防火墙。

第八步:

感觉这下是真的完成了,此时用工具连接,会发现登陆正常,也没报错,然而真是这样么,不,你不是,你没有,别瞎说啊(手动滑稽),你会发现目录是空白一片,上传文件也是失败,

仔细看提示框,会发现如下提示:

226 Transfer done (but failed to open directory).

此时,先执行setstatus -v ,会得到如下结果

SELinux status:                 enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: enforcing
Policy version: 21
Policy from config file: targeted

或者直接输入getenforce,会得到结果enforcing或者permissive。

如果发现结果是enforcing,说明此时你是被selinux给拦住了。

此时执行一句setenforce 0即可。

PS:实际上这个操作还是把selinux给关了,也可以采用改配置文件再重启的方式去关闭,只是这样不需要重启而已。其实我是很不想去把这玩意关掉的,根据百度各种说明,好像这是个什么很流弊的安全方面的东西。。但是实在搞不定,只好这样了。

最后:

此时此刻,才是真的完事了,打开ftp工具,连接,上传下载,一气呵成。之所以这次要记录,主要是也是为了记第六七八的这三步,百分之80的时间都耗费在这里了(如果yum用不了的话。。我估计那里也会耗费大量时间)

记一次linux上的ftp搭建过程的更多相关文章

  1. linux上构建ftp服务器

    linux上构建ftp服务器 服务器搭建 https://help.aliyun.com/knowledge_detail/60152.html,可以参考这篇博文. 配置文件详解 进入/etc/vsf ...

  2. Linux上的ftp服务器vsftpd之配置满天飞--设置匿名用户访问(不弹出用户名密码框)以及其他用户可正常上传

    一.问题背景 没事谁折腾这鬼玩意哦...还不是因为bug. 我们的应用,用户头像是存在ftp上的.之前的ftp服务器是一台windows,我们后台服务器程序收到用户上传头像的请求时,会用一个ROOT/ ...

  3. 在Linux上用Apache搭建Git服务器

    在Linux上用Apache搭建Git服务器   最近在学Linux,终于在Linux上用Apache搭建起了Git服务器,在此记录一下. 服务器:阿里云服务器 Linux版本:CentOS 6.5 ...

  4. 记一次Linux系统被入侵的过程

    记一次Linux系统被入侵的过程 1. 前期现象 前期现象,宋组那边反应开发环境192.161.14.98这台机器通过公网下载文件,很慢,ping百度丢包严重.因为这台机器是通过楼下adsl拨号上网, ...

  5. JProfiler远程监控Linux上Tomcat的安装过程细讲(步骤非常详细!!!)

    JProfiler远程监控Linux上Tomcat的安装过程细讲(步骤非常详细!!!) 1.文件准备: 服务器:CentOS Linux release 7.3.1611 (Core)     Apa ...

  6. 【数据库开发】在Windows上和Linux上配置MySQL的过程

    [数据库开发]在Windows上和Linux上配置MySQL的过程 标签(空格分隔): [编程开发] 首先是在Windows上尝试用QT进行MySQL数据库开发,结果总出现driver不能load的错 ...

  7. linux上nginx+apache 搭建 svn服务器

    众所周知,nginx目前是不支持svn的,并且由于机房网络只开了80和22(ssh)端口,所以这时候就没法单独在服务器上搭建apache+svn .所以就产生了 nginx + apache + sv ...

  8. JDK 在 Linux 上安装的详细过程

    1.下载JDK Linux上一般会安装Open JDK,如果有系统预装了OpenJDK的话需要先卸载掉OpenJDK, 卸载过程可以参考这里:https://www.cnblogs.com/sxdcg ...

  9. Linux上rpm实战搭建FTP服务器

    1.检测是否已安装FTP服务 # rpm -qa|grep vsftpd 2.未安装ftp服务的前提进行使用rpm安装 # yum install vsftpd -y Loaded plugins: ...

随机推荐

  1. 1、写在开头的话——Tinking in Java 绪论之我见

    新兵道歉!版式不懂,技术若有错误,请指正,或发我邮箱1300431700@qq.com 不胜感激! 本文力图通过文章总结的形式,阐述自己的观点,迫使自己思考书中精髓,即使跟技术无关! 正文开始! “上 ...

  2. C#中方法、类等的默认访问修饰符~

    C# 方法默认访问级别 : private C# 类默认访问级别 : internal 1.命名空间下的元素的默认访问修饰符 public : 同一程序集的其他任何代码或引用该程序集的其他程序集都可以 ...

  3. CentOS 7 配置DHCP中继代理服务

    DHCP服务器只作用于局域网同一网段内,客户端是通过广播消息来获得DHCP服务器响应后才能得到IP地址的,但广播消息不能跨越子网,那么如何让客户端获取到DHCP服务器提供的IP地址呢?这就是DHCP中 ...

  4. SuperSocket基础二

    SuperSocket基础(二)-----一个完整的SocketServer项目 由于时间关系未能及时更新,关于SuperSocket,对于初学者而言,一个SuperSock的Server真的不好写. ...

  5. work-7.2

    安装ubuntu,jdk ,git,maven,Intellij. 配置GIT时,需要将在本地生成的公钥粘贴到服务端. 先占个座,具体过程待补充. -------------------------- ...

  6. cocos dos命令

  7. 使用4K分辨率,然后放大DIP200%,软件界面异常.

    简单:WFM主界面.AutoScaleMode  选中DIP,然后使用表格容器,容器分割,容器.就可以快速迁移旧程序. 复杂点:读取桌面分辨率,DIP放大....

  8. Recycle----项目总结

    github项目地址:https://github.com/HuChengLing/recycle 软件规模: 我们这个Recycle app属于一个小型项目,整体规模不大.预期有垃圾回收和二手品交易 ...

  9. dotnetcore ef 调用多个数据库时用户命令执行操作报错

    dotnetcore ef 调用多个数据库时用户命令执行操作报错 1.多个DbContext 时报错: 报错: More than one DbContext was found. Specify w ...

  10. PHP的openssl加密

    PHP的openssl扩展 openssl扩展使用openssl加密扩展包,封装了多个用于加密解密相关的PHP函数,极大地方便了对数据的加密解密. 常用的函数有: 对称加密相关: string ope ...