使用PAM在openssh中切换用户

我正在尝试编写一个PAM模块,它将在login时将提供的用户名与“虚拟”用户名列表进行比较。 如果提供的用户名是“虚拟用户”,则将完成authentication,然后将用户名更改为某个真实的本地用户并继续进行login过程。

在尝试这样做的时候,我注意到在OpenSSH下更改用户名是不可能的(至less不是默认情况下) – 在第一次身份validation尝试中,您提供了一个用户名,而且您不能使用PAM的用户名 – 切换function来改变它。

有没有办法让这个? (修改OpenSSH代码也是一个有效的选项,但肯定不是首选的。)

你不想这样做。

咬紧牙关,创build用户,并给他们sudo访问权限。

你试图用手术刀解决问题,但是你需要的是一块大石头。 考虑:

Unix用户名被映射到数字用户ID。
这是一个多对多的映射,没有任何限制。
所以没有什么是阻止你创build一堆帐户( guestexternalrandom和映射到相同的数字用户ID,主目录等 – 简单地编辑您的密码文件,并添加多个用户相同的数字用户和组)ID。

如果需要的话,甚至可以为root (UID 0)做这个事情 – 实际上* BSD系统通常带有UID为0的toor帐户,它的密码被locking,无法login。
(大多数系统pipe理员删除此帐户,出于适当的偏执狂水平…)

这是一个有点粗暴的解决scheme,缺乏任何风格或技巧的水平,但简单往往是最好的。

注意事项:

  1. 当这些用户运行whoami ,或者当您在输出中查看他们时,您通常会看到在给定的数字UID的密码文件中出现的第一个用户名,但无论如何,您会看到上述解决scheme。
  2. 如果您使用SSH密钥( authorized_keys文件),它将映射到用户的主目录。 如果你的所有用户共享一个主目录,他们共享一个authorized_keys文件。
    如果这是一个问题,您可以分配给用户独立的主目录。
  3. 您的loginlogging可能会显示给定用户名的身份validation(而不是映射到上面(1)中所述的第一个用户),但这可能是一件好事,因为您可以看到谁正在login哪个帐户,至less通过IP地址。
  4. 您的用户将拥有独立的unix密码。 这可能是你想要的,但如果不是,你可以写一些脚本来同步它们,没有太多的痛苦和痛苦。

你有没有考虑安装一个包装,做su(1)作为用户shell? 确保你“su – ”….

我并不是说这是一个完全安全的解决scheme,但也不是一个完全安全的问题。