linux – 命令结束时在ssh登录和注销时运行命令

我们想在我们的Centos7机器上跟踪用户活动.去做
因此,管理层决定使用脚本和scriptreplay来基本记录用户活动并重放它.我对我们应该如何设计它进行了一些研究,但是依赖于auditd的解决方案在这里被管理层拒绝,并且将脚本放在用户的.profile中会导致一些问题,如下所述.

预期的行为如下:

>当用户通过SSH登录服务器时,脚本命令会生成并开始将用户活动记录到文件中.
>当用户在服务器上完成后,他会注销(通常键入exit或CTRLD).
>脚本进程停止并关闭文件.

现在的问题:

>我的研究表明,脚本实际上创建了另一个shell.因此,如果我在每个用户(或skel)的.bash_profile中放入脚本script.log,它将在登录后为用户发出新的shell,用户可以轻松地中止该过程并开始输入命令他通常的SSH会话.
当我退出由脚本命令生成的shell时,如何强制我的脚本实际关闭用户?
>脚本输出(即用户命令)应存储在非sudoers无法执行任何操作的私有场所(没有R / W / E权限).当用户本身没有特权时,我们如何在用户登录时运行具有提升权限的脚本?

解决方法:

至于强制命令,sshd有一个ForceCommand选项:

Forces the execution of the command specified by ForceCommand, ignoring any command supplied by the client and
~/.ssh/rc if present. The command is invoked by using the user’s login shell with the -c option.
This applies to
shell, command, or subsystem execution. It is most useful inside a Match block. The command originally supplied
by the client is available in the SSH_ORIGINAL_COMMAND environment variable.

因此,通过阅读,如果您将ForceCommand设置为脚本,那应该大致按照您的意愿执行.

至于保持审计跟踪安全,多服务器系统中的一个解决方案是从syslog中学习并通过网络将条目发送到不同的物理主机.这几乎可以防止用户在生成日志之后获取日志.如果没有其他任何事情,您可能需要将日志发送到localhost上的另一个端口,守护进程会收集并存储它们. (尝试了显而易见的,你不能脚本-f / dev / tcp / localhost / 8888,因为/ dev / tcp / …需要由bash处理,所以我猜你需要mkfifo自己沟通路径如manpage example for script -f)

上一篇:linux – 密码保护VPS上的单用户模式和GRUB


下一篇:数据库作业11:SQL练习7 - GRANT/ REVOKE / AUDIT