注:以下所有操作均在CentOS 6.5 x86_64位系统下完成。

FTP的登录一般有三种方式,分别是:

  • 匿名用户形式:默认安装的情况下,系统只提供匿名用户访问,只需要输入用户anonymous/ftp,并将自己的Email作为口令即可登录。
  • 本地用户形式:以/etc/passwd中的用户名为认证方式。
  • 虚拟用户形式:支持将用户名和密码保存在文件或数据库中,将登录用户映射到指定的系统账号(/sbin/nologin)来访问资源,其中这些虚拟用户是FTP的用户。

这里我们选择了vsftpd这一款常用的FTP服务器软件来搭建FTP服务器。

#准备工作#

这里采用基于PAM的虚拟用户,需要先用yum来安装PAM的组件:

# yum install pam
# yum install pam-devel
# yum install db4-utils

另外,在默认配置下vsftpd需要使用nobody用户和/usr/share/empty这个目录,查看这两个东西是否存在,如果不存在则添加之(默认是都有了) :

# id nobody
uid=(nobody) gid=(nobody) 组=(nobody)
# ls /usr/share/empty

#vsftpd的安装#

vsftpd的源码包里并没有configure文件, 所以没办法类似安装其他软件那样指定安装路径,要修改只有两种方法:

  • 修改Makefile文件
  • 修改.c源文件

为了不至于过于麻烦, ,这里没有做任何修改,直接编译安装:

# wget https://security.appspot.com/downloads/vsftpd-3.0.3.tar.gz
# tar zxf vsftpd-3.0..tar.gz
# cd vsftpd-3.0.
# make && make install

注:x86_64位系统在make的时候可能会提示错误: 

/usr/bin/ld: cannot find -lcap

这是因为其只会去/lib/或/usr/lib/下查找,而x86_64应该去/lib64/和/usr/lib64/中查找才对,所以需要修改vsf_findlibs.sh文件:

# cp vsf_findlibs.sh vsf_findlibs.sh.default
# vim vsf_findlibs.sh // 统一把/lib/改成/lib64/,而/usr/lib则改成/usr/lib64

修改完之后再来编译安装:

# make clean
# make && make install # vsftpd -v
vsftpd: version 3.0.

这个时候表示安装已经成功。由于采用的是默认安装,所以应用这些默认配置:

  • 主程序文件:/usr/local/sbin/vsftpd
  • 主配置文件:/etc/vsfptd.conf
  • PAM认证文件:/etc/pam.d/vsftpd
  • 匿名用户主目录:/var/ftp
  • 匿名用户的下载目录:/var/ftp/pub

接下来修改配置文件并且创建默认的共享目录:

# mkdir /etc/vsftpd/
# cp /usr/local/src/vsftpd-3.0./vsftpd.conf /etc/vsftpd/vsftpd.conf
# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.default # mkdir -p /var/ftp/pub
# chown root:root /var/ftp
# chmod /var/ftp

然后尝试启动ftp服务器:

# /usr/local/sbin/vsftpd &
[]

在本地连接FTP服务器进行测试(如果当前系统没有ftp命令可以yum安装一个) :

# ftp 12.24.67.13
Connected to 12.24.67.13 (12.24.67.13).
(vsFTPd 3.0.)
Name (12.24.67.13:root): anonymous
Please specify the password.
Password:
Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> nlist
Entering Passive Mode (,,,1,,).
Here comes the directory listing.
nginx-1.7..tar.gz
php-5.6..tar.gz
are.tar
Directory send OK.
ftp> bye

注:由于默认是允许匿名用户登录的,所以用户名输入anonymous而口令直接回车输入空即可登录。 

至此,vsftpd已经安装完毕并可以正常启动,但是这种允许匿名的连接方式是不安全的,所以下面我们仍然需要进行一些安全配置来加固。

#vsftpd的安全配置# 

vsftpd的安全原则主要有两个:

  • 只允许支持虚拟用户登录,关闭本地用户和匿名用户。
  • 不允许使用root权限运行。

1)首先创建虚拟用户口令明文文件,使用前面安装的db4-utils组件生成口令认证文件:

# vim /etc/vsftpd/access.txt

brishenzhou
brishenzhou_pwd # db_load -T -t hash -f /etc/vsftpd/access.txt /etc/vsftpd/access.db

注:access.txt中一行用户名+一行密码,保持这样。 

2)编辑vsftpd的PAM认证文件:

# vim /etc/pam.d/vsftpd

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/access
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/access

注:这里使用的就是/etc/vsftpd/access.db文件。 

3)所有的虚拟用户都需要使用一个系统本地用户,所以这里创建一个不需要登录的系统本地用户,并且设定它的主目录是/data/vsftpd:

# id vsftpd
id: vsftpd:无此用户
# groupadd vsftpd
# mkdir -p /data/vsftpd/pub
# useradd -g vsftpd -d /data/vsftpd -s /sbin/nologin vsftpd
# id vsftpd
uid=(vsftpd) gid=(vsftpd) 组=(vsftpd) # chown -R vsftpd:vsftpd /data/vsftpd
# chmod a-w /data/vsftpd
# chmod /data/vsftpd/pub

注:由于需要启用chroot,这里的根目录/data/vsftpd必须不可写,所以不能上传文件,可以新增一个pub的目录来放上传的文件。 

4)配置vsftpd开启虚拟用户选项:

# vim /etc/vsftpd/vsftpd.conf

#禁止匿名用户
anonymous_enable=NO
local_enable=YES
write_enable=YES #不启动锁定用户名单,所有的用户都将被锁定不允许访问上级目录,只允许访问其主目录
chroot_local_user=YES
chroot_list_enable=NO #启动log
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/etc/vsftpd/vsftpd.log #开启虚拟用户
guest_enable=YES
#FTP虚拟用户对应的系统用户
guest_username=vsftpd
#PAM认证文件/etc/pam.d/vsftpd
pam_service_name=vsftpd virtual_use_local_privs=YES

4)最后让vsftpd加载指定的配置文件来启动:

# vsftpd /etc/vsftpd/vsftpd.conf &
[]

这个时候可以测试匿名用户是否可以登录:

# ftp 12.24.67.13
Connected to 12.24.67.13 (12.24.67.13).
(vsFTPd 3.0.)
Name (12.24.67.13:root): anonymous
Please specify the password.
Password:
Login incorrect.
Login failed.
ftp> bye

可以看到匿名用户已经没办法登录,接下来看虚拟用户:

# ftp 12.24.67.13
Connected to 12.24.67.13 (12.24.67.13).
(vsFTPd 3.0.)
Name (12.24.67.13:root): brishenzhou
Please specify the password.
Password:
Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> nlist
Entering Passive Mode (,,,1,,).
Here comes the directory listing.
Directory send OK.
ftp> bye

注:上面输入的密码是前面设置的对应brishenzhou用户的密码,密码是brishenzhou_pwd。

注:如果在ftp连接中出现如下错误:

 OOPS: prctl PR_SET_SECCOMP failed

则在/etc/vsftpd/vsftpd.conf文件中加入下面这句:

#vim /etc/vsftpd/vsftpd.conf

seccomp_sandbox=NO

注:如果在ftp连接中出现如下错误

425 Security: Bad IP connecting.

则在/etc/vsftpd/vsftpd.conf文件中加入下面这句:

#vim /etc/vsftpd/vsftpd.conf

pasv_promiscuous=YES

可以看到登录成功,并且登录上去看到的是系统本地用户vsftpd的目录:/data/vsftpd/。

如果是使用FlashFTP等软件登录,可以配置如下:

#vsftpd的启动/关闭#

为了方便,这里写一个service启动vsftpd的脚本:

# vim /etc/init.d/vsftpd

#!/bin/bash
#
# vsftpd This shell script takes care of starting and stopping
# standalone vsftpd.
#
# chkconfig: -
# description: Vsftpd is a ftp daemon, which is the program
# that answers incoming ftp service requests.
# processname: vsftpd
# config: /etc/vsftpd/vsftpd.conf
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit
[ -x /usr/local/sbin/vsftpd ] || exit
RETVAL=
prog="vsftpd"
start() {
# Start daemons.
if [ -d /etc/vsftpd ] ; then
for i in `ls /etc/vsftpd/*.conf`; do
site=`basename $i .conf`
echo -n $"Starting $prog for $site: "
/usr/local/sbin/vsftpd $i &
RETVAL=$?
[ $RETVAL -eq 0 ] && {
touch /var/lock/subsys/$prog
success $"$prog $site"
}
echo
done
else
RETVAL=1
fi
return $RETVAL
}
stop() {
# Stop daemons.
echo -n $"Shutting down $prog: "
killproc $prog
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
return $RETVAL
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
RETVAL=$?
;;
condrestart)
if [ -f /var/lock/subsys/$prog ]; then
stop
start
RETVAL=$?
fi
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac
exit $RETVAL # chmod +x /etc/init.d/vsftpd

另外,由于使用的是单独启动模式,而不是xinetd,所以修改文件:

# vim /etc/xinetd.d/vsftpd

disable:yes

之后,就可以使用以下命令来开启/关闭vsftpd了:

service vsftpd start
service vsftpd stop

#vsftpd的卸载# 

用于没有给vsftpd-3.0.3的安装指定安装目录,所以在卸载的时候需要把以下对应的文件删除:

# 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
# rm -rf /var/ftp
# rm -rf /data/vsftpd

【推荐】CentOS安装vsftpd-3.0.2+安全配置的更多相关文章

  1. [转]Tomcat9.0安装教程 Tomcat9.0环境变量配置教程

    [转]Tomcat9.0安装教程 Tomcat9.0环境变量配置教程 [转]超详细MySQL安装及基本使用教程

  2. CentOS安装vsftpd

    版本:vsftpd-3.0.2-9.el7.x86_64(CentOS是64位的). 1.安装vsftpd yum -y install vsftpd 2.配置vsftpd 修改配置前把原始配置文件备 ...

  3. Centos 安装vsftpd 服务器

    一:检查有没有安装vsftpd 二:安装vsftpd 三:安装之后重启 四:修改vsftpd配置文件 配置文件路径在/etc/vsftpd目录下 默认是注释掉的,把#号去掉 然后重启vsftpd 五: ...

  4. centos 安装 vsftpd

    1.安装vsftpd yum -y install vsftpd 2.编辑vsftpd的配置文件 cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf- ...

  5. Linux\CentOS 安装 vsftpd 服务器

    安装 查看电脑是否存在 vsftpd 服务器 rmp -qa|grep vsftpd 如果有就删除,没有就使用yum 安装 vsftpd yum -y install vsftpd 配置 在根目录下创 ...

  6. CentOS 安装Nginx1.14.0

    原文地址:http://www.cnblogs.com/ascd-eg/p/9275441.html 一.安装所需环境   1.gcc 安装         yum install gcc-c++   ...

  7. centos 安装 redis3.2.0 集群

    这里创建6个redis节点,其中三个为主节点,三个为从节点. redis和端口对应关系: 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 从: 127.0.0 ...

  8. centos 安装 opencv-3.1.0

    官方安装教程 http://docs.opencv.org/3.1.0/d9/d52/tutorial_java_dev_intro.html#gsc.tab=0 注意要先安装jdk和apache a ...

  9. CentOS安装python3.5.0+uwsgi+nginx

    1安装编译工具 yum install zlib-devel bzip2-devel openssl-devel python-devel kernel-devel libffi-devel ncur ...

  10. centos 安装单机版 redis4.0.10

    redis源码地址: http://download.redis.io/releases/ 下载 redis-4.0.10.tar.gz  和  redis-stable.tar.gz 第一步:安装g ...

随机推荐

  1. C# Enum,Int,String的互相转换 枚举转换

    Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...

  2. ios 学习笔记之控件属性

    1.文本框 设置密码属性:Secure Text Entry 勾选; 设置文本框带清除属性: Clear Button =Is always visible;  默认是不带清除属性:Never app ...

  3. Java异常处理机制 try-catch-finally 剖析

    Java拥有着强大的异常处理机制,最近初步学习了下,感觉内容还是挺多的,特此来将自己的理解写出来与大家分享. 一. 在Java代码code中,由于使用Myeclipse IDE,可以自动提醒用户哪里有 ...

  4. 配置Java SSL 访问网站证书

    最近在开发 Java 访问 Azure ServiceBus 时遇到SSL证书问题,导致JAVA报错,不能正常访问,报错信息如下: javax.net.ssl.SSLException: Connec ...

  5. 转载:《TypeScript 中文入门教程》 7、模块

    版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 关于术语的一点说明: 请务必注意一点,TypeScript 1.5里术语名已经发生了变 ...

  6. swift 之 纯代码创建 cell

    初学swift 但是网上只有很多swift用xib创建的cell,就算是有也不是我想要的.今天自己弄了一个不用xib纯代码写的,来上代码 博客地址: https://github.com/liguol ...

  7. android raw和assets的区别

    *res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. *res/raw和assets的不同点: 1**.res/raw中的文件会被映 ...

  8. sqlserver性能调优第一步

    相信不少的朋友,无论是做开发.架构的,还是DBA等,都经常听说“调优”这个词.说起“调优”,可能会让很多技术人员心头激情澎湃,也可能会让很多人感觉苦恼,不知道如何入手.当然,也有很多人对此不屑一顾,因 ...

  9. Google LOGO现代舞舞蹈动画

    效果预览:http://hovertree.com/texiao/js/5.htm 截图: HTML文件代码: <!DOCTYPE html> <html xmlns="h ...

  10. 判断用户输入的银行卡号是否正确--基于Luhn算法的格式校验

    开发中,有时候,为了打造更好的用户体验,同时减轻服务器端的压力,需要对于一些如,手机号码,银行卡号,身份证号码进行格式校验 下面是判断银行卡号输入是否正确的代码(基于Luhn算法的格式校验): iOS ...