ssh 将原始用户传递给服务器上的环境

ssh 将原始用户传递给服务器上的环境

首先,我不知道将信息传递给环境是否是最好的方法,所以我将首先详细说明我真正想要实现的目标。

在公司范围内,有些服务器上的许多员工都有单独的 shell 帐户,他们使用这些帐户连接到其他服务器,使用公钥身份验证,以 root 身份登录。

我想要做的是,能够告诉他们正在登录的远程服务器上他们来自的服务器上的用户帐户是什么。

例如用户 John Doe 有一个账户中央服务器,他登录了自己的账户杰多, 这杰多用户现在连接到远程服务器.1并以以下身份登录使用公钥认证。

我想记录他发出的命令远程服务器.1但我想保留他实际上杰多中央服务器

所以,基本上我希望能够从中提取日志远程服务器.1并查看哪位员工在何时何地做了什么事

我知道我可以在配置文件或 bashrc 中添加一些登录信息远程服务器.1并设置 sshd许可证用户环境,使用全局配置文件中央服务器并使用它将环境变量中的用户名传递给远程服务器.1

我想知道是否有更好的方法来实现这一点?

谢谢

答案1

第一个也是最好的解决方案就是根本不允许 SSH 登录到 root 帐户。正如您自己发现的那样,这使得追踪谁做了什么变得非常困难。应该有权访问服务器的人应该使用自己的帐户,然后使用 sudo 执行需要 root 访问权限的任务。这是当前 SSH 访问的最佳实践。

您可能还想在用户进行 SSH 工作的中央服务器上设置审计日志。您可以使用 auditctl 仅记录 ssh 命令。(不过,启用审计会在一定程度上降低服务器速度;您需要进行一些性能评估来确定它是否适合您。)

您还可以向目标服务器上的 SSH 密钥的公共部分添加信息 - 请参阅这个问题了解一些相关提示。但是,由于用户拥有 root 权限,因此他们很容易更改这些数据,因此这些数据不适用于任何严肃的审计。

此外,如果您设置LogLevelVERBOSE,sshd 将记录用于登录的 ssh 密钥的指纹。但除非将这些日志转发到这些人无权访问的远程服务器,否则它们可能会被篡改,因此不构成可靠的审计跟踪。

答案2

没有办法既保留审计功能又让用户成为 root 权限。

相反,授予sudo用户所需命令的访问权限,并记录所有内容。

sudoers(5)手册页中:

 sudoers also supports logging a command's input and output streams.  I/O logging is not on by default but can be enabled using the log_input and log_output Defaults flags as well as the LOG_INPUT and LOG_OUTPUT command tags.

 log_input         If set, sudo will run the command in a pseudo tty and log all user input.  If the standard input is not connected to the user's tty, due to I/O redirection or because the command is part of a pipeline, that input is also captured and
                   stored in a separate log file.  This flag is off by default.

                   Input is logged to the directory specified by the iolog_dir option (/var/log/sudo-io by default) using a unique session ID that is included in the normal sudo log line, prefixed with “TSID=”.  The iolog_file option may be used to con‐
                   trol the format of the session ID.

                   Note that user input may contain sensitive information such as passwords (even if they are not echoed to the screen), which will be stored in the log file unencrypted.  In most cases, logging the command output via log_output is all
                   that is required.

 log_output        If set, sudo will run the command in a pseudo tty and log all output that is sent to the screen, similar to the script(1) command.  If the standard output or standard error is not connected to the user's tty, due to I/O redirection or
                   because the command is part of a pipeline, that output is also captured and stored in separate log files.  This flag is off by default.

                   Output is logged to the directory specified by the iolog_dir option (/var/log/sudo-io by default) using a unique session ID that is included in the normal sudo log line, prefixed with “TSID=”.  The iolog_file option may be used to con‐
                   trol the format of the session ID.

                   Output logs may be viewed with the sudoreplay(8) utility, which can also be used to list or search the available logs.

此外,您还想记录sudo使用情况:

 sudoers can log both successful and unsuccessful attempts (as well as errors) to syslog(3), a log file, or both.  By default, sudoers will log via syslog(3) but this is changeable via the syslog and logfile Defaults settings.

最后要注意的是,您需要确保授予用户的访问权限不会授予太广泛的权限,以允许他们覆盖审计系统。

相关内容