摘要

安全从来没有绝对,但是安全一定要做,通常一个服务器的安全,取决于很多因素,除了系统本身级别,更多的问题出现在应用级别,或者不恰当的访问权限,因此做好一个安全的服务器,一定不可掉以轻心,可以从如下几点开始做好服务器安全。

去掉密码登录

一般来说登录服务器,只需要使用ssh配合用户名和密码即可登录服务器,但是这样的方式并不安全,更好的做法是使用公钥,私钥的方式,并且关闭用户名认证。

合理使用su,sudo命令

sudo设计的宗旨是:赋予用户尽可能少的权限但仍允许它们完成自己的工作,这种设计兼顾了安全性和易用性,因此,强烈推荐通过sudo来管理系统账号的安全,只允许普通用户登录系统,如果这些用户需要特殊的权限,就通过配置/etc/sudoers来完成,这也是多用户系统下账号安全管理的基本方式。

删减登录的欢迎信息

系统的一些欢迎信息或版本信息,虽然能给系统管理者带来一定的方便,但是这些信息有时候可能被黑客利用,成为攻击服务器的帮凶,为了保证系统的安全,可以修改或删除某些系统文件,需要修改或删除的文件有4个,分别是:

  • /etc/issue
  • /etc/issue.net
  • /etc/redhat-release
  • /etc/motd。

/etc/issue和/etc/issue.net文件都记录了操作系统的名称和版本号,当用户通过本地终端或本地虚拟控制台等登录系统时,/etc/issue的文件内容就会显示。

当用户通过ssh或telnet等远程登录系统时,/etc/issue.net文件内容就会在登录后显示。在默认情况下/etc/issue.net文件的内容是不会在ssh登录后显示的,要显示这个信息可以修改/etc/ssh/sshd_config文件,在此文件中添加如下内容即可:

Banner /etc/issue.net

其实这些登录提示很明显泄漏了系统信息,为了安全起见,建议将此文件中的内容删除或修改。

/etc/redhat-release文件也记录了操作系统的名称和版本号,为了安全起见,可以将此文件中的内容删除。

/etc/motd文件是系统的公告信息。每次用户登录后,/etc/motd文件的内容就会显示在用户的终端。

通过这个文件系统管理员可以发布一些软件或硬件的升级、系统维护等通告信息,但是此文件的最大作用就、是可以发布一些警告信息,当黑客登录系统后,会发现这些警告信息,进而产生一些震慑作用。

看过国外的一个报道,黑客入侵了一个服务器,而这个服务器却给出了欢迎登录的信息,因此法院不做任何裁决。

合理使用Shell历史命令记录功能

在Linux下可通过history命令查看用户所有的历史操作记录,同时shell命令操作记录默认保存在用户目录下的.bash_history文件中,通过这个文件可以查询shell命令的执行历史,有助于运维人员进行系统审计和问题排查。

同时,在服务器遭受黑客攻击后,也可以通过这个命令或文件查询黑客登录服务器所执行的历史命令操作,但是有时候黑客在入侵服务器后为了毁灭痕迹,可能会删除.bash_history文件,这就需要合理的保护或备份.bash_history文件。下面介绍下history日志文件的安全配置方法。

默认的history命令只能查看用户历史操作记录,并不能区分每个用户操作命令的时间,这点对于排查问题十分不便,不过可以通过下面的方法(加入四行内容)让history命令自动记录所有shell命令的执行时间,编辑/etc/bashrc文件:

HISTFILESIZE=4000
HISTSIZE=4000
HISTTIMEFORMAT='%F %T'
export HISTTIMEFORMAT

其中,HISTFILESIZE定义了在.bash_history文件中保存命令的记录总数,默认值是1000,这里设置为4000;

HISTSIZE定义了history命令输出的记录总数;HISTTIMEFORMAT定义时间显示格式,这里的格式与date命令后的“+”%F %T””是一致的;HISTTIMEFORMAT作为history的时间变量将值传递给history命令。

通过这样的设置后,执行history命令,就会显示每个历史命令的详细执行时间,例如:

[root@server ~]# history
247 2013-10-05 17:16:28 vi /etc/bashrc
248 2013-10-05 17:16:28 top
249 2013-10-05 17:04:18 vmstat
250 2013-10-05 17:04:24 ps -ef
251 2013-10-05 17:16:29 ls -al
252 2013-10-05 17:16:32 lsattr
253 2013-10-05 17:17:16 vi /etc/profile
254 2013-10-05 17:19:32 date +"%F %T"
255 2013-10-05 17:21:06 lsof
256 2013-10-05 17:21:21 history

为了确保服务器的安全,保留shell命令的执行历史是非常有用的一条技巧。shell虽然有历史功能,但是这个功能并非针对审计目的而设计,因此很容易被黑客篡改或是丢失。

下面再介绍一种方法,可以实现详细记录登录过系统的用户、IP地址、shell命令以及详细操作时间等,并将这些信息以文件的形式保存在一个安全的地方,以供系统审计和故障排查。

将下面这段代码添加到/etc/profile文件中,即可实现上述功能。

#history
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
HISTDIR=/usr/share/.history
if [ -z $USER_IP ]
then
USER_IP=`hostname`
fi
if [ ! -d $HISTDIR ]
then
mkdir -p $HISTDIR
chmod 777 $HISTDIR
fi
if [ ! -d $HISTDIR/${LOGNAME} ]
then
mkdir -p $HISTDIR/${LOGNAME}
chmod 300 $HISTDIR/${LOGNAME}
fi
export HISTSIZE=4000
DT=`date +%Y%m%d_%H%M%S`
export HISTFILE="$HISTDIR/${LOGNAME}/${USER_IP}.history.$DT"
export HISTTIMEFORMAT="[%Y.%m.%d %H:%M:%S]"
chmod 600 $HISTDIR/${LOGNAME}/*.history* 2>/dev/null

这段代码将每个用户的shell命令执行历史以文件的形式保存在/usr/share/.history目录中,每个用户一个文件夹,并且文件夹下的每个文件以IP地址加shell命令操作时间的格式命名。下面是user01用户执行shell命令的历史记录文件,基本效果如下:

[root@server user01]#  pwd
/usr/share/.history/user01
[root@server user01]# ls -al
-rw------- 1 user01 wheel 56 Jul 6 17:07 192.168.12.12.history.20130706_164512
-rw------- 1 user01 wheel 43 Jul 6 17:42 192.168.12.12.history.20130706_172800
-rw------- 1 user01 wheel 22 Jul 7 12:05 192.168.12.19.history.20130707_111123
-rw------- 1 user01 wheel 22 Jul 8 13:41 192.168.12.20.history.20130708_120053
-rw------- 1 user01 wheel 22 Jul 1 15:28 192.168.12.186.history.20130701_150941
-rw------- 1 user01 wheel 22 Jul 2 19:47 192.168.12.163.history.20130702_193645
-rw------- 1 user01 wheel 22 Jul 3 12:38 192.168.12.19.history.20130703_120948
-rw------- 1 user01 wheel 22 Jul 3 19:14 192.168.12.134.history.20130703_183150

保存历史命令的文件夹目录要尽量隐蔽,避免被黑客发现后删除。

隐藏服务器错误信息

一般来说,当访问服务器一个不存在的页面的时候,通常服务器会显示:

b1

这时候很不情愿的就暴露了服务器的信息,如果这个版本存在漏洞,那么很可能就被人利用了,我们应该隐藏服务器的信息,只需要在http.conf里面添加:

ServerTokens ProductOnly
ServerSignature Off

一切都变化了:

b1

尾声

这里提到的部分操作只是服务器安全的冰山一角,服务器安全需要时刻小心,不断维护升级。


扫码手机观看或分享: