为什么需要用docker将`pam_loginuid`设置为'optional'的值?

为了运行ssh守护进程服务, pam_loginuid条目必须在Ubuntu 13.10 官方示例中描述的/etc/pam.d/sshd中设置为可选。

这个入口是可选的以前版本的Ubuntu? Ubuntu 13.10之前是否存在?

无论如何,将pam_loginuid设置为optional意思是什么?

我的SSHconfiguration在这方面是不是很安全?

当用户通过SSH,X或类似的东西登录时, loginuid用于设置进程的loginuid审计属性。 这个属性可以被审计框架用于各种目的。

但是,设置此审计属性需要启用一些与审计相关的功能; 默认情况下, Docker会丢弃它们 ,所以audit_setloginuid调用将会失败。

当PAM模块被配置为required ,这样的故障是致命的(并且PAM阻止登录继续); 而optional手段“继续”。

我可能是错的,但我相信虽然pam_loginuid在以前的版本(我用12.04测试)可用,但它并没有启用; 所以这就是为什么13.10和更高的要求这个特殊的设置。

这项调查太长了评论。 正如@jpetazzo所指出的 ,这个问题很可能是由于缺少CAP_AUDIT_WRITE功能。 这显然影响了一些版本的Docker和Linux,但不是其他版本。 所以我在这里试着调查一下这个的演变。

  • #3015 (2013-12-13,0.7.2)引入了lxc守护进程的上限,并将AUDIT_WRITE包含在被删除的能力列表中
  • #5810 (2014-05-16,0.12.0)使得容器库除了白名单之外的所有功能
  • #6527 (2014-06-19,1.0.1)从黑名单移动到白名单,并没有包括AUDIT_WRITE
  • #7179 (2014-07-24,1.2.0)将AUDIT_WRITE功能添加到白名单
  • #20662 (2016-03-19,1.11.0)移动文件,所以设置现在在oci/defaults_linux.go

所以看起来0.7.2之前的所有版本以及1.2.0之后的所有版本都应该保留CAP_AUDIT_WRITE 。 正如我所看到的与1.12.5相关的pam_loginuid问题,这里可能涉及到其他一些功能。