在C中使用阴影支持

时间:2016-05-14 20:46:49

标签: c gcc

我想对我的这个阴影问题有所了解(......我知道......但这就是我现在所处的地方......可怕的笑话。)

有点背景:我正在尝试编写一个简单的程序" mksuid" (将在其他一些事情中)询问用户他们的密码。然后将根据影子文件验证密码。如果,一切都是jives,程序可以继续,否则退出。

我希望了解如何从用户那里获取密码并验证它是否合适。所以,这就是我所在的地方......

我试图让this示例开始,但我正在努力编写它。

我按照提供的所有说明操作,并有一个简单的驱动程序调用函数 login()。然后我gcc:

mksuid.c:6:27: fatal error: shadow/shadow.h: No such file or directory
#include <shadow/shadow.h>
                       ^

我得到了回复:

<script>
    function toCelsius(fahrenheit) {
        return (5/9) * (fahrenheit-32);
    };

    document.getElementById("demo").innerHTML = "The temperature is " +  toCelsius(77) + " Celsius";

</script>

编译终止。

我试过#including shadow.h,但它(不出所料)引起了人们的注意,因为它不知道在哪里找到任何东西。

我很难找到好的例子来帮助我实现目标。谢谢你的帮助!

*我没有完成安装影子套件的所有步骤。我假设我的发行版有它,因为我有一个正确填充在我的etc /中的影子文件。也许这是有缺陷的逻辑。如果是这样,请告诉我。

1 个答案:

答案 0 :(得分:4)

这是一个使用libpam的工作示例,它比shadow更高一级:

#include <security/pam_appl.h>
#include <security/pam_misc.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) 
{
  /* Read the username from command line           */
  argc--, argv++;
  if (argc != 1) {
    fprintf(stderr, "Please provide the username as the first CLI argument.\n");
    exit(EXIT_FAILURE);
  }
  char *username = argv[0];

  pam_handle_t* pamh;
  struct pam_conv pamc;

  /* Set up the PAM conversation.                  */
  pamc.conv = &misc_conv;
  pamc.appdata_ptr = NULL;
  /* Start a new authentication session.           */
  pam_start("su", username, &pamc, &pamh);
  /* Authenticate the user.                        */
  if (pam_authenticate(pamh, 0) != PAM_SUCCESS)
    fprintf(stderr, "Authentication failed!\n");
  else
    fprintf(stderr, "Authentication OK.\n");
  /* All done.                                     */
  pam_end(pamh, 0);
  return 0;
}

参考:http://www.makelinux.net/alp/084

Debian / Ubuntu上的依赖关系:libpam0g-dev

编译:{{1​​}}。

请注意,除非您以root身份运行(通过将其设置为SUID或将其转换为某种守护程序),否则它只能对自己进行身份验证,而不能对其他用户进行身份验证。

这意味着应该非常小心,以免它变得脆弱。这需要经验。我的意思是没有冒犯,但从你所说的,你不应该这样做。

为什么不使用基于gcc -o pam pam.c -lpam -lpam_miscsu的脚本?