我有一个运行在ssh上的git服务器,每个用户在系统上都有一个unix帐户。
鉴于有两个用户可以访问存储库,所以我如何确定哪个用户执行了哪个提交,因为提交用户名和电子邮件是由git客户端提交和控制的。
我担心一个用户可能会假冒另一个用户,即使他们具有相同的授权权限。
我有一个运行在ssh上的git服务器,每个用户在系统上都有一个unix帐户。
鉴于有两个用户可以访问存储库,所以我如何确定哪个用户执行了哪个提交,因为提交用户名和电子邮件是由git客户端提交和控制的。
我担心一个用户可能会假冒另一个用户,即使他们具有相同的授权权限。
Answers:
如果您对此感到担心,可以通过以下两种方法解决该问题。
.git/hooks/update.sample
灵感。如果您在SO上对此提出疑问,请@通知我,这对我来说也很有趣
我看到两种获取此类信息的好方法。一种是通过增加sshd本身的日志记录,另一种是通过对磁盘上的git存储库进行更深入的监视。由于没有人单独提供所需的信息,因此您可能需要同时使用外部日志分析引擎或使用人眼和时间戳按需将日志数据关联起来。
毫无疑问,默认情况下,您可以使用ssh身份验证日志查看用户何时登录以及从何处登录。您要做的是在注销sshd时更改级别。因此,编辑您的内容/etc/ssh/sshd_config
并找到看起来像这样的行
#LogLevel INFO
并将其更改为
LogLevel VERBOSE
然后重新启动sshd服务。这将sshd的日志记录级别提高了1步,从而提供了更多信息。进行更改后,请查看我的远程访问日志片段。
Nov 2 08:37:09 node1 sshd[4859]: Connection from 10.10.10.5 port 50445
Nov 2 08:37:10 node1 sshd[4859]: Found matching RSA key: f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06
Nov 2 08:37:10 node1 sshd[4860]: Postponed publickey for scott from 10.10.10.5 port 50445 ssh2
Nov 2 08:37:10 node1 sshd[4859]: Found matching RSA key: f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06
Nov 2 08:37:10 node1 sshd[4859]: Accepted publickey for scott from 10.10.10.5 port 50445 ssh2
Nov 2 08:37:10 node1 sshd[4859]: pam_unix(sshd:session): session opened for user scott by (uid=0)
Nov 2 08:37:10 node1 sshd[4859]: User child is on pid 4862
Nov 2 08:40:27 node1 sshd[4862]: Connection closed by 10.10.10.5
Nov 2 08:40:27 node1 sshd[4862]: Transferred: sent 30632, received 7024 bytes
Nov 2 08:40:27 node1 sshd[4862]: Closing connection to 10.10.10.5 port 50445
Nov 2 08:40:27 node1 sshd[4859]: pam_unix(sshd:session): session closed for user scott
这里要注意的重要事项有两个方面
使用默认的LogLevel(INFO)sshd不会记录这些项目。获取密钥的指纹是另外一个步骤。您必须authorized_keys
使用ssh-keygen 处理适当的文件。
[root@node1 ssh]# ssh-keygen -l -f /home/scott/.ssh/authorized_keys
4096 f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06 /home/scott/.ssh/authorized_keys (RSA)
因此,您现在知道以下信息:
现在,我们有了一种在特定时间归因于用户操作的方法,假设两个用户均未同时登录,我们就可以开始查看对存储库所做的更改。
就像sysadmin1138所说的,这对于审计的子系统来说可能是一个很好的用例。如果您不使用基于RedHat的发行版,则可能有一个类似物,但是您必须找到它。auditd的配置非常密集,并且有大量的配置选项。要了解某些选项,请在我们的姊妹网站上查看有关此问题的信息安全专业人员。
最低限度,我建议在包含有问题的git存储库的磁盘上的目录上设置所谓的“监视”。这样做是指示内核模块报告针对指向我们列出的文件或目录的文件句柄执行文件访问调用的尝试,例如open()
或creat()
。
这里是一个示例配置,仅此而已。因此,请仔细阅读并理解您的现有内容/etc/audit/audit.rules
,以便适当地集成更改。
# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.
# First rule - delete all
-D
# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 1024
-w /path/to/git/repos-p wa
# Disable adding any additional rules - note that adding *new* rules will require a reboot
-e 2
/var/log/audit.log
当接收到ssh连接时,许多ssh守护程序会在其中进行输入或类似的操作。将此日志与commit-log交叉引用应使您了解使用了哪个ssh-user发出提交。这是审核步骤,将在事实验证之后使用。
实际上,将正确的ssh-user强制为适当的git-user是这里其他答案之一。