在生产服务器上loggingpipe理员运行的所有命令

pipe理员通过个人用户名login服务器是公司的政策,然后运行sudo -i成为root用户。 在运行sudo -i ,sudo将创build一个名为SUDO_USER的环境variables,其中包含原始用户的用户名。

有没有办法在syslog中logging所有命令,类似于下面的语法:

 ${TIME/DATE STAMP}: [${REAL_USER}|${SUDO_USER}]: ${CMD} 

一个例子是:

 Sat Jan 19 22:28:46 CST 2013: [root|ksoviero]: yum install random-pkg 

显然,它不一定是上面的语法,它只需要包含最less的真实用户(例如root),sudo用户(例如ksoviero)以及运行的完整命令(例如yum安装random-pkg)。

我已经尝试过snoopy ,但没有包含SUDO_USERvariables。

    正如迈克尔·汉普顿(Michael Hampton)所build议的那样, auditd是这里工作的正确工具。

    我在Ubuntu 12.10安装上testing过,所以你的里程在其他系统上可能会有所不同。

    • 安装auditd

      apt-get install auditd

    • 将这两行添加到/etc/audit/audit.rules

        -a出口,总是-F arch = b64 -F euid = 0 -S execve
       -a出口,总是-F arch = b32 -F euid = 0 -S execve 

    这些将跟踪由root( euid=0 )运行的所有命令。 为什么两个规则? execve系统调用必须在32位和64位代码中进行跟踪。

    • 为了消除日志中的auid=4294967295消息,将audit=1添加到内核的cmdline(通过编辑/etc/default/grub

    • 放置线

      session required pam_loginuid.so

    在所有与login( /etc/pam.d/{login,kdm,sshd} )相关的PAMconfiguration文件中,但不在与susudo相关的文件中。 这将允许auditd在调用sudosu时正确地获取调用用户的uid

    • 现在重新启动您的系统。

    • 让我们login并运行一些命令:

         $ id -u
         1000
         $ sudo ls /
         bin引导数据dev等主页initrd.img initrd.img.old lib lib32 lib64 lost + found media mnt opt proc root run sbin scratch selinux srv sys tmp usr var vmlinuz vmlinuz.old
         $ sudo su  - 
         #ls / etc
         [...]
    

    这将在/var/log/audit/auditd.log产生如下所示的内容:

     ---- time->Mon Feb 4 09:57:06 2013 type=PATH msg=audit(1359968226.239:576): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 type=PATH msg=audit(1359968226.239:576): item=0 name="/bin/ls" inode=2117 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 type=CWD msg=audit(1359968226.239:576): cwd="/home/user" type=EXECVE msg=audit(1359968226.239:576): argc=2 a0="ls" a1="/" type=SYSCALL msg=audit(1359968226.239:576): arch=c000003e syscall=59 success=yes exit=0 a0=10cfc48 a1=10d07c8 a2=10d5750 a3=7fff2eb2d1f0 items=2 ppid=26569 pid=26570 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="ls" exe="/bin/ls" key=(null) ---- time->Mon Feb 4 09:57:06 2013 type=PATH msg=audit(1359968226.231:575): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 type=PATH msg=audit(1359968226.231:575): item=0 name="/usr/bin/sudo" inode=530900 dev=08:01 mode=0104755 ouid=0 ogid=0 rdev=00:00 type=CWD msg=audit(1359968226.231:575): cwd="/home/user" type=BPRM_FCAPS msg=audit(1359968226.231:575): fver=0 fp=0000000000000000 fi=0000000000000000 fe=0 old_pp=0000000000000000 old_pi=0000000000000000 old_pe=0000000000000000 new_pp=ffffffffffffffff new_pi=0000000000000000 new_pe=ffffffffffffffff type=EXECVE msg=audit(1359968226.231:575): argc=3 a0="sudo" a1="ls" a2="/" type=SYSCALL msg=audit(1359968226.231:575): arch=c000003e syscall=59 success=yes exit=0 a0=7fff327ecab0 a1=7fd330e1b958 a2=17cc8d0 a3=7fff327ec670 items=2 ppid=3933 pid=26569 auid=1000 uid=1000 gid=1000 euid=0 suid=0 fsuid=0 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="sudo" exe="/usr/bin/sudo" key=(null) ---- time->Mon Feb 4 09:57:09 2013 type=PATH msg=audit(1359968229.523:578): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 type=PATH msg=audit(1359968229.523:578): item=0 name="/bin/su" inode=44 dev=08:01 mode=0104755 ouid=0 ogid=0 rdev=00:00 type=CWD msg=audit(1359968229.523:578): cwd="/home/user" type=EXECVE msg=audit(1359968229.523:578): argc=2 a0="su" a1="-" type=SYSCALL msg=audit(1359968229.523:578): arch=c000003e syscall=59 success=yes exit=0 a0=1ceec48 a1=1cef7c8 a2=1cf4750 a3=7fff083bd920 items=2 ppid=26611 pid=26612 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="su" exe="/bin/su" key=(null) ---- time->Mon Feb 4 09:57:09 2013 type=PATH msg=audit(1359968229.519:577): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 type=PATH msg=audit(1359968229.519:577): item=0 name="/usr/bin/sudo" inode=530900 dev=08:01 mode=0104755 ouid=0 ogid=0 rdev=00:00 type=CWD msg=audit(1359968229.519:577): cwd="/home/user" type=BPRM_FCAPS msg=audit(1359968229.519:577): fver=0 fp=0000000000000000 fi=0000000000000000 fe=0 old_pp=0000000000000000 old_pi=0000000000000000 old_pe=0000000000000000 new_pp=ffffffffffffffff new_pi=0000000000000000 new_pe=ffffffffffffffff type=EXECVE msg=audit(1359968229.519:577): argc=3 a0="sudo" a1="su" a2="-" type=SYSCALL msg=audit(1359968229.519:577): arch=c000003e syscall=59 success=yes exit=0 a0=7fff327ecab0 a1=7fd330e1b958 a2=17cc8d0 a3=7fff327ec670 items=2 ppid=3933 pid=26611 auid=1000 uid=1000 gid=1000 euid=0 suid=0 fsuid=0 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="sudo" exe="/usr/bin/sudo" key=(null) ---- time->Mon Feb 4 09:57:09 2013 type=PATH msg=audit(1359968229.543:585): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 type=PATH msg=audit(1359968229.543:585): item=0 name="/bin/bash" inode=6941 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 type=CWD msg=audit(1359968229.543:585): cwd="/root" type=EXECVE msg=audit(1359968229.543:585): argc=1 a0="-su" type=SYSCALL msg=audit(1359968229.543:585): arch=c000003e syscall=59 success=yes exit=0 a0=13695a0 a1=7fffce08a3e0 a2=135a030 a3=7fffce08c200 items=2 ppid=26612 pid=26622 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/bin/bash" key=(null) ---- time->Mon Feb 4 09:57:11 2013 type=PATH msg=audit(1359968231.663:594): item=1 name=(null) inode=668682 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 type=PATH msg=audit(1359968231.663:594): item=0 name="/bin/ls" inode=2117 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 type=CWD msg=audit(1359968231.663:594): cwd="/root" type=EXECVE msg=audit(1359968231.663:594): argc=3 a0="ls" a1="--color=auto" a2="/etc" type=SYSCALL msg=audit(1359968231.663:594): arch=c000003e syscall=59 success=yes exit=0 a0=7fff8c709950 a1=7f91a12149d8 a2=1194c50 a3=7fff8c709510 items=2 ppid=26622 pid=26661 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="ls" exe="/bin/ls" key=(null) 

    auid列包含调用用户的uid ,它允许您过滤此用户运行的命令

      ausearch -ua 1000 

    这甚至会列出用户作为root运行的命令。

    资料来源:

    请记住,sudo本身会将所有sudo命令logging在系统日志中,所以所有priv'd用户都应该被教育成不是简单地使用sudo来获得root shell,而是:

     sudo command p1 p2 ... pn 

    我想到的这个或任何方法的问题是,作为root用户,阻止用户逃避任何特定types的日志logging是相当困难的。 因此,你尝试的任何事情都将<100%,我很遗憾地说。

    教育,文件,执法和最重要的信任是必要的。

    从版本2.0.0开始, snoopy可以logging任意的环境variables。

    然而,最近的一篇文章指出,tty的伐木所有者对“谁执行了这个命令作为根?”这个问题是相当有效和优雅的回答。

    披露:我是窥探维护者。

    我曾经面临过同样的问题,不得不提出一个快速和肮脏的解决scheme – 每个sudo用户将有他们自己的历史文件,一旦他们运行sudo -i

    /root/.bashrc我添加了以下行 –

      export HISTFILE=/root/.bash_history-$SUDO_USER export HISTTIMEFORMAT="%F %T " 

    所以,每个用户都会有一个历史文件.bash_history-username。

    另一种方法 –

    将下面的代码添加到/root/.bashrc ,它会将用户名sudo-user和命令添加到日志文件中,通常级别设置为/ var / log / messages。

     function log2syslog { declare COMMAND COMMAND=$(fc -ln -0) logger -p local1.notice -t bash -i -- "${USER}:${SUDO_USER}:${COMMAND}" } trap log2syslog DEBUG 

    信贷 – http://backdrift.org/logging-bash-history-to-syslog-using-traps

    一些企业实际上禁止使用auditd,因为它是资源密集型的,可能导致拒绝服务攻击的机会。

    一种解决scheme是configuration最新的Korn shell(ksh-93,详情参见http://kornshell.com/ ),以root身份执行的所有命令logging到远程系统日志服务器,然后通过策略要求,除了紧急情况下,系统pipe理员使用个人帐户login并通过sudo执行增强的Korn shell。 检查日志可以检测pipe理员何时从批准的shell启动另一个shell以覆盖他们的轨道,然后可以根据需要对SA进行教育。

    不是说到目前为止还有其他的答案有什么问题,但是如果你认为sudo通过syslog日志logging是令人满意的,我可能会build议一个皱纹:通过networking将它logging到远程审计主机。

    那绕开了“现在我已经成为根,我可以从日志中删除任何我的渎职痕迹”的问题。 您现在可能在本地机器上是root,但是您不能从networking中调用该日志数据包,而且您(可能)在远程审计主机上没有root权限。

    我一直在用我pipe理多年的networking来做这件事,而且还有两个信号优势:

    首先,networking上有一个地方可以检查所有的系统日志,这样可以更容易地发现事件的相关性,因此是一个调查的一站式商店,例如“当juno抱怨NFS服务器hera没有响应,是其他人抱怨同一件事,如果是这样的话, hera很可能是问题所在,让我们看看她login的是什么,如果没有, juno的networking连接就更可疑,让我们来看看juno当时logging的内容。 。

    其次,系统日志轮转变得更加容易:几天以后,您不会在本地主机上保留日志副本,但是您需要确保审计服务器有大量的磁盘空间,并将所有系统日志保留多年。 另外,如果您想将它们写入WORM媒体以进行法庭审计,则只需购买一个WORM驱动器。

    当启用的会话被logging并且可以稍后重播时,Sudo具有称为sudoreplay的东西,类似于script命令,其使得terminal会话的打字稿稍后可以使用scriptreplay命令重播。