传统的ftp服务,因为它的明文传输,很容易造成信息安全事故。所以在搭建ftp服务器的时候,一定要考虑安全传输的问题。

现在主流的两种ftp,分别是vsftp和sftp。其中,vsftp是基于ssl的,sftp是基于ssh的。

一、首先,我们来配置一个sftp服务器。

首先确认已经安装了openssh的包:

[root@zabbix-agent ssh]# rpm -qa |grep openssh

openssh-5.3p1-20.el6.x86_64

openssh-server-5.3p1-20.el6.x86_64

因为sftp服务器是基于ssh协议的,所以,它的配置文件就和ssh的配置文件一致。

目标:

1. 用户只能通过sftp访问,不能登录SSH

2. 用户要被锁定在特定的目录下

vi /etc/ssh/sshd_config

注释#Subsystem sftp /usr/lib/openssh/sftp-server(原来未注释)

在其下面添加 Subsystem sftp internal-sftp

注释#UsePAM yes(原来未注释)

在最下面添加

Match User test

#匹配test用户,如为单个用户可用:Match user 用户名; 设置此用户登陆时的shell设为/bin/false,这样它就不能用ssh只能用sftp

ChrootDirectory /ftp/

#指定用户被锁定到的那个目录,为了能够chroot成功,该目录必须属主是root,并且其他用户或组不能写

X11Forwarding no

AllowTcpForwarding no

ForceCommand internal-sftp

下面建立用户test:

创建目录 mkdir -p /ftp/test

建立用户test

useradd -d /ftp/test -s /sbin/nologin test

passwd test

赋予test 权限

chown test:test /ftp/test

查看确定:

drwxr-xr-x. 3 root root 4096 Nov 18 17:41 ftp

[root@zabbix-agent ssh]# ll /ftp

drwxr-xr-x. 2 test test 4096 Nov 18 17:45 test

好了,重启sshd服务:service sshd restart

使用test登陆ftp测试(质疑,sftp使用的是和ssh一个端口:22):目录已锁定,test不能通过ssh登陆服务器。

这样,一个简单地sftp服务器就搭建好了,ssh本身是加密传输的,所以sftp也是加密传输的,安全性很高。


二、接下来,我们来配置一个vsftp服务器

首先确认需要安装的包:rpm -qa |grep vsftp

预先没有安装的话,现在开始安装:yum install vsftpd -y

vsftp的配置文件在/etc/vsftpd/中

cd /etc/vsftpd/

ls

ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh

编辑vsftpd.conf

anonymous_enable=NO #由yes改为No,禁止匿名用户登录

xferlog_file=/var/log/vsftpd.log #取消掉前面的注释符,指定记录上传下载的信息的日志。

idle_session_timeout=600 #会话空闲10分钟后自动断开

data_connection_timeout=120 #数据传输超过2分钟未响应视为超时

ftpd_banner=Welcome to blah FTP service. #显示登录提示信息

banned_email_file=/etc/vsftpd/banned_emails #显示登录信息,信息为指定文件中的内容。基本同上项,可选

chroot_local_user=YES #对用户chroot,把用户锁定在某一个目录中,减少安全隐患


#chroot_list_enable=YES

#chroot_list_file=/etc/vsftpd/chroot_list #若设置这两项,则/etc/vsftpd/chroot_list中的用户不chroot,个性化设置,但是增加了安全隐患,这里我们不采用


listen=YES #采用stand alone方式

use_localtime=YES #使用本地时间

max_clients=10 #最大支持10位用户同时访问

man_per_ip=1 #每个IP最多只能同时登陆一个账号

userlist_enable=YES #user_list这个文件是否生效

userlist_deny=NO #为NO:只有user_list文件的的用户才能登陆ftp,为YES,user_list中的用户不能登陆FTP

local_max_rate=5000 #传输速度限制 bytes/second,0为不限制


好了,保存退出

添加ftp用户

创建目录 mkdir -p /ftp/vsftp

建立用户test

useradd -d /ftp/vsftp -s /sbin/nologin vsftp

passwd vsftp

赋予test 权限

chown vsftp:vsftp /ftp/vsftp


编辑user_list 只保留 vsftp一个用户 echo vsftp > user_list

好了,启动 vsftp服务,使用客户端登陆(注意,这个端口是默认的21)。

使用vsftp成功登陆了。

但是!登陆界面并没有弹出要保存秘钥的提示,这说明:这个ftp暂时并不是安全加密的,所以,我们还需要继续添加安全加密的设置:


首先要检查vsftp有没有支持ssl模块,

ldd $(which vsftpd)|grep ssl

libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007fcefe6d9000)

我们是通过package装的,这个模块一般是支持的,你若果是用源码编译的不支持的话,那就重新编译一次吧。

接下来,为vsftpd建立专门的证书数据

cd /etc/pki/tls/certs

make vsftpd.pem

注意vsftpd.pem 的权限

-rw-------. 1 root root 3055 Nov 19 21:07 vsftpd.pem

cp -a vsftpd.pem /etc/vsftpd/

好了,修改vsftpd.conf

ssl_enable=YES #启动ssl支持

allow_anon_ssl=NO #不允许匿名用户使用ssl

force_local_data_ssl=YES #强制实体用户使用ssl加码

force_local_logins_ssl=YES #口令验证也要加密

ssl_tlsv1=YES #支持tls方式,下面可不启用

ssl_sslv2=NO

ssl_sslv3=NO

rsa_cert_file=/etc/vsftpd/vsftpd.pem #默认加密证书

ssl_ciphers=HIGH

保存,重启vsftpd服务。

再次登录测试:好了,有秘钥保存的界面弹出了,说明传输已经加密了。