如何跟踪超级用户活动


21

我想知道在Linux环境下跟踪超级用户活动的最佳方法是什么。

具体来说,我正在寻找以下功能:

  • A)将击键记录到安全的Syslog服务器
  • B)能够重播shell会话(类似于scriptreplay)
  • C)理想情况下,如果没有物理访问服务器,这应该是不可能(或相当困难)的事情。

在需要允许不同的系统管理员(甚至第三方)在服务器上执行特权操作的环境中,从安全/审核的角度考虑这一点。

每个管理员都将拥有自己的名义帐户,每个交互会话都应完整记录,并在必要时可以重播(例如,如果有人使用mc删除或更改关键文件,则仅此一个而已)知道那个人发出了mc命令;必须有一种方法可以确切地查看启动mc之后执行的操作。

附加说明

  1. 正如womble所指出的那样,最好的选择也许不是让具有root特权的用户登录以在服务器上执行更改,而是通过配置管理系统执行此操作。因此,我们假设没有这样的系统,我们需要在同一服务器上向不同的人授予根级别的访问权限
  2. 我对执行此操作完全不感兴趣:每个具有root特权登录到服务器的人都将完全意识到该会话将被记录(例如,呼叫中心操作员知道他们的对话在正在记录)
  3. 没有人会使用通用超级用户帐户(“根”)
  4. 我知道ttyrpld,它似乎可以满足我的要求。但是在采用这种方式之前,我想知道是否可以通过使用未修改的内核来解决。我想知道是否有针对Debian(特别是Linux)的工具,这些工具可以对超级用户帐户进行全面审核,而无需修补外壳或内核。

2
(抢椅子和爆米花)这应该很好...
艾利·佩恩

+1 ...正在思考完全相同的事情。大声笑
KPWINC

还要注意此相关的问题:serverfault.com/questions/46614/...
sleske

我仍然认为您应该使用配置管理系统。(puppet / cfengine / chef / systemimager / chef / etc ...)
KevinRae,2009年

凯文,我同意你的看法。例如,请参阅我对womble答案的评论:serverfault.com/questions/50710/…。不幸的是,在这种环境下这不是一个选择,这就是为什么我要求假设一个配置管理系统不可用的情况。无论如何,我要感谢您对这个主题的反馈。
mfriedman

Answers:


8

对于具有多个管理员的环境,只要可能就不要使用root。

使用sudo进行所有操作-sudo极易配置且易于记录。

记录所有登录名或su的root身份,并在有人遵循您已建立的规则时对其进行调查。


3
是的,sudo的日志记录很好-所有这些“ womble以root身份运行/ bin / sh”条目确实很有帮助。没有配置管理,人们将总是成为执行管理任务的根源,而想要做一些邪恶的事情的人只能在执行有效任务的同一根会话中完成他们的事情。完美的封面。
womble

政策必须不鼓励简单地炮轰根源,这当然是没有好处的,一旦他们取消了保留,您将无法知道他们的所作所为,但这缩小了犯罪嫌疑人的范围……
dmckee

2
策略:“ sudo / bin / sh” =被解雇/调查。非常清晰,非常简单的解决方案。
2009年

5
从人们合法需要运行的程序中获取外壳的方法有很多(例如从sudo vi),以至于仅阻止'sudo / bin / sh'是没有意义的...除非您可以确定自己已经如果阻止了每种可能的方法,您将面临挑战,寻找更多晦涩难懂的方法。无论如何:a)有时sudo / bin / sh是必需的,并且b)这是管理问题,而不是技术问题。
cas

克里斯指出了一个重点:管理问题,而不是技术问题。
卡特凯兹

2

首先,您要监视哪种类型的root用户访问权限?愚蠢的管理员错误或恶意内部人员?前者-正如您已经建议的那样,您将需要一个好的配置管理解决方案。后者-如果他们知道自己在做什么,那么您只能希望抓到足够多的东西来表明发生了一些值得调查的事情。您只想知道某种形式的未经授权的活动已经开始,并被警告这一事实。如果他们很聪明,他们将禁用您构建的大多数日志记录(通过更改服务器状态或引入他们自己的工具),但希望您能抓住事件的开始。

话虽如此,我建议您可以使用几个工具。首先,从一个好的sudo策略开始(已经有人建议过)。其次,检查sudoshell是否需要授予那些管理员root shell访问权限。第三,也许是最好的选择(尽管强度最高),请研究linux内核审计。


+1感谢您提出sudoshell的建议,并特别感谢提及Linux内核的审计系统-这可能是我想要实现的目标的绝佳补充。
mfriedman

2

您可能会做的是将该 库用于sudo,为每个人提供自己的用户帐户,然后将sudo -i放入每个人的配置文件中。这样,他们就可以立即获得root用户访问权限,并且可以记录他们使用的每个命令。


+1我不知道那个图书馆。谢谢你的分享!
mfriedman

1

他们已经扎根了。您可以期望的最好结果是,至少看看他们何时决定摆脱您的监控乌托邦,但除此之外,任何人都在猜测。

我能想到的“最佳”选项是强制使用普及的配置自动化和管理,并使用修订控制系统管理清单并通过该系统部署更新。然后阻止实际的root登录到服务器。(可以通过未分配的且每次使用后都未更改的密码或SSH密钥来提供“紧急情况,我打破了某些东西”访问权限,每个人都可以观察到搞砸的sysadmin,以确保他们不会更改任何内容)。

是的,这将带来不便和烦人,但是如果您非常想监控每个人的行为,那么我想您处于一个不便且烦人的环境中,这会赢得胜利似乎不是一个大问题。


我不得不赞同你。最好的选择不是让人们以root特权登录以在服务器上执行更改,而是通过配置管理系统进行更改。我发现您的意见有助于完善和澄清我的问题。
mfriedman

1

正如其他人所说,几乎没有办法以无法禁用的方式对具有完全根访问权限的用户进行登录,但是如果您正在运行debian / ubuntu,请查看 snoopy,它非常接近您想要的内容

snoopy只是一个共享库,用作libc提供的execve()函数的包装,以记录对syslog(authpriv)的每次调用。系统管理员可能会发现窥探在诸如轻/重系统监视,跟踪其他管理员的操作以及对系统中发生的事情有很好的“感觉”(例如,运行cgi脚本的apache)等任务中很有用。


感谢您的回答。它支持击键记录还是仅命令记录?
mfriedman

0

我同意disableleopard关于将sudo用于所有内容的评论。当然,这使事情更容易记录。

我还将定期添加备份bash历史记录文件。貌似经常被忽视,但有时却可以作为重要的信息来源……问高盛。;-)

http://www.guardian.co.uk/business/2009/jul/12/goldman-sachs-sergey-aleynikov


2
我有一个.bash_logout脚本,可以将历史记录的时间戳复制到/var/lib/history/$user.$tty-or-IP.$yymmddhhss(如果我更关心,我会设置过程记帐或适当的记录)审核工具...但这并不是真正的安全性,因此我可以找出谁做了一些愚蠢的事情,并告诉他们a)不要再做一次,b)如何正确地做。在这里,提高青少年的线索水平比信任更重要。
cas

1
让我想起了一个初级销售人员打击百万美元交易的故事。他希望老板解雇他,老板说:“天哪!培训您只花了我一百万美元!” 当我们讲话时,我可以感觉到大三学生的“线索水平”正在增加。;-)
KPWINC

0

那将是困难的...

root可以运行经过严格测试的脚本,这些脚本可能违反所有安全措施(杀死监视过程),切碎日志文件/对其进行修剪等……但仍然……

假设多个拥有root特权的管理员正在团队工作。root也可以终止任何监视过程。不幸的是,该登录名/密码已公开。否则他们会得到不必要的陪伴。

尽管不建议创建UID为0的多个根帐户,但可能适用于此。

在/ etc / ssh / sshd_config中将行更改为:PermitRootLogin

被推荐。这样一来,用户就可以使用他/她的普通帐户登录(日期时间戳与(可能是伪造的IP地址)一起登录),然后切换到root用户。使用su命令

并且这样可以防止以root身份直接登录。

我们必须考虑,根本无法在这里做什么。

须藤应该很好。备份/ etc目录配置文件应该很好。/ var /目录日志文件应定期通过电子邮件发送或存储在单独的NFS中。

如何编写集成了Mobile Gateway公司的API的脚本,这些公司将SMS分组为所有root用户的移动设备,其中之一不在办公室工作。我知道那会令人讨厌,但仍然如此。

破坏SSH几乎没有问题。


0

我们在客户的网站上进行了以下设置:

  • 同样开放以在AD(个人帐户)上使用Kerberos进行身份验证
  • 仅授权给某些Unix管理员AD组
  • sudoers组== AD组
  • 每台服务器上的OSSEC HIDS代理以及加固服务器上的管理器
  • OSSEC Web用户界面
  • Splunk 3和Splunk-for-OSSEC

它会记录服务器上所有sudo的使用情况,并跟踪对文件的任何更改,软件包的安装,可疑进程等。


0

我们有几台终端服务器可以访问我们所有的设备,这意味着一台可以从终端服务器登录,也可以从一台具有物理访问权限的服务器登录。

终端服务器上的Sshd已使用http://www.kdvelectronics.eu/ssh-logging/ssh-logging.html进行了修补,可以正常工作,但是很长时间没有更新。我对它进行了一些修改,使其可以在openssh 4.7上工作,但是在5.1上却无法做到。修补了sshd segfaults,并且只要我没有足够的时间来解决该问题,我几乎就切换到ttyrpld。


0

到目前为止,这就是我所拥有的:

  • sudosh:似乎支持A和B(虽然不完全确定A)
  • Sudoscript:似乎支持B(Sudoscript有一个名为sudoshell的组件,如果这是romandas建议的,谢谢提示)
  • 史努比记录器sudo_exetrace:并非我要找的东西,但可能是一个很好的补充(感谢otherreceive和blauwblaatje提供的这些链接)

您是否知道其他任何不涉及修补内核或其他系统组件的工具?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.