在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/

10-09 08:59