阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS安装vsftpd-3.0.2及安全配置

166次阅读
没有评论

共计 6314 个字符,预计需要花费 16 分钟才能阅读完成。

注:以下所有操作均在 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=99(nobody) gid=99(nobody) 组 =99(nobody)
#
ls /usr/share/empty

#vsftpd 的安装 #

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

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

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

# wget https://olex-secure.openlogic.com/content/openlogic/vsftpd/3.0.2/vsftpd-3.0.2.tar.gz
# tar zxf vsftpd-3.0.2.tar.gz
# cd vsftpd-3.0.2
# 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.2

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

  • 主程序文件:/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.2/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 755 /var/ftp

然后尝试启动 ftp 服务器:

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

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

# ftp 12.24.67.13
Connected to 12.24.67.13 (12.24.67.13).
220 (vsFTPd 3.0.2)
Name (12.24.67.13:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> nlist
227 Entering Passive Mode (12,24,67,13,100,50).
150 Here comes the directory listing.
nginx-1.7.8.tar.gz
php-5.6.4.tar.gz
are.tar
226 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=504(vsftpd) gid=504(vsftpd) 组 =504(vsftpd)

# chown -R vsftpd:vsftpd /data/vsftpd
# chmod a-w /data/vsftpd
# chmod 777 /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 &
[1] 19570

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

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

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

# ftp 12.24.67.13
Connected to 12.24.67.13 (12.24.67.13).
220 (vsFTPd 3.0.2)
Name (12.24.67.13:root): brishenzhou
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> nlist
227 Entering Passive Mode (12,24,67,13,54,136).
150 Here comes the directory listing.
226 Directory send OK.
ftp> bye

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

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

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

CentOS 安装 vsftpd-3.0.2 及安全配置

#vsftpd 的启动 / 关闭 #

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

# vim /etc/init.d/vsftpd

#!/bin/bash
#
# vsftpd      This shell script takes care of starting and stopping
#             standalone vsftpd.
#
# chkconfig: - 60 50
# 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 0
[-x /usr/local/sbin/vsftpd ] || exit 0
RETVAL=0
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.2 的安装指定安装目录,所以在卸载的时候需要把以下对应的文件删除:

# rm /usr/local/sbin/vsftpd
# rm /usr/local/man/man5/vsftpd.conf.5
# rm /usr/local/man/man8/vsftpd.8
# rm /etc/xinetd.d/vsftpd
# rm -rf /etc/vsftpd
# rm -rf /var/ftp
# rm -rf /data/vsftpd

FTP 协议详解与 vsftpd 在 Linux 上的安装配置 http://www.linuxidc.com/Linux/2016-09/134831.htm

玩转 vsftpd 服务器的四大高级配置:http://www.linuxidc.com/Linux/2013-09/90565.htm

vsFTPd 配置教程:http://www.linuxidc.com/Linux/2013-09/90562.htm

Ubuntu 实用简单的 FTP 架设 http://www.linuxidc.com/Linux/2012-02/55346.htm

Ubuntu 上架设 FTP 服务器和 Apache 服务器 http://www.linuxidc.com/Linux/2011-04/35295.htm

Ubuntu 13.04 安装 LAMP\vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm

RHEL6 平台下 SeLinux 和 vsftpd 的匿名上传的简单案例 http://www.linuxidc.com/Linux/2013-04/82300.htm

Linux 系统 vsftpd 源码安装 http://www.linuxidc.com/Linux/2013-03/81475.htm

openSUSE 13.2/13.1 下安装配置 FTP 服务器 vsftpd  http://www.linuxidc.com/Linux/2014-12/110070.htm

CentOS7 基于虚拟用户的 vsftpd  http://www.linuxidc.com/Linux/2016-11/137150.htm

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-12/138040.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计6314字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中