我正在尝试将 SSH 访问限制为某些组以及文件中指定的用户。这些组在 /etc/ssh/user.allow 中列出,而组在 /etc/ssh/group.allow 中列出。我尝试在 /etc/pam.d/sshd 中使用以下几行:
auth sufficient /lib/security/pam_listfile.so onerr=fail item=user sense=allow file=/etc/ssh/user.allow
auth required /lib/security/pam_listfile.so onerr=fail item=group sense=allow file=/etc/ssh/group.allow
我不知道如何安排这些行,也不知道在哪里使用“required”和“sufficient”。有什么建议吗?
编辑:我想我的问题是,是否有任何方法可以对两个 pam.d 语句进行“或”运算?似乎 PAM 设置为仅使用“AND”语句。
答案1
“视情况而定”。您有多种选择,哪种选择有意义取决于它们在堆栈中的位置以及您想要的效果。由于您只发布了代码片段,而不是整个配置,所以我能想到两个:
- 您可以将它们都标记为“足够”。该标记表示匹配将停止评估(后面的行将完全不被处理 - 因此任何密码或密钥检查都需要在上面进行)。这就是“足够”的意思,它足以让您进入。另一方面,失败不会对您不利;因此,如果第一行成功,您就进入了,如果失败,也不会对您不利,而是检查第二行。
您可以使用扩展语法将第一个标记为“可以失败,但如果成功,则跳过下一个”,例如:
auth [success=1 default=ignore] /lib/security/pam_listfile.so item=user ...
auth [success=ok default=die] /lib/security/pam_listfile.so item=group ...
如果用户检查成功则跳过组检查,但是如果组检查失败则也失败(并且停止评估,“坏”而不是“死”无论如何都要处理后面的模块)。
扩展语法版本可能需要指定更多操作(man pam.conf
-http://linux.die.net/man/5/pam.conf),并且您在编辑 pam 配置时一定要小心谨慎,因为完全有可能将自己锁定在系统之外(通常,如果您正在编辑文件,请将其保持在编辑器中打开状态,然后尝试登录或在单独的终端中执行任何配置操作)。请注意,也有可能完全意外地将系统配置得过于宽松(例如,早期的“足够”行可能会跳过您的环境设置和密码检查,或其他)。