最近公司测试环境需要搭建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. Vue学习3:计算属性computed与监听器

    下面是计算属性相关代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  2. 【数据结构】算法 LinkList (Remove Nth Node From End of List)

    删除链表中倒数第n个节点 时间复杂度要控制在O(n)Solution:设置2个指针,一个用于确定删除节点的位置,一个用于计算倒数间距n.移动时保持2个指针同时移动. public ListNode r ...

  3. CentOS7编译安装SVN(subversion1.9.7)

    参考连接0:http://www.programering.com/a/MDMzYDMwATg.html参考连接1:http://www.zsythink.net/archives/13180.系统信 ...

  4. Javascript基础语法(一)

    一.Javascript简介 1. 定义 基于事件和对象驱动,并具有安全性能的脚本语言. 2. 出现背景 上世纪90年代,在美国有出现,当时有上网的环境,并且有网站服务在运行. 注册服务 上图涉及的问 ...

  5. 基于Zookeeper实现多进程分布式锁

    一.zookeeper简介及基本操作 Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化.当对目录节点监控状态打开时,一旦目录节点的状态发生变化,Watc ...

  6. Python 递归计算分数数列

    C语言的课后习题 求数列:2/1,3/2,5/3,8/5,13/8,21/13,...前50项的和 数列规律: 第二项的分母是[前一项分子] 第二项的分子是[前一项分子与分母的和] from frac ...

  7. 小米系统获取root权限的完整教程

    小米系统通过什么方法拥有root超级权限?我们都清楚,安卓机器有root超级权限,如果手机拥有root相关权限,能够实现更好的功能,打个比方我们企业的营销部门的同事,使用大多数营销应用都需要在root ...

  8. Oracle GoldenGate 18.1发布

    软件下载地址:https://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html 文档下载地址: https:/ ...

  9. html禁止页面滚动

    <div @touchmove.prevent></div> @touchmove.prevent   //加到标签上禁止滚动

  10. Linux网络属性管理

    Linux网络属性管理 局域网:以太网,令牌环网 Ethernet: CSMA/CD 冲突域 广播域 MAC:Media Access Control 48bits: 24bits: 24bits: ...