传统的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服务。
再次登录测试:好了,有秘钥保存的界面弹出了,说明传输已经加密了。
转载于:https://blog.51cto.com/dmm1990319/1328972