我正在尝试编写一个 PAM 模块,该模块将在登录时将提供的用户名与“虚拟”用户名列表进行比较。如果提供的用户名是“虚拟用户”,它将完成身份验证,然后将用户名更改为某个真实的本地用户并继续登录过程。
在尝试执行此操作时,我注意到无法(至少默认情况下无法)更改 OpenSSH 下的用户名 - 您只能使用在第一次身份验证尝试中提供的用户名,并且不能使用 PAM 的用户名切换功能来更改它。
有没有办法可以实现这一点?(修改 OpenSSH 代码也是一个有效的选项,但肯定不是首选。)
答案1
你不会想这么做的。
咬紧牙关,创建用户,并授予他们 sudo 访问权限。
答案2
你想用手术刀解决问题,但你需要的是一块大石头。考虑一下:
Unix 用户名映射到数字用户 ID。
这是多对多映射,没有任何限制。
因此,没有什么可以阻止您创建一堆帐户(guest
、,并将它们全部映射到相同的数字用户 ID、主目录等。只需编辑您的密码文件并添加具有相同数字用户(和组)ID 的多个用户external
。random
如果您愿意,您甚至可以对root
(UID 0) 执行此操作 - 事实上 *BSD 系统通常带有一个toor
UID 0 的帐户,该帐户的密码已被锁定并且无法登录。
(大多数系统管理员出于适当的偏执而删除此帐户......)
这是一个有点粗暴的解决方案,缺乏任何风格或技巧,但简单往往是最好的。
注意事项:
- 当这些用户运行的时候,或者当您在/输出
whoami
中查看它们时,您通常会看到密码文件中针对给定数字 UID 出现的第一个用户名,但是无论如何您都会通过上面描述的解决方案看到它。w
who
- 如果您使用 SSH 密钥(
authorized_keys
文件),它将映射到用户的主目录。如果您的所有用户共享一个主目录,他们就会共享一个authorized_keys
文件。
您能如果担心这个问题,请为用户分配独立的主目录。 - 您的登录记录可能会显示给定用户名的身份验证(而不是映射到上面 (1) 中提到的第一个用户),但这可能是一件好事,因为您可以看到谁从哪里登录到哪个帐户,至少可以通过 IP 地址看到。
- 您的用户将拥有独立的 unix 密码。这可能正是您想要的,但如果不是,您可以编写一些脚本来同步它们,而不必花费太多精力和时间。
答案3
您是否考虑过安装一个包装器,让其以 su(1) 作为用户 shell?请确保您“su -”...
我并不是说这是一个完全安全的解决方案,但它也不是一个完全安全的问题。