1.卸载系统已经存在的ftp服务器

因为是源码安装,所以不能通过rpm -qa的方式查看是否已经安装ftp服务器,可以通过find / | grep vsftp*方式查看系统中存在哪些与vsftpd相关的文件,找出来通过rm删除。

以下删除代码为参考:

rm /usr/local/sbin/vsftpd
rm /usr/local/man/man5/vsftpd.conf.
rm /usr/local/man/man8/vsftpd.
rm /etc/xinetd.d/vsftpd
rm -rf /etc/vsftpd

2.解压源码包

tar -zxvf vsftpd-3.0..tar.gz

编码解决:

vi opts.c

将if (str_equal_text(&p_sess->ftp_arg_str,"UTF8 ON"))

更改成if (str_equal_text(&p_sess->ftp_arg_str,"DISABLE UTF8 ON"))

注意:安装之前,先查看系统是否为64位(用getconf LONG_BIT命令),需要更改vsf_findlibs.sh文件库中lib 路径,命令如下:

sed -i 's/lib\//lib64\//g' vsf_findlibs.sh

3.安装

完成以上步骤,到解压目录

3.1 查看系统版本,确定合适版本的ftp压缩包

使用

cat /etc/issue

cat /etc/redhat-release

(Linux查看版本当前操作系统发行版信息)

CentOS Linux release 7.1.1503 (Core)

。。。因此确定vsftpd-3.0.0.tar.gz,解压压缩包,命令为:
tar -zxvf vsftpd-3.0..tar.gz 

3.2 查看系统是32位还是64位的

getconf LONG_BIT
显示结果为:64
。。。系统为64位的,需要替换vsf_findlibs.sh文件夹中的lib路径,命令如下:
# sed -i 's/lib\//lib64\//g' vsf_findlibs.sh
否则会报下面错误
“o hash.o tcpwrap.o ipaddrparse.o access.o features.o readwrite.o opts.o ssl.o sslslave.o ptracesandbox.o ftppolicy.o sysutil.o sysdeputil.o seccompsandbox.o -Wl,-s -fPIE -pie -Wl,-z,relro -Wl,-z,now `./vsf_findlibs.sh`
/usr/bin/ld: cannot find -lcap
collect2: ld 返回 1
make: *** [vsftpd] 错误 1”

3.3 编译与安装

到解压的目录(/home/cloudlogin/vsftpd-3.0.0/)去make,没有错误,再去make install
如果安装过程没报错误,就表示安装成功。 安装成功,需要将解压目录下的vsftpd.conf文件复制到/etc/vsftpd目录下
cp vsftpd.conf /etc/vsftpd
执行
cp Redhat/vsftpd.pam /etc/pam.d/
将pam文件复制到/etc/pam.d目录下,
这个pam文件要重命名:
mv /etc/pam.d/vsftpd.pam /etc/pam.d/vsftpd
 然后在/etc/vsftpd/目录下创建chroot_list_file文件,往里面添加一行ftp123(即下面创建的用户)

3.4 添加用户并指定目录

 添加用户ftp123,并指定用户家目录/data/ftp_dir

 useradd -d /data/ftp_dir/ ftp123 
再修改用户ftp123密码
passwd ftp123
 两次输入密码:ftp!@#456

3.5 修改目录权限

chmod  /data/ftp_dir/
ll

3.6 修改配置文件/etc/vsftpd/vsftpd.conf

去掉注释并修改(禁止匿名访问),anonymous_enable=NO
去掉注释(允许本地用户访问),local_enable=YES
去掉日志注释,xferlog_std_format=YES
去掉注释并修改(连接超时时间),data_connection_timeout=120
去掉欢迎注释(登陆欢迎提示),ftpd_banner=Welcome to KJGG FTP service.
-------------这两句实现指定用户执行chroot-----------------------
去掉用户文件注释,chroot_list_file=/etc/vsftpd/chroot_list_file |
去掉注释,chroot_list_enable=YES                                |
-------------这两句实现指定用户执行chroot-----------------------
在最后一行添加如下内容,
    listen_port=21
    pasv_max_port=2100
    pasv_min_port=2100

3.7 修改防火墙,并重启

vi /etc/sysconfig/iptables/
添加如下内容:
-A OUTPUT -p tcp --sport  -j ACCEPT
-A OUTPUT -p tcp --sport -j ACCEPT
-A OUTPUT -p tcp --sport -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport -j ACCEPT

再重启

/usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf
 

4.验证

方式一:使用工具FileZilla(适用于ftp服务器有公网地址)
4.1.1 打开FileZilla,用填入连接信息
主机:用公网地址117.27.128.183
用户名:ftp123
密码:ftp!@#456
端口:21
(注:如果没有filezilla工具,请到https://filezilla-project.org/download.php?type=client下载)
4.1.2 测试是否只能在操作上面指定的目录(/data/ftp_dir/)
     并且是否能进行上传和下载
 
方式二:使用客户端软件ftp(适用于ftp服务器无公网地址)
4.2.1 安装
yum install ftp

4.2.2 登陆

ftp ip地址

  出现以上提示表示登陆成功了

4.2.3 上传文件
ftp> put
(local-file) index.html
(remote-file) index.html
local: index.html remote: index.html
Entering Passive Mode (,,,,,).
Ok to send data.
Transfer complete.
bytes sent in 0.00856 secs (278.25 Kbytes/sec)

下面看一个完整操作

5.安装常见问题

5.1  530 Login incorrect

解决思路:修改vsftpd.conf配置文件,添加pam_service_name=vsftpd配置,注意这里的配置文件值为:vsftpd,对应的是/etc/pam.d/vsftpd文件,所以复制到pam.d目录的vsftpd.pam需要进行改名;重启ftp验证。

如果还不能解决,可以考虑编辑vi /etc/pam.d/vsftpd,将文件中的所以lib替换为lib64,再重启ftp即可。

5.2    500 illegal port command

解决思路:出现这个问题时,可以考虑vsftpd连接模式问题,vsftpd存在两种连接模式,一个是主动连接,一个是被动连接。首先将ftp客户端的连接方式改为“被动连接”模式再进行ftp的连接。

如果还不行,可以考虑是不是服务器端口问题,比如服务器限制了只能访问几个端口,这是需要在配置文件中进行如下配置:

pasv_enable=YES //表示启动被动模式

pasv_min_port=9090 //被动模式最小端口

pasv_max_port=9091 //被动模式最大端口

pasv_address=172.16.4.160 //被动模式连接IP

注意pasv_address这个配置,这个配置默认为none,不进行设置,则客户端在连接的时候会先连接当前服务器内网IP地址,之后才连接外网IP地址,所以进行配置的时候,要指定地址,这样再连接的时候才会直接连接外网地址。

5.3     500 OOPS: cannot change directory:/home/xxxx

解决思路:遇到这个问题可以考虑是否是服务器的selinux防火墙开启了,可以通过一下命令进行防火墙关闭:setsebool -P ftpd_disable_trans 1,需要重启ftp,service vsftpd restart

还可以通过命令:sestatus -b | grep ftp查看ftp的状态,最主要查看ftp_home_dir的值是on 还是off,如果是off,通过命令setsebool -P  ftp_home_dir  on设置为on

5.4   530 Permission denied

解决思路:遇到这个问题可以考虑是否配置userlist_enable选项,查看/etc/vsftpd.user_list或者/etc/vsftpd/vsftpd.user_list是否限制了当前用户,将该用户从文件中删除或者设置userlist_deny=NO

5.5   500 OOPS: vsftpd: refusing to run with writable root inside chroot()

解决思路:这是因为从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。

 要修复这个错误,可以在vsftpd的配置文件/etc/vsftpd/vsftpd.conf添加一行“allow_writeable_chroot=YES”

5.6   500 Illegal PORT command.

状态:   正在连接 218.65.241.60:12021...
状态:   连接建立,等待欢迎消息...
状态:   不安全的服务器,不支持 FTP over TLS。
状态:   已登录
状态:   读取目录列表...
命令:   PWD
响应:   257 "/lutong/tomcat_admin_9090/webapps/boss_sync_user_data"
命令:   TYPE I
响应:   200 Switching to Binary mode.
命令:   PORT 172,16,4,200,201,1
响应:   500 Illegal PORT command.
命令:   PASV
响应:   227 Entering Passive Mode (90,114,3,18,8,52).
命令:   LIST
错误:   无法建立数据连接: ETIMEDOUT - 连接尝试超时
错误:   50 秒后无活动,连接超时

用FileZilla工具连接时,发现,报如上错误,这是因为没有指定被动模式,在/etc/vsftpd/vsftpd.conf最后添加如下几行,

#是否允许被动模式
pasv_enable=YES
#下面两行设置被动模式连接时的端口范围,建议配置大一点的,安全性高
pasv_max_port=
pasv_min_port=
pasv_address=ftp服务器ip #vsftp服务器指定IP地址

然后在/etc/sysconfig/iptables添加开放端端口

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

  即可

5.7   421 Timeout.

  修改/etc/vsftpd/vsftpd.comf的data_connection_timeout的值更大即可

6.配置文件

/etc/vsftpd/vsftpd.conf

#禁止匿名访问
anonymous_enable=NO
#开放本地用户的写权限
write_enable=YES
#设置本地用户的文件生成掩码为022,默认值为077
local_umask=
#当切换到目录时,显示该目录下的.message隐含文件的内容
#这是由于默认情况下有message_file=.message的 设置
dirmessage_enable=YES
#激活上传和下载日志
xferlog_enable=YES
#启用FTP数据端口的连接请求
connect_from_port_20=YES
#xferlog日志文件
xferlog_file=/var/log/xferlog
#使用标准的ftpd xferlog日志格式
xferlog_std_format=YES
#设置空闲的数据连接的的中断时间
data_connection_timeout=
#设置连接服务器后的欢迎信息
ftpd_banner=Welcome to KJGG FTP service. #下面四句配置保证只有/etc/vsftpd/user_list 的用户可以登陆
local_enable=YES #允许本地用户登录
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
userlist_enable=YES
#下面两句配置保证只有/etc/vsftpd/chroot_list的用户切换目录
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list_file
#设置PAM认证服务的配置文件名称,该文件存放 在/etc/pam.d/目录下
#pam_service_name=vsftpd
#tcp_wrappers=YES
#开启监听
listen=YES
#命令通道端口,默认21
listen_port= #是否允许被动模式
pasv_enable=YES
#下面两行设置被动模式连接时的端口范围,建议配置大一点的,安全性高
pasv_max_port=
pasv_min_port=
#vsftp服务器指定IP地址
pasv_address=ftp服务器ip #这是因为从2..5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!
#如果检查发现还有写权限,就会报该错误。要修复这个错误,需要添加下面一行
allow_writeable_chroot=YES

/etc/vsftpd/chroot_list_file

ftp123

/etc/vsftpd/chroot_list_file

ftp123

/etc/pam.d/vsftpd

#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth

7.其他

配置开机自启动
在/etc/rc.local添加
/usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf &
即可

CentOS下源码安装vsftpd-3.0.0,并设置指定用户访问指定目录(附带完整配置文件)的更多相关文章

  1. CentOS下源码安装Apache2.4+PHP5.4+MySQL5.5

    一.准备(把所有的源文件放在‘/home/yuanjun’目录下) apr http://mirror.bjtu.edu.cn/apache/apr/apr-1.4.6.tar.gz apr-util ...

  2. 在 CentOS 下源码安装 Xen

    http://www.vpsee.com/2010/04/install-xen-on-centos-from-source/ 在 CentOS 源码编译安装 Xen 的过程和在 Debian 上编译 ...

  3. Centos下源码安装git

    1.centos下git版本太久了,才1.8几,而官方更新的还是很活跃的,于是我就想源码安装一个新版本. 2.首先到: https://github.com/git/git/releases 下载最新 ...

  4. CentOS 下源码安装LAMP环境

    一.简介 什么是LAMP    LAMP是一种Web网络应用和开发环境,是Linux, Apache, MySQL, Php/Perl的缩写,每一个字母代表了一个组件,每个组件就其本身而言都是在它所代 ...

  5. CentOS下源码安装MySQL

    一.创建mysql用户与组,相关目录 useradd mysql -s /sbin/nologin mkdir /usr/local/mysql chown -R mysql.mysql mkdir ...

  6. 在CentOS下源码安装 Xen并搭建Windows虚拟机

    前言 首先要感谢xing的帮助,在他的指导之下才完成环境的搭建,本文档的部分内容来自他的文档.另外,还要感谢——互联网. 1.       环境介绍 Linux: CentOS 6.3 Xen: Xe ...

  7. CentOS下源码安装mplayer播放器

    http://www.mplayerhq.hu/MPlayer/releases/ [root@ok MPlayer-1.2.1]# pwd /root/MPlayer-1.2.1 http://ww ...

  8. centos 6x系统下源码安装mysql操作记录

    在运维工作中经常部署各种运维环境,涉及mysql数据库的安装也是时常需要的.mysql数据库安装可以选择yum在线安装,但是这种安装的mysql一般是系统自带的,版本方面可能跟需求不太匹配.可以通过源 ...

  9. CentOS 7下源码安装MySQL 5.7

    网上说linux安装mysql服务分两种安装方法: ①源码安装,优点是安装包比较小,只有几十M左右,缺点是安装依赖的库多,安装编译时间长,安装步骤复杂容易出错: ②使用官方编译好的二进制文件安装,优点 ...

随机推荐

  1. struts2.3.23升级到struts2.3.32

    新的漏洞 3月8号去审计厅培训系统的使用,那边计算机中心的负责人递过来一张如下图所示的文档,意思是发现了struts2的漏洞,需要进行修复. 在培训前,我登录到服务器中,看到了项目中,所有的服务器中应 ...

  2. 一次基于Vue.Js用户体验的优化

    .mytitle { background: #2B6695; color: white; font-family: "微软雅黑", "宋体", "黑 ...

  3. Spring-bean作用域scope详解

    Spring Framework支持五种作用域(其中有三种只能用在基于web的Spring ApplicationContext). singleton 在每个Spring IoC容器中一个bean定 ...

  4. R语言快速深度学习进行回归预测(转)

    深度学习在过去几年,由于卷积神经网络的特征提取能力让这个算法又火了一下,其实在很多年以前早就有所出现,但是由于深度学习的计算复杂度问题,一直没有被广泛应用. 一般的,卷积层的计算形式为: 其中.x分别 ...

  5. id 生成器介绍

    背景介绍 在一般的业务场景中, 初始的时候简单的自增数(比如MySQL 自增键)就可以很好的满足需求, 不过随着业务的发展和驱动, 尤其是在分布式的场景中, 如何生成全局的唯一 id 便成了需要慎重考 ...

  6. php 二级级联菜单

    找了很多个级联的菜单,都不好用,自己弄个简单点的,共享下,希望有朋友用得着 <?php //建立表country,有三个字段Id,parentId,area. $pro = $_POST['pr ...

  7. JavaScript中对事件简单的理解(1)

    事件(event) 1.什么是JavaScript事件? 事件是文档或浏览器中发生的特定交互瞬间. 2.事件流 事件流描述的是从页面中接受事件的顺序,包含IE提出的事件冒泡流与Netscape提出的事 ...

  8. .Net开发的两个小技巧

    一.@符号的妙用 1.可以作为保留关键字的标识符 C#规范当中,不允许使用保留关键字(class.bool等)当作普通的标识符来命名,这时候@符号作用就体现 出来了,可以通过@符号前缀把这些保留关键字 ...

  9. EF Core学习Code First

    下面通过实例来学习EF Core Code First,也就是通过EF Core迁移来完成从模型生成数据库. 本实例使用EntityFrameworkCore SQLite 数据库进行介绍,大家也可以 ...

  10. JQuery源码阅读记录

    新建html文件,在浏览器中打开文件,在控制台输入consoole.log(window);新建html文件,引入JQuery后在浏览器中打开,在控制台同样输入consoole.log(window) ...