在Linux上,检测影子密码文件正在使用的最佳方法是什么。
这是一种实现方法:
#include <stdio.h>
#include <stdlib.h>
#include <pwd.h>
int main(int argc, char *argv[]) {
struct passwd *p;
if (!(p = getpwuid(0)))
{
printf("root user not in /etc/password\n");
exit(1);
}
if (strcmp(p->pw_passwd, "x")) {
printf("using shadow passwd\n");
} else {
printf("shadow passwd\n");
}
exit(0);
}
我不太关心htat解决方案,因为它不是直接的。
还有更直接的东西吗?
是否有不需要读取passwd文件的内容?
我的偏好是不需要root特权的解决方案。
尽管比这复杂一点,但我的目的是向用户提供有关其计算机上安全状态的明确错误消息。例如,如果管理员选择在不使用setuid root的情况下运行我的应用程序,并且他们安装了影子密码,我想给他们一个明确的错误消息,他们必须选择一个或另一个。他们还可以选择其他身份验证方案。
最佳答案
您的代码不会检查是否正在使用影子,而不会检查root帐户是否具有非影子密码。将密码哈希设置为"x"
只是确保没有密码可以匹配的一种方法。其他字符也可以使用("*"
也很常见)。如果在使用影子的情况下完成了此操作,这只是为了防止未意识到影子的程序允许通过空白密码登录。否则,将该字段留空也一样。
检查root是否正在使用影子密码的方法是调用getspnam("root")
。如果您不是root用户,这当然会失败;这就是阴影的全部。它不一定告诉您所有用户都具有影子密码,尽管将影子和非影子混合使用是不寻常的。
无论如何,为什么需要知道是否正在使用阴影?也许有更好的方法来完成您要达到的目标。
关于c - 检测影子密码文件正在使用的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23770676/