需求:

要在公司内网搭建一个 ftp 服务,基本满足以下场景即可:

  • 研发同学可以使用自己的账号上传/下载文件到各自的 home 目录
  • 大家都可以将某些文件放在某个公共目录,所有人都可以免密码通过 ftp 协议在浏览器查看这些公共目录及其中的文件.

第二个需求主要是为了方便美工妹妹: 美工可以登录自己的ftp账号上传原型图,切图等文件,然后将 ftp 协议的 url 发给研发同学们. 研发同学可以在浏览器打开这个 url,或者使用 ftp 软件查看,但不能修改其中的内容.

另1: 美工妹妹用了 Marketch 这个东西做原型,可以把原型做成网页,可以直接在原型图上下载切图,配合浏览器使用,还是很方便的.

另2: 公司内网服务器安装了 CentOs 6.5

搭建:

大家各自访问各自的 home 目录容易实现,网上很多配置vsftp的文章,这里不再赘述.

公共目录的建立也容易,就是修改 /etc/vsftpd/vsftpd.conf 设置匿名用户访问有只读权限即可.

所有实名用户都可以往公共目录仍东西,是受网上某篇大牛的文章启发,在每个人的 home 目录下,建立一个 ftp_public 目录,并用 mount --bind 命令将公共目录绑定到大家的这个目录下.

mount --bind /ftp_public /home/user/ftp_public

这样就可以实现第二个需求了.再利用 linux 权限管理,就可以实现公共目录中的各种文件权限设置了.

因为这个策略随时会有调整,因此并没有把挂载信息写进 fstab 里面去.写了个脚本,每次开机的时候执行下就可以了:

#!/bin/bash#       AUTHOR : liuxu
#       DATE   : 2016-11-23
#       mount public ftp directory for each developerFTP_DIR=/ftp_public
FTP_DIR_NAME=ftp_publicif [ $UID -ne 0 ]; thenecho "only root can run this script"
else# 这里执行了一个外部脚本,将用户账号列表导入进来.# 这样做是为了将脚本与人员配置分开.source developer_listfor u in ${DEVELOPERS[@]}; doif [ -d /home/$u ]; thenecho "setup public ftp dir for $u"d=/home/$u/$FTP_DIR_NAME;if [ ! -d $d ]; thenmkdir $d
# 因为是用 root 等账户运行该脚本,因此需要把目录权限改成各个账号的
# 开发账号都在一个叫 techops 的组里,因此把属主也改了,便于后续管理
chown "$u:techops" $d
fi  mount --bind $FTP_DIR $delseecho "setup public ftp dir for $u, home dir not found"fi  done
fi
# 下面这两句后面会有介绍的,都与 selinux 的权限有关
setsebool allow_ftpd_full_access on
chcon -R -t public_content_t /ftp_public

人员配置信息被放在了另外的文件,目的是将配置和罗辑分开. 配置文件如下:

#!/bin/bash
#       AUTHOR : liuxu
#       DATE   : 2016-11-23DEVELOPERS=(\JonSnow\RobStark\SansaStark\AryaStark\BrandonStark\RickonStark\JaimeLannister\TyrionLannister\CeiseLannister\
)

当然我可以这么做是因为用户不多,所以没有开启 vsftpd 虚拟用户功能.

如果开启的虚拟用户,还要建立公共目录,就没再继续研究了.

但是:

岂能尽如人意...似乎没有啥东西能一帆风顺的搞下来.(好吧,其实是好搞的大家记不住).

主要是各种权限问题.一开始看 vsftpd 配置文件没错,没有头绪.后来查到,奇怪的权限问题,多半是 SeLinux 的设置问题导致的.

网上有说直接关掉 SeLinux 的,一了百了.其实在我的使用场景上也是可以这么做的.因为公司小,人少,又是内网,关了完全没问题.

但作为一个文(zhuang)艺(bi)程序员,怎么能干这么不优雅的事情呢.还是要动手解决.

权限问题:

遇到了很多权限问题,当时没有记录下来,大体有

"550 Permission Deny" 问题

浏览器不能列出公共目录问题

文件浏览器 (both windows and ubuntu) 不能浏览ftp目录问题

因为遇到问题时没有记录,没法分条写下解决方案.但其实套路就是:

1. 查看 /etc/vsftpd/vsftpd.conf 相关配置是否正确

2. 打开默认关闭的 SeLinux 相关选项

3. 用户登录问题可能需要修改 PAM: /etc/pam.d/vsftpd . 因为没遇到类似问题,因此没深入了解.

vsftpd 的配置方法网上铺天盖地,不赘述.

ftp 与 SeLinux 相关的内容,个人觉得网上各位的叙述太杂乱了.不过这也没办法,大家遇到的问题各自不一样,各自的环境也不一样.

但其实,没必要那么麻烦遇到每个 SeLinux 相关问题都去网上找的.自己看看相关配置,很快就可以搞定的.

首先查看与 ftp 相关的选项:

$ getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> on
ftpd_connect_db --> off
ftpd_use_fusefs --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_use_cifs --> off
tftp_use_nfs --> off

然后...自己挨个查查每个选项的意思吧,然后试试,看看把哪个选项打开能解决自己的问题.

其实看着这些字段名,再稍微搜索下,各种权限问题就都可以很快解决的.

$ setsebool ftpd_use_passive_mode on
$ setsebool allow_ftpd_full_access on

配置防火墙端口问题:

主动模式下配置 iptables 开启 20 及 21 端口即可:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

被动模式下需要开一个端口号段:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7500:7600 -j ACCEPT

关于主动模式和被动模式,看了一遍就忘了,理解不深入,用到时再研究吧.

公共目录配置 SeLinux 权限问题:

然后就是遇到了一个怎么搜索都没搜到解决办法的问题:

某次服务器重启后,无论实名还是匿名访问公共目录,目录下的目录可以显示,但目录下的文件都显示不出来了.访问其他目录都正常.

各种地方都搜了,都没有搜到有人碰到类似问题. 后来自己尝试调了下上文列出的 SeLinux 参数,实名用户倒是可以正常访问公共目录了. 但匿名用户依然有问题.

再后来,因为查另一个问题,去了 redhat 官网,顺便搜了下这个问题. 这才解决掉.

其实就是执行下面这句:

chcon -R -t public_content_t /ftp_public

chcon 用于修改某对象的安全上下文. 上面那句就是说,设置要把某目录对匿名用户 (nobody) 开放. 这还是 SeLinux 的相关设置.

但为什么 ftp 公共目录在重启服务器前是可以正常访问的,我就不知道了. 有空还得详细的研究下 SeLinux .

总结:

上面遇到的全部问题,在 redhat 官网的这份文档中都已经给予解答了,只是我们总是想找快餐式答案,忽略了这些根基性的优质文档.

建议各位想要在 CentOS 上搭建 vsftp, 之前又没有经验的同学,先把这篇文档读通,多数问题就都知道怎么办了. 文档地址如下:

vsftpd deploy guide

[积累] CentOS 配置 vsftpd 搭建 ftp 服务相关推荐

  1. 15.1-15.3 FTP,使用vsftpd搭建FTP服务

    FTP介绍 FTP是File Transfer Protocol(文件传输协议,简称文传协议)的英文简称,用于在Internet上控制文件的双向传输. FTP的主要作用就是让用户连接一个远程计算机(这 ...

  2. 在Linux4.1.15上使用vsftpd搭建FTP服务问题解析

    在Linux4.1.15上使用vsftpd搭建FTP服务问题解析 BUG1:在windows系统登陆arm Linux FTP时,显示"服务器不允许匿名登录,或者不接受该电子邮件地址&quo ...

  3. CentOS 7安装配置vsftpd做FTP服务

    Linux菜鸟,还没用过FTP服务:在Windows下用的是Filezilla,一开始还在想Linux下也用它,因为知道它是开源的,在Linux下用它更显得理所当然了,后来发现网上介绍大多都vsftp ...

  4. Linux使用vsftpd搭建FTP服务

    安装vsftpd软件 yum install -y vsftpd 启动服务 启动: service vsftpd start 停止: service vsftpd stop 重启: service v ...

  5. 在阿里云主机上基于CentOS用vsftpd搭建FTP服务器

    最近需要在一台阿里云的云服务器上搭建FTP服务器,在这篇博文中分享一下我们根据实际需求进行的一些配置. ftp软件用的是vsftpd. vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序 ...

  6. RHEL5中配置vsftpd搭建FTP服务器

    RPM安装包名:vsftpd-2.0.5-10.el5.i386.rpm (第二张光盘) 下载地址:http://vsftp.beasts.org  源代码最新版本:vsftpd-2.0.5.tar. ...

  7. Centos配置iptables开放ftp服务

    安装完vsftpd后,默认情况下,CentOS的防火墙是不开放ftp服务的,需要添加模块和开放21端口才能提供ftp访问. 1.添加ip_conntrack_ftp 模块 [root@hexuweb1 ...

  8. 15、2 使用vsftpd搭建ftp服务

    安装vsftpd工具 centos中默认自带vsftpd安装包. yum install -y vsftpd 创建用户: useradd -s /sbin/nologin virftp 说明: vsf ...

  9. xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务

    exportfs命令 exportfs命令可以添加共享目录不用重启nfs服务, 测试:首先更改服务器端的nfs配置文件 [root@100xuni1 ~]# vim /etc/exports ##增加 ...

最新文章

  1. OpenFeign 全方位讲解
  2. 第三十三篇、富文本 NSMutableAttributedString
  3. GitHub https链接中输入账户和密码
  4. 《Linux设备驱动开发详解 A》一一2.3 接口与总线
  5. DL之模型调参:深度学习算法模型优化参数之对深度学习模型的超参数采用网格搜索进行模型调优(建议收藏)
  6. python条件语句练习题_python学习-7 条件语句 while循环 + 练习题
  7. java中抓阄_如何进行抓阄
  8. 为什么这几年餐饮创业突然火起来了?
  9. python input函数用法mac_sublime text3解决input()函数无法使用的问题(Python)
  10. html实现点击直接下载文件-前端教程
  11. Google登陆集成笔记-含坑
  12. 51nod 范德蒙矩阵
  13. 微信公众号怎么把网页链接地址添加
  14. 设计模式1(策略模式)
  15. 左边是地狱右边也是地狱_我担任地狱首席执行官的时间
  16. 如何查看服务器bmc信息,服务器查看bmcip地址
  17. Linux命令-PV
  18. 1024程序员节前夕,Bug与Debug的随笔
  19. px、pt和em的区别
  20. JavaScript最简单的方法实现简易的计算器

热门文章

  1. 基于python pyvisa模块控制GPIB设备识别不到设备资源号问题
  2. 浅谈学校OA办公系统实施的必要性和可行性
  3. Ubuntu服务器的安装和配置----系统安装
  4. 杰理之在线调试EQ【篇】
  5. GameFramework食用指南
  6. 测试显示屏用什么软件测试,怎么对显示器进行测试
  7. 计算机专业就业率最低:正规军干不过游击队
  8. 解决恶意软件带来的困扰
  9. 第一章 MEMS惯性器件-加速度计误差分析
  10. 【渝粤题库】广东开放大学 形成性考核 - 副本 (13)