在 Solaris 上,我是否可以在单个命令行条目中创建一个未禁用但密码已禁用(仅允许 SSH)的用户帐户

在 Solaris 上,我是否可以在单个命令行条目中创建一个未禁用但密码已禁用(仅允许 SSH)的用户帐户

我正在为 SA 构建一个脚本,供其在执行某项任务时遵循。该任务需要将用户添加到只能通过 SSH 连接到系统(使用密钥)而不能使用密码登录的系统。我想要做的是让 SA 一次性执行带有适当标志的 adduser 命令来创建用户。

我不想执行 adduser... 然后是 usermod -L ,username. (这会完全锁定用户),或者将 shell 设置为 /sbin/nologin (这与 usermod -L 的作用相同)。

我也不希望 SA 手动编辑 /etc/passwd。

我正在寻找一个命令行解决方案。我知道我可以编写一个脚本,但这需要 SA 下载并运行该脚本,这是我的最后手段。

答案1

关于一行解决方案,没有。诸如此类的复杂逻辑需要操作 PAM 堆栈。话虽如此,我认为这个 PAM 规则不必太复杂……所以这实际上取决于您是否有一个配置管理策略来为您管理这个 PAM 配置,而不是将其放在 SE 上。如果你这样做,这可能不会太痛苦。

这是一个经常被忽视的事实,但基于密钥的 ssh 身份验证会绕过authPAM 堆栈。如果您有办法识别只能通过 SSH 密钥登录的人,则可以在堆栈中安装一个钩子,auth如果发现该特征,则身份验证尝试失败。我建议为此创建一个组,因为它比将用户名硬编码到 PAM 配置中更具可扩展性。

将所有这些放在一起,并假设这65536是该组的 gid:

  1. groupadd -g 65536 sshonly
  2. 将以下行添加到堆栈顶部auth
    auth required pam_succeed_if.so gid ne 65536
  3. useradd -u $SOMEUID -g $SOMEGID somename
  4. usermod -a -G sshonly somename

答案2

实际上,Andrew 的回答并不完全正确。虽然创建不同组和修改身份验证堆栈都是很好的建议,但步骤 3 和 4 实际上可以合并为一行。基于 Andrew 的示例,下面是一行代码(更接近完整代码):

useradd -u $SOMEUID -g $SOMEGID -G sshonly -s $SHELL -c comment -d $HOMEDIR somename

可以根据您的环境需要添加其他标志。希望这能有所帮助!

相关内容