1、合理使用Shell历史命令记录功能ios
在Linux下可经过history命令查看用户全部的历史操做记录,同时shell命令操做记录默认保存在用户目录下的.bash_history文件中,经过这个文件能够查询shell命令的执行历史,有助于运维人员进行系统审计和问题排查,同时,在服务器遭受黑客攻击后,也能够经过这个命令或文件查询黑客登陆服务器所执行的历史命令操做,可是有时候黑客在入侵服务器后为了毁灭痕迹,可能会删除.bash_history文件,这就须要合理的保护或备份.bash_history文件。下面介绍下history日志文件的安全配置方法。shell
默认的history命令只能查看用户历史操做记录,并不能区分每一个用户操做命令的时间,这点对于排查问题十分不便,不过能够经过下面的方法(加入四行内容)让history命令自动记录全部shell命令的执行时间,编辑/etc/bashrc文件:安全
HISTFILESIZE=4000 HISTSIZE=4000 HISTTIMEFORMAT='%F %T ' --->此处"T"后面有一空格,使命令显示结果更美观 export HISTTIMEFORMAT
经过这样的设置后,执行history命令,就会显示每一个历史命令的详细执行时间,例如:其中,HISTFILESIZE定义了在.bash_history文件中保存命令的记录总数,默认值是1000,这里设置为4000;HISTSIZE定义了history命令输出的记录总数;HISTTIMEFORMAT定义时间显示格式,这里的格式与date命令后的“+"%F %T"”是一致的;HISTTIMEFORMAT做为history的时间变量将值传递给history命令。bash
[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命令的历史记录文件,基本效果以下:ssh
[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
保存历史命令的文件夹目录要尽可能隐蔽,避免被黑客发现后删除。
工具
[user01@unknown ~]$ more /etc/shadow /etc/shadow: Permission denied
若是要让普通用户user01可访问这个文件,能够在/etc/sudoers添加以下内容:
user01 ALL = /bin/more /etc/shadow 这样,经过以下方式user01用户就可访问/etc/shadow文件: [user01@unknown ~]$ sudo more /etc/shadow [sudo] password for user01:
CENTREON ALL = NOPASSWD: /etc/init.d/nagios restart
这样,普通用户centreon就能够执行nagios重启的脚本而无需输入密码了。若是要让一个普通用户user02具备超级用户的全部权限,而又不想输入超级用户的密码,只需在/etc/sudoers添加以下内容便可:
user02 ALL=(ALL) NOPASSWD: ALL
这样user02用户登陆系统后,就能够经过执行以下命令切换到超级用户下:
[user02@unknown ~]$ sudo su - [root@unknown ~]# pwd /root
Banner /etc/issue.net