【推荐】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 ...
随机推荐
- 通过寄生组合式继承创建js的异常类
最近项目中在做js的统一的异常处理,需要自定义异常类.理想的设计方案为:自定义一个异常错误类BaseError,继承自Error,然后再自定义若干个系统异常,例如用户取消异常.表单异常.网络异常,这些 ...
- gradle中使用嵌入式(embedded) tomcat, debug 启动
在gradle项目中使用embedded tomcat. 最开始部署项目需要手动将web项目打成war包,然后手动上传到tomcat的webapp下,然后启动tomcat来部署项目.这种手动工作通常还 ...
- 在AngularJS中的使用Highcharts图表控件
一.Highcharts简介 Highcharts是一款非常好用的前端图表控件,正如其中文网介绍的那样:功能强大.开源.美观.图表丰富.兼容绝大多数浏览器的纯js图表库. 如果你的项目是基于jquer ...
- webpack+vue-cli项目打包技巧
1.设置config文件夹index.js中productionSourceMap的值为false,也就是设置webpack配置中devtool为false,打包后文件体积可以减少百分之八十!!!!! ...
- Nancy之Pipelines三兄弟(Before After OnError)
一.简单描述 Before:如果返回null,拦截器将主动权转给路由:如果返回Response对象,则路由不起作用. After : 没有返回值,可以在这里修改或替换当前的Response. OnEr ...
- WPF平台Grid控件性能比较
WPF官方发布第一个版本至今已经有10年了, 我们几乎在同时也开始了XAML开发.即使经过多年打造,我们依旧尝试提高:我们真的成功打造了高效灵活的控件吗?我没有在其他地方找到任何关于优秀的WPF表格性 ...
- luogg_java学习_13_GUI
本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! GUI 容器 JFrame , JPanel , JS ...
- php中用GD绘制折线图
php中用GD绘制折线图,代码如下: Class Chart{ private $image; // 定义图像 private $title; // 定义标题 private $ydata; // 定 ...
- Matlab 之 字符串数组查找
Matlab的优势在于向量操作,字符串操作往往费时费力,但是如果能充分利用Matlab自带的一些函数,也可以取得不错的效果.下面就介绍一下字符串数组查找的小技巧. 字符串数组我通常会选择应用cell格 ...
- 用R语言的quantreg包进行分位数回归
什么是分位数回归 分位数回归(Quantile Regression)是计量经济学的研究前沿方向之一,它利用解释变量的多个分位数(例如四分位.十分位.百分位等)来得到被解释变量的条件分布的相应的分位数 ...