Linux运维人员共用root帐户权限审计

  1. 云栖社区>
  2. 博客>
  3. 正文

Linux运维人员共用root帐户权限审计

科技探索者 2017-11-13 12:47:00 浏览805
展开阅读全文

在中小型企业,公司不同运维人员基本都是以root 账户进行服务器的登陆管理,缺少了账户权限审计制度。不出问题还好,出了问题,就很难找出源头。

这里介绍下,如何利用编译bash 使不同的客户端在使用root 登陆服务器使,记录各自的操作,并且可以在结合ELK 日志分析系统,来收集登陆操作日志

服务端:

1、下载编译bash

wget http://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz

tar -xvf bash-4.4.tar.gz

cd /root/bash-4.4

2、 先修改下config-top.h 大概在103,116行附近 (取消注释) 由于c 语言中 注释是/**/ ,所以不要删除错了。修改如下:

#define SSH_SOURCE_BASHRC

#define SYSLOG_HISTORY

3 修改下bashhist.c 文件,让终端上的命令记录到系统messages 中,并且以指定的格式。并传入获得的变量。修改后的内容如下:

wKioL1gofODTzqK5AABR2v_9i6A501.png代码如下:

void

bash_syslog_history (line)

     const char *line;

{

  char trunc[SYSLOG_MAXLEN];

  const char *p;

  p = getenv("NAME_OF_KEY");


  if (strlen(line) < SYSLOG_MAXLEN)

    syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY: PID=%d PPID=%d SID=%d  User=%s USER=%s CMD=%s", getpid(),getppid(), getsid(getpid()),  current_user.user_name, p, line);

  else

    {

      strncpy (trunc, line, SYSLOG_MAXLEN);

      trunc[SYSLOG_MAXLEN - 1] = ' ';    #必须要有空格,不能为空,否则make 时会报错。

      syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY (TRUNCATED):PID=%d  PPID=%d SID=%d User=%s USER=%s CMD=%s", getpid(), getppid(), getsid(getpid()), current_user.user_name, p, trunc);

    }

}

4 配置安装路径,编译安装,编译到/usr/local/目录下

./configure --prefix=/usr/local/bash4-4/

make && make install

5、编译完成后,将新的bash 追加到 /etc/shells 中,并修改root用户的登陆shell 环境为新编译的shell

wKiom1glnL6g68GjAAAJDq4Yiwo990.png

设置root 登录shell

wKioL1glnP3iZTloAAAHsaMXWRE705.png

6、注销当前root用户,重新登陆后,查看/var/log/messages,如下就可以看到记录了操作命令

wKioL1goggnzcqiwAABfo2KDV-s477.jpg

在客户端1:

ssh-keygen -t rsa -C "rhel-testuser1" 生成key -C 注释 (加上这个也是为了最后进行对服务器访问人员进行辨别的一个关键点)

将公钥上传到服务器上的.ssh/authorized_keys 文件中。ssh-copy-id 命令会自动在服务器上创建.ssh/authorized_keys文件,即使该目录不存在,并自动赋予600权限。

ssh-copy-id 192.168.72.135 (-i 可以指定key)

在客户端2:

与客户端1一样

ssh-keygen -t rsa -C "rhel7-testuser2"

ssh-copy-id 192.168.72.135

现在去服务器上验证下该文件

wKioL1gofu-CPGFTAABWk4vlgac782.png

服务端配置:

现在上面两个客户端已经可以免密钥登陆了,现在去服务器上配置,并创建脚本

在log目录下创建一个 keys 文件,用于登陆时存进去公钥,之后对其进行取出判断的

touch /var/log/keys

创建检测脚本,内容如下:

cat /etc/CheckUser.sh

#!/usr/bin/bash

#conding:utf-8

pid=$PPID

#在自己home目录得到所有的key,如果/var/log/keys 没有的时候,添加进去

while read line

do

grep "$line" /var/log/keys >/dev/null || echo "$line" >> /var/log/keys

done < $HOME/.ssh/authorized_keys

#得到每个key的指纹

cat /var/log/keys | while read LINE

do

 NAME=$(echo $LINE | awk '{print $3}')

echo $LINE >/tmp/keys.log.$pid

 KEY=$(ssh-keygen -l -f /tmp/keys.log.$pid | awk '{print $2}')

grep "$KEY $NAME" /var/log/ssh_key_fing >/dev/null || echo "$KEY $NAME" >> /var/log/ssh_key_fing

done

#如果是root用户,secure文件里面是通过PPID号验证指纹

if [ $UID == 0 ]

then

ppid=$PPID

else

#如果不是root用户,验证指纹的是另外一个进程号

ppid=`/bin/ps -ef | grep $PPID |grep 'sshd:' |awk '{print $3}'`

fi

#得到RSA_KEY和NAME_OF_KEY,用来bash4.1得到历史记录

RSA_KEY=`/bin/egrep 'Found matching RSA key' /var/log/secure | /bin/egrep "$ppid" | /bin/awk '{print $NF}' | tail -1`

 if [ -n "$RSA_KEY" ];then

NAME_OF_KEY=`/bin/egrep "$RSA_KEY" /var/log/ssh_key_fing | /bin/awk '{print $NF}'`

fi

#把NAME_OF_KEY设置为只读

readonly NAME_OF_KEY

export NAME_OF_KEY

/bin/rm /tmp/keys.log.$pid

配置 profile,在文件末尾添加一行内容,如下:

echo "test -f /etc/CheckUser.sh && . /etc/CheckUser.sh" >> /etc/profile

在/etc/bashrc 末尾添加下面内容:

test -z "$BASH_EXECUTION_STRING" || { test -f /etc/CheckUser.sh && . /etc/CheckUser.sh; logger -t -bash -s "HISTORY $SSH_CLIENT USER=$NAME_OF_KEY CMD=$BASH_EXECUTION_STRING " >/dev/null 2>&1;}

修改sshd 配置文件,开启debug 模式,并重启sshd服务(必须是这个模式,否则不会显示key所描述的内容,也就是USER=后面的那段不显示)

sed -i 's/#LogLevel INFO/LogLevel DEBUG/g' /etc/ssh/sshd_config

systemctl restart sshd    

验证:

tail -f /var/log/messages

wKioL1gogYTTKQeMAAARZt2FFtw995.png

最后说明一下:

在服务端做完后可能会有按ctrl+L不管用的情况

在/etc/profile 中添加以下一行即可

bind -x '"\C-l": clear'

source /etc/profile

回车没换行的在/etc/bashrc 文件中添加一段,如下:

PS1=``\s-\v\$ ''    或者 PS1='[\u@\h \W]\$ '

source /etc/bashrc      详情见man bash 搜索ps1

本文转自silence博客51CTO博客,原文链接http://blog.51cto.com/silencezone/1871914如需转载请自行联系原作者


a120518129

网友评论

登录后评论
0/500
评论
科技探索者
+ 关注