【推荐】CentOS安装vsftpd-3.0.2+安全配置
注:以下所有操作均在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+安全配置的更多相关文章
- [转]Tomcat9.0安装教程 Tomcat9.0环境变量配置教程
[转]Tomcat9.0安装教程 Tomcat9.0环境变量配置教程 [转]超详细MySQL安装及基本使用教程
- CentOS安装vsftpd
版本:vsftpd-3.0.2-9.el7.x86_64(CentOS是64位的). 1.安装vsftpd yum -y install vsftpd 2.配置vsftpd 修改配置前把原始配置文件备 ...
- Centos 安装vsftpd 服务器
一:检查有没有安装vsftpd 二:安装vsftpd 三:安装之后重启 四:修改vsftpd配置文件 配置文件路径在/etc/vsftpd目录下 默认是注释掉的,把#号去掉 然后重启vsftpd 五: ...
- centos 安装 vsftpd
1.安装vsftpd yum -y install vsftpd 2.编辑vsftpd的配置文件 cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf- ...
- Linux\CentOS 安装 vsftpd 服务器
安装 查看电脑是否存在 vsftpd 服务器 rmp -qa|grep vsftpd 如果有就删除,没有就使用yum 安装 vsftpd yum -y install vsftpd 配置 在根目录下创 ...
- CentOS 安装Nginx1.14.0
原文地址:http://www.cnblogs.com/ascd-eg/p/9275441.html 一.安装所需环境 1.gcc 安装 yum install gcc-c++ ...
- 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 ...
- 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 ...
- CentOS安装python3.5.0+uwsgi+nginx
1安装编译工具 yum install zlib-devel bzip2-devel openssl-devel python-devel kernel-devel libffi-devel ncur ...
- centos 安装单机版 redis4.0.10
redis源码地址: http://download.redis.io/releases/ 下载 redis-4.0.10.tar.gz 和 redis-stable.tar.gz 第一步:安装g ...
随机推荐
- 【十大经典数据挖掘算法】C4.5
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 决策树模型与学习 决策树(de ...
- Xamarin.Android之封装个简单的网络请求类
一.前言 回忆到上篇 <Xamarin.Android再体验之简单的登录Demo> 做登录时,用的是GET的请求,还用的是同步, 于是现在将其简单的改写,做了个简单的封装,包含基于Http ...
- Spring 3.0 AOP (一)AOP 术语
关于AOP.之前我已写过一个系列的随笔: <自己实现简单的AOP>,它的关注点在于实现.实现语言是C#,实现方式为 自定义实现 RealProxy 抽象类.重写Invoke方法,以便进行方 ...
- log4net的使用
1.0 下载并引用 log4net.dll 2.0 修改Web.config <configuration> <configSections> <section name ...
- 客户端调用 WCF 的几种方式
转载网络代码.版权归原作者所有..... 客户端调用WCF的几种常用的方式: 1普通调用 var factory = new DataContent.ServiceReference1.Custome ...
- 如何在ASP.NET的web.config配置文件中添加MIME类型
常常有一些特殊的MIME类型是IIS中没有的,一般来说要我们自己手动添加.如果网站经常更换服务器或者网站代码是提供给多个用户使用,那么会造成网站中用到的特殊的MIME类型要经常性的在IIS上配置.这里 ...
- 变通实现微服务的per request以提高IO效率(二)
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- 深入理解和应用Float属性
一.Float的特性 1. 应用于文字围绕图片 2. 创建一个块级框 3. 多列浮动布局 4. 浮动元素的宽度.高度自适应,但可以设置其值. 二.核心解决的问题 文字围绕图片:img标签与多个文本标签 ...
- CSS的::selection使用方法
请选择本页面文本看看:http://hovertree.com/h/bjaf/38hq6y9d.htm CSS改变默认文本选中的颜色的方法 一般情况下在网页里的文本我们用鼠标选中的时候都是蓝色的,这个 ...
- Android开发—已root的手机获取data路径
开发android的时候,尽管手机已经root但是DDMS中还是没有data/data路径怎么办? 可以用cmd命令提示符为逐个文件夹设置权限: 打开cmd,输入 adb shell 回车—> ...