PAM从入门到精通(十五)

这篇具有很好参考价值的文章主要介绍了PAM从入门到精通(十五)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

接前一篇文章:PAM从入门到精通(十四)

本文参考:

《The Linux-PAM Application Developers' Guide》

先再来重温一下PAM系统架构:

PAM从入门到精通(十五),PAM,PAM,Linux安全

更加形象的形式:

PAM从入门到精通(十五),PAM,PAM,Linux安全

六、整体流程示例

1. 官方文档中的例程及解析

从PAM从入门到精通(四)起到上一回止,整体结合实例讲解了《The Linux-PAM Application Developers' Guide》中的“Chapter 3. The public interface to Linux-PAM”中的3.1,实际上对应了上图中的PAM-API部分。不过看了各函数之后,对于总体流程还是缺少了了解和把握。本回就以一个示例(代码)将之前这些函数串起来,以对于总体流程以及各函数之间的顺序和关系有更好的理解。

示例代码参见《The Linux-PAM Application Developers' Guide》的“Chapter 8. An example application ”。

为了了解Linux PAM应用程序的编写方式,我们包括以下示例。它会提示用户输入密码,并在标准输出中指示他们的帐户是否有效,其返回代码也指示成功与否(0表示成功;1表示失败)。

代码如下:

/*
  This program was contributed by Shane Watts
  [modifications by AGM and kukuk]
  You need to add the following (or equivalent) to the
  /etc/pam.d/check_user file:
  # check authorization
  auth required pam_unix.so
  account required pam_unix.so
 */
#include <security/pam_appl.h>
#include <security/pam_misc.h>
#include <stdio.h>

static struct pam_conv conv = {
    misc_conv,
    NULL
}

int main(int argc, char *argv[])
{
    pam_handle_t *pamh=NULL;
    int retval;
    const char *user="nobody";

    if(argc == 2) {
        user = argv[1];
    }
    if(argc > 2) {
        fprintf(stderr, "Usage: check_user [username]\n");
        exit(1);
    }

    retval = pam_start("check_user", user, &conv, &pamh);

    if (retval == PAM_SUCCESS)
        retval = pam_authenticate(pamh, 0); /* is user really user? */

    if (retval == PAM_SUCCESS)
        retval = pam_acct_mgmt(pamh, 0); /* permitted access? */

    /* This is where we have been authorized or not. */
    if (retval == PAM_SUCCESS) {
        fprintf(stdout, "Authenticated\n");
    } else {
        fprintf(stdout, "Not Authenticated\n");
    }
 
    if (pam_end(pamh,retval) != PAM_SUCCESS) { /* close Linux-PAM */
        pamh = NULL;
        fprintf(stderr, "check_user: failed to release authenticator\n");
        exit(1);
    }

    return ( retval == PAM_SUCCESS ? 0:1 ); /* indicate success */
}

说实话,这代码写得很一般,argc为1时的情况没有考虑进来。不过不必关注这些细枝末节,人家把主要的流程讲清楚了。整个流程分为以下步骤:

(1)pam_start函数

代码片段:

    retval = pam_start("check_user", user, &conv, &pamh);

作用:

PAM事务初始化。

pam_start函数创建PAM上下文并启动PAM事务。它是应用程序需要调用的第一个PAM函数。事务状态完全包含在此句柄标识的结构中,因此可以并行处理多个事务。但是不可能对不同的事务使用相同的句柄,每个新的上下文都需要一个新的句柄。

(2)pam_authenticate函数

代码片段:

    retval = pam_authenticate(pamh, 0); /* is user really user? */

作用:

对用户进行身份认证。

pam_authenticate函数用于对用户进行身份验证。用户被要求提供一个基于身份验证服务的身份验证令牌,通常这是一个密码,但也可能是指纹。

PAM服务模块可以请求用户通过对话机制输入其用户名(参见pam_start()和pam_conv())。经过身份验证的用户名称将出现在PAM的PAM_USER项中。可以通过调用pam_get_item()来恢复此项目。

(3)pam_acct_mgmt函数

代码片段:

    retval = pam_acct_mgmt(pamh, 0); /* permitted access? */

作用:

账户验证管理。

pam_acct_mgmt函数用于确定用户的帐户是否有效。它检查身份验证令牌和帐户过期与否,并验证访问限制。其通常在用户经过身份验证后调用。

(4)pam_end

代码片段:

    if (pam_end(pamh,retval) != PAM_SUCCESS) { /* close Linux-PAM */
        pamh = NULL;
        fprintf(stderr, "check_user: failed to release authenticator\n");
        exit(1);
    }

作用:

PAM事务终止。

pam_end函数终止pam事务,是应用程序应在pam上下文中调用的最后一个函数。此函数为与pam_set_item和pam_get_item函数关联的项释放了所有内存。调用pam_end()后,与此类对象关联的指针不再有效。文章来源地址https://www.toymoban.com/news/detail-723149.html

到了这里,关于PAM从入门到精通(十五)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PAM | 账户安全 | 管理

    PAM PAM(Pluggable Authentication Modules,可插入式身份验证模块)是一个灵活的身份验证系统,允许我们通过配置和组合各种模块来实现不同的身份验证策略。 在 Linux 或类 Unix 系统中,常见的 PAM 模块包括以下几种类型: 认证模块(Authentication Modules) : 用于验证用户的身份,通

    2024年02月20日
    浏览(36)
  • 使用PAM保障开发运营安全

    硬编码凭据和 DevOps 系统中缺乏凭据安全性是组织的巨大漏洞。以明文形式访问凭据的恶意内部人员可以在 IT 中建立和扩展其立足点 基础设施,构成巨大的数据被盗风险。 特权访问管理 (PAM) 是指一组 IT 安全管理原则,可帮助企业隔离和管理特权访问、管理特权帐户和凭

    2024年02月10日
    浏览(44)
  • PAM安全配置-用户密码锁定策略

    PAM是一个用于实现身份验证的模块化系统,可以在操作系统中的不同服务和应用程序中使用。 pam_faillock模块用来实现账号锁定功能,它可以在一定的认证失败次数后锁定用户账号,防止暴力破解密码攻击。 常见选项 deny:指定锁定账号的失败次数阈值。默认为3次。 unlock_ti

    2024年02月03日
    浏览(44)
  • Linux开发:PAM3 Ubuntu(22.04)安装PAM开发库

    Ubuntu22.04默认是不带pam开发库的,需要通过以下命令进行安装 sudo apt install libpam0g-dev 关于PAM的文档可以参考: Ubuntu Manpage: pam - Pluggable Authentication Modules Library 也可以通过man进行查看: man 3 pam  编译程序是需要加入的头文件: #include security/pam_appl.h #include security/pam_modules.h #i

    2024年02月19日
    浏览(51)
  • 网络安全入门教程(非常详细)从零基础入门到精通

    1.入行网络安全这是一条坚持的道路,三分钟的热情可以放弃往下看了。 2.多练多想,不要离开了教程什么都不会了,最好看完教程自己独立完成技术方面的开发。 3.有时多百度,我们往往都遇不到好心的大神,谁会无聊天天给你做解答。 4.遇到实在搞不懂的,可以先放放,

    2024年01月18日
    浏览(50)
  • 网络安全入门教程(非常详细)从零基础入门到精通!

    网络安全是一个庞大而不断发展的领域,它包含多个专业领域,如网络防御、网络攻击、数据加密等。介绍网络安全的基本概念、技术和工具,逐步深入,帮助您成为一名合格的网络安全从业人员。 1.计算机基础知识 了解了计算机的硬件、软件、操作系统和网络结构等基础知

    2024年04月13日
    浏览(60)
  • Linux PAM和AppArmor

    PAM全称叫作Pluggable Authentication Modules,译为可插拔验证模块。1995年起源于sun公司,PAM是一个框架,通过PAM框架提供的接口,应用程序可以不关心基层具体的实现过程,直接调用接口实现身份验证功能。 PAM还有一个功能就是在用户空间就是先对用户的资源进行限制。 PAM不是L

    2024年02月06日
    浏览(40)
  • 小白学安全--web安全入门(非常详细)零基础入门到精通,收藏这一篇就够了

    作为一个从知道创与到自建安全团队的资深白帽子,一路也是从不止所谓的web小白历经磨难成长起来的我,给现在正在准备学习web安全的同学一些建议。在我认为,渗透安全的范围其实要学习的东西很广泛的,间接的相当于你要是一个前端工程师,也要是一个后端工程师(其

    2024年02月19日
    浏览(42)
  • 网络安全|渗透测试入门学习,从零基础入门到精通—收集信息篇

    目录 前面的话 1、收集域名信息 1.1、Whois查询 ​编辑1.2、备案信息查询  2、收集敏感信息 3、收集子域名信息 3.1、子域名检测工具 3.2、搜索引擎枚举 3.3、第三方聚合应用枚举 3.4、证书透明度公开日志枚举 本章小结 本人喜欢网络完全的一些知识,自学一些。现在写出来和大

    2024年02月08日
    浏览(51)
  • 教你在GitHub上保障开源项目安全?入门到精通

    1998年,Christine Peterson创造了 “开源软件”这个词。她解释道:“这是刻意为之,为了让其他人更容易理解这个领域”。同年,O’Reilly组织了首届“开源峰会”。 开源软件受到更多人青睐原因在于,用户对软件拥有更多的控制权因为他们可以检查代码。对于长期项目来说,开

    2024年02月03日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包