您的位置:首页 > 运维架构 > Linux

linux实现ftp服务器的安全搭建

2012-09-16 19:07 701 查看
实现ftp的安全搭建

安全

1、证书

2、虚拟账号

管理

pureftp

vsftpd的实验配置:
[root@localhost Server]# rpm -ivh vsftpd-2.0.5-12.el5.i386.rpm
[root@localhost ~]# rpm -ql vsftpd |less
/etc/pam.d/vsftpd //vsftpd可运用模块化验证方式对用户进行验证
/etc/rc.d/init.d/vsftpd //服务器控制脚本
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list //限定用户登录方式
/etc/vsftpd/vsftpd.conf //主配置文档
/usr/sbin/vsftpd //服务器的名字
/var/ftp //匿名账号根目录
vim /etc/vsftpd/vsftpd.conf
文件内容:
12 anonymous_enable=YES //支持匿名帐号
15 local_enable=YES //支持本地帐号
18 write_enable=YES //网络只读权限开启
22 local_umask=022 //本地权限掩码(屏蔽掉的权限)
23 anon_umask=073 //匿名权限掩码,有可读权限就可以上传文件
27 anon_upload_enable=YES //打开后,并且修改权限后,匿名帐号可以上传文件
31 anon_mkdir_write_enable=YES //开启匿名创建目录功能
32 anon_other_write_enable=YES //增加匿名文件改名删除功能
35 dirmessage_enable=YES //目录提示信息(vim .message)
38 xferlog_enable=YES //开启日志功能
50 xferlog_file=/var/log/vsftpd.log //日志存放位置
46 #chown_uploads=YES
47 #chown_username=whoever //上传者身份的改变
58 #idle_session_timeout=600 //空闲会话超时
61 #data_connection_timeout=120 //连接超时
108 listen=YES //不再依赖于超级守护进程
116 userlist_enable=YES //userlist文件内用户不允许访问ftp
117 userlist_deny=NO //允许访问ftp
118 tcp_wrappers=YES //防火墙
访问ftp服务器方式
1.命令行访问
? 帮助
dir 列远程的内容
!dir 列本地内容
cd 远程切换
lcd 本地切换
get/mget 下载/下载多个
put/mput 上传
bin 二进制方式传递(通常采用)
ascii asc码
2.浏览器
3.客户端软件

测试
一、测试用户登录:
创建用户,并且在用户内创建文件
[root@localhost ~]# useradd user1
[root@localhost ~]# passwd user1
[root@localhost ~]# service vsftpd start
客户端登录



二、测试匿名帐号上传文件
修改文件权限
[root@localhost ~]# ll -d /var/ftp/pub
[root@localhost ~]# chmod o+wt /var/ftp/pub
vim /etc/vsftpd/vsftpd.conf
27 anon_upload_enable=YES //开启匿名用户上传
[root@localhost ~]# service vsftpd restart
测试结果:只能上传文件,但不能修改和删除文件
三、测试拒绝邮件服务攻击
说明:匿名访问总是用邮箱帐号作为密码访问时,邮件服务器的相关信息总是会发到邮箱中,为黑客提供可乘之机。
目的:当再使用原来邮箱帐号访问时,拒绝其访问
vim /etc/vsftpd/vsftpd.conf
88 deny_email_enable=YES
90 banned_email_file=/etc/vsftpd/banned_emails
[root@localhost ~]# touch /etc/vsftpd/banned_emails
[root@localhost ~]# echo "qq@sina.com">>/etc/vsftpd/banned_emails
[root@localhost ~]# service vsftpd restart
测试:
[root@localhost ~]# ftp 127.0.0.1
Name (127.0.0.1:root): anonymous
Password: //密码为qq@sina.com
530 Login incorrect.
Login failed.
测试结果:匿名登录再用"qq@sina.com"密码登录失败
四、测试锁定用户目录
说明:鉴于每个用户可以自由切换目录,所以将用户锁定于自己主目录比较安全
vim /etc/vsftpd/vsftpd.conf
文件内容:
95 chroot_list_enable=YES
97 chroot_list_file=/etc/vsftpd/chroot_list
vim /etc/vsftpd/chroot_list
文件内容:user1
[root@localhost ~]# service vsftpd restart
测试:
[root@localhost ~]# ftp 127.0.0.1
Name (127.0.0.1:root): user1
Password:
230 Login successful.
ftp> pwd
257 "/"
ftp> dir
drwxr-xr-x 2 0 0 4096 Aug 21 09:27 a.txt
ftp> cd /
250 Directory successfully changed.
ftp> dir
227 Entering Passive Mode (127,0,0,1,219,93)
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Aug 21 09:27 a.txt
[root@localhost ~]# useradd user2
[root@localhost ~]# passwd user2
[root@localhost ~]# ftp 127.0.0.1
Name (127.0.0.1:root): user2
Password:
ftp> pwd
257 "/home/user2"
ftp> cd /
250 Directory successfully changed.
ftp> dir
drwxr-xr-x 2 0 0 4096 Aug 07 2011 bin
drwxr-xr-x 4 0 0 1024 Aug 06 2011 boot
drwxr-xr-x 11 0 0 3920 Aug 21 08:43 dev
测试结果:user1不允许切换目录,user2允许切换目录
总结:
1. 只有放置到chroot_list(/etc/vsftpd/chroot_list)中的帐号可以切换
vim /etc/vsftpd/vsftpd.conf
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
2.只有没有放置到chroot_list中的帐号可以切换
vim /etc/vsftpd/vsftpd.conf
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
五、测试用户加入ftpusers文件后,将不能访问ftp
[root@localhost ~]# cd /etc/vsftpd/
vim ftpusers
文件内容加入:user1
[root@localhost vsftpd]# ftp 127.0.0.1
Name (127.0.0.1:root): user1
Password:
Login failed.
六、限制测试
vim /etc/vsftp/vsftpd.conf
文件内容:
118 tcp_wrappers=YES
[root@localhost vsftpd]# ldd /usr/sbin/vsftpd //查看链接库
libwrap.so.0 => /lib/libwrap.so.0 (0x003a3000) //说明支持wrap
/etc/host.allow /etc/host.deny
说明:ftp访问服务器,优先查看host.allow文件,如果没有限制,则看host.deny文件,如果都没限制,默认是允许访问
两个文件的内容结构:<服务:来源:允许或拒绝> 例如:vsftpd:all:deny
七、抓包测试:
[root@localhost Server]# yum -y install wireshark-1.0.8-1.el5_3.1.i386.rpm //安装抓包工具
[root@localhost Server]# tshark -ni eth0 -R "tcp.dstport eq 21"
153.023831 192.168.2.10 -> 192.168.2.100 FTP Request: USER user1
153.026803 192.168.2.10 -> 192.168.2.100 FTP Request: PASS 123

案例一
证书(ftp + ssl
1.根证书
[root@localhost pki]# vim tls/openssl.cnf
[root@localhost pki]# cd CA
[root@localhost CA]# mkdir certs crl newcerts
[root@localhost CA]# touch index.txt serial
[root@localhost CA]# echo "01" >serial
[root@localhost CA]# openssl genrsa 1024 >private/cakey.pem
[root@localhost CA]# chmod 600 private/*
[root@localhost CA]# openssl req -new -key private/cakey.pem -x509 -out cacert.pem
Country Name (2 letter code) [CN]:
State or Province Name (full name) [BeiJing]:
Locality Name (eg, city) [BeiJing]:
Organization Name (eg, company) [My Company Ltd]:tec
Organizational Unit Name (eg, section) []:tec
Common Name (eg, your name or your server's hostname) []:root
Email Address []:
2.申请证书
[root@localhost CA]# mkdir /etc/vsftpd/certs
[root@localhost CA]# cd /etc/vsftpd/certs
[root@localhost certs]# openssl genrsa 1024 >vsftpd.key
[root@localhost certs]# openssl req -new -key vsftpd.key -out vsftpd.csr
Country Name (2 letter code) [CN]:
State or Province Name (full name) [BeiJing]:
Locality Name (eg, city) [BeiJing]:
Organization Name (eg, company) [My Company Ltd]:abc
Organizational Unit Name (eg, section) []:tec
Common Name (eg, your name or your server's hostname) []:ftp.abc.com
Email Address []:
[root@localhost certs]# openssl ca -in vsftpd.csr -out vsftpd.cert
Subject:
countryName = CN
stateOrProvinceName = BeiJing
organizationName = abc
organizationalUnitName = tec
commonName = ftp.abc.com
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
[root@localhost certs]# chmod 600 *
vim /etc/vsftpd/vsftpd.conf
文件内容:
119 rsa_cert_file=/etc/ftpd/certs/ftpd.cert //证书路径和名字
120 rsa_private_key_file=/etc/ftpd/certs/ftpd.key //私钥的位置
121 ssl_tlsv1=YES
122 ssl_ssl2=YES
123 ssl_ssl3=YES //支持ssl_tls的三个版本
124 force_local_logins_ssl=YES //本地账号登陆加密
125 force_local_data_ssl=YES //传递数据加密
126 ssl_enable=YES //开启ssl加密
3.安装ftp客户端软件测试:




连接成功



4.抓包测试:
[root@localhost Server]# tshark -ni eth0 -R "tcp.dstport eq 21"
130.501068 192.168.2.10 -> 192.168.2.100 FTP Request: AUTH SSL

案例二
vsftpd虚拟帐号
1.[root@localhost ~]# cd /etc/vsftpd/
vim viruser.txt
文件内容按照下面格式加入:
test
123
test1
123
2.[root@localhost Server]# rpm -ivh db4-utils-4.3.29-9.fc6.i386.rpm
说明:生成bash加密的数据库文件以便让后续的pam.userdb这个模块来读取我们的用户名密码进行验证。
[root@localhost vsftpd]# db_load -T -t hash -f viruser.txt viruser.db //生成虚拟帐号数据库
vsftpd启用虚拟帐号和PAM认证模块配合
vim /etc/pam.d/vsftpd //接口文件
auth required pam_userdb.so db=/etc/vsftpd/viruser
account required pam_userdb.so db=/etc/vsftpd/viruser
vim /etc/vsftpd/vsftpd.conf
文件内容增加最后两行:
115 pam_service_name=vsftpd
116 userlist_enable=YES
117 tcp_wrappers=YES
118 guest_enable=YES
119 guest_username=user4 //虚拟帐号映射真实帐号user4
[root@localhost ~]# useradd user4
[root@localhost ~]# passwd user4
3.测试:



[root@localhost vsftpd]# cd /home
[root@localhost home]# chmod a+rw user4
[root@localhost home]# cd user4
[root@localhost user4]# mkdir aa
4.测试:
虚拟帐号test访问ftp



5.对访问ftp服务器的用户某些限制,来提高服务器的高稳定性能
vim /etc/pam.d/vsftpd
文件内容:
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
auth required pam_shells.so
auth include system-auth
auth include system-auth
account include system-auth
session required pam_loginuid.so
vim /etc/vsftpd/vsftpd.conf
文件内容增加:
anon_max_rate=100000 //匿名帐号下载速度为100k
local_max_rate=1000000 //本地帐号下载速度为1M
# max_clients=5 //同时在线的最大用户数量
# max_per_ip=2 //每用户的最大连接数
[root@localhost pub]# dd if=/dev/zero of=f1 bs=1M count=1
[root@localhost user1]# dd if=/dev/zero of=f3 bs=1M count=1
[root@localhost user1]# chown user1.user1 f3
测试:
匿名帐号访问下载f1




用户user1访问下载f3



6.对本地用户user1和user2设置不同的访问速度
vim /etc/vsftpd/vsftpd.conf
文件内容增加:
anon_max_rate=100000
local_max_rate=1000000
user_config_dir=/etc/vsftpd/userdir //用户的配置目录

[root@localhost user1]# cd /etc/vsftpd/
[root@localhost vsftpd]# mkdir userdir
[root@localhost vsftpd]# vim user1
文件内容增加:local_max_rate=1000000
[root@localhost vsftpd]# vim user2
文件内容增加:local_max_rate=10000
[root@localhost ~]# service vsftpd restart
测试:

本文出自 “1” 博客,转载请与作者联系!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: