如何编写系统登录测试?

jcu*_*bic 9 linux security bash login testing

我编写了一个调用bash命令的 Python CGI 脚本,它需要测试是否在主机上成功登录。

我如何为此编写测试?

例如,我可以创建一个bash脚本来针对主机上的注册用户测试给定的用户名和密码组合吗?

Mic*_*jer 8

使用 PAM 是最好的解决方案。您可以编写小的 C 代码,或安装 python-pam 包并使用 python-pam 包附带的 python 脚本。看/usr/share/doc/python-pam/examples/pamtest.py


Gil*_*il' 5

测试用户是否可以登录的正确方法是实际以该用户身份登录。

所以我推荐的是让 CGI 脚本expect用来运行su,传递密码并运行必须执行的命令。这是执行此操作的期望脚本的草稿(警告:绝对未经测试,而且我对期望不熟练)。替换用户名、密码和命令(我写的地方bobswordfishsomecommand);一定要正确引用。

spawn "/bin/su" "bob"
expect "Password:"
send "swordfish\r"
expect "^\\$"
send "somecommand"
expect -re "^\\$"
send "exit\r"
expect eof
Run Code Online (Sandbox Code Playgroud)

如果你真的不想通过一层来执行命令su(比如因为你所做的事情必须由CGI进程本身来执行),那么使用expect运行命令true并检查返回状态是否为0。

另一种方法是通过Python 的 PAM 绑定直接在您的应用程序中使用PAM

  • @jcubic 在命令行参数中输入密码是一个非常愚蠢的想法,因为命令行参数在 Unix 系统上是公开的。删除密码将提供与将其放入命令行相同的安全级别。而且检查起来会容易得多:`/bin/true` 就足够了。 (3认同)