使用 PAM 是最好的解决方案。您可以编写小的 C 代码,或安装 python-pam 包并使用 python-pam 包附带的 python 脚本。看/usr/share/doc/python-pam/examples/pamtest.py
测试用户是否可以登录的正确方法是实际以该用户身份登录。
所以我推荐的是让 CGI 脚本expect用来运行su,传递密码并运行必须执行的命令。这是执行此操作的期望脚本的草稿(警告:绝对未经测试,而且我对期望不熟练)。替换用户名、密码和命令(我写的地方bob,swordfish和somecommand);一定要正确引用。
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。