问题标签 [pam]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2641 浏览

authentication - 使用 pam_userdb.so 在 Berkeley DB 中为 vsftpd 加密的密码

我正在尝试使用 Berkeley DB 与一些虚拟用户一起安装 vsftpd。我主要遵循本指南: http: //www.neant.ro/2012/04/secure-ftp-with-vsftpd/。一切正常,但我想让密码在数据库中散列。我正在使用带有 glibc 2.12 的 CentOS 6.3。

从 pam_userdb.so 的联机帮助页中,我假设我可以使用 crypt 提供的功能。如果我们看一下 crypt(3) 手册页,我们可以使用 SHA-256 和 SHA-512。我会使用其中之一。

我的疑问是如何实现它。据我所知,我需要转到我的 pam.d 文件并编辑并添加参数 crypt 但是......我应该给它哪个值?5 用于 SHA-256?6 用于 SHA-512?

现在我需要数据库中 SHA-256/SHA-512 的密码。获取哈希的正确方法是什么?我想我必须使用 crypt 功能。但是,我需要使用 Ruby 来获取它,有什么办法吗?

在此先感谢您的帮助,

0 投票
2 回答
2436 浏览

ssh - 可能的 SSH PAM PTY 分配问题

我有一个托管在 Amazon EC2 上的 linux ubuntu 服务器。在系统上创建了大约 3000 多个 linux 用户,用户 ID 为 user_1、user_2 等。

令人惊讶的是,直到 user_2685 的用户都能够通过 ssh 登录到服务器。不止于此。

我已将 /etc/ssh/sshd_config 中的 LogLevel 更改为 DEBUG3。粘贴相关内容。

  1. 用户无法登录时的相关转储 - http://pastebin.com/NS2jC8vg
  1. 用户成功登录时的相关转储 - http://pastebin.com/vUXnpDsr

更新1:

以上转储来自服务器上的 /var/log/auth.log。以下是客户端上的转储。只需放置不同的转储的相关部分

登录成功

登录失败

操作系统:Ubuntu 精确 12.04

Openssh 服务器:OpenSSH_5.9p1 Debian-5ubuntu1.1, OpenSSL 1.0.1 14 Mar 2012

SSH 客户端:没关系,因为我在 ubuntu 和 Mac 上都试过,而且行为是一样的。

更新 2:

顺便说一句 - 这不是 PAM 的问题,就像我可以做su user_3000的那样,新用户登录并获得 PTY。

同样在不要求 PTYssh -T user_3000@www.codelearn.org的情况下执行 ssh 会登录用户。但它会停止登录后并且没有出现提示。可能那是因为一开始没有要求提示。

0 投票
1 回答
2903 浏览

php - PHP pam_auth() 最佳管理指南

好的,所以我正在为新站点开发一个小的临时欢迎登录页面。如果愿意,公众访问者可以选择提交他们的电子邮件地址。但我还想为开发人员添加一个用户/密码登录,以便在当前开发阶段查看完整的站点。开发人员在本地 LAMP 系统上各有一个用户/通行证。

现在,我想确定一个开发人员,而不是在适当的网站用户系统之上创建两个单独的用户系统,以便快速检查该用户是否可以使用本地系统登录。if(pam_auth($_POST["u"], $_POST["p"])) 正是这样做的。简单,不错。

但后来我发现你需要允许 apache 用户访问 */security/pam_passwd 文件(或者稍微好一点:pam_tally*)。这样做会造成安全漏洞。

我想知道其他开发人员从 PHP(+apache) 验证用户并通过本地 LAMP 安全系统进行了哪些操作?这是唯一的方法,还是有其他选择?有更好的建议吗?

最好的答案不一定是代码,而更多的是库名称的建议或指向其他解决方案描述的链接。

0 投票
2 回答
2175 浏览

c++ - 在 PAM 模块之间传递密码

我为 Ubuntu 创建了一个新的 PAM 模块。

我的代码:

我配置了/etc/pam.d/commom-auth:

sudo 命令执行结果:

并且保存在/tmp/pass.txt 中的用户名和密码是正确的。

为什么 pam_unix 不接受我的模块传递的密码?

谢谢。

0 投票
1 回答
470 浏览

debian - 声纳 PAM 身份验证

我正在尝试将 Sonar 设置为使用 PAM 身份验证。我已按照文档中的安装说明进行操作,但无法正常工作。从我得到的 sonar.log 文件中

错误 osppPamConfiguration 无法确定 PAM 服务名称。请检查是否在 'sonar.properties' 中设置了 'pam.serviceName' 属性

来自外部身份验证器的错误轨道错误:java.lang.NullPointerException:null

似乎找不到 JPam 库什么的。我尝试在 sonar.properties 中将 sonar.properties 设置为 JPam,但它似乎不是正确的名称,因为我得到了错误:

来自外部身份验证器的错误轨道错误:java.lang.NoClassDefFoundError:org/apache/commons/logging/LogFactory

在日志中。如果有人对从这里去哪里有任何指示,我将不胜感激。

0 投票
1 回答
393 浏览

linux - 关于如何设计 PAM 的一些高级问题

我正在为一个项目创建一个 PAM 模块。PAM 模块将使用一个库,该库将被一些命令行实用程序重用(而不是每次都重写所有内容)。在这个库中,我想让它解释根据远程主机的子网成员身份区分和/或记录的策略。据我所知,这个值可能来自身份验证应用程序,但我不知道。由于共享对象无法从 libpam 访问 pamh 结构,我不能只做一个 pam_get_item(就像我可以从 PAM 模块本身一样)所以我不得不求助于其他方法。

我想出的最佳解决方案是让共享对象查找已连接的 TTY,如果存在,请转到 utmp 并找到与该 TTY 关联的登录过程,然后从那里提取 IP 地址。如果没有 TTY,则假设它是网络用户的初始登录。然后该库遍历套接字(当您执行 a 时,我基本上将其定义为目标文件名中带有单词“socket”的任何符号链接ls -l /proc/<pid>/fd)并使用套接字 inode 编号与/proc/net/tcp并提取与该 inode 号关联的远程 IP 地址。如果它在那里没有找到一个 inode,那么它假定它是 Unix 域或 tcp6(IPv6 支持即将到来,并且在不久的将来并不是非常重要)。如果它仍然无法找到它,假设某个守护进程调用了一个链接它的应用程序并将其解释为这样(最终可能会做一些事情,如果它是值得的,但现在它只是一个很大的 NOOP 如果前两个不不返回任何东西。

它似乎有效,但我有一些关于 PAM 应该如何工作的高级问题:

  1. 是否有一些管理 PAM 操作的官方标准?例如,它是否被某个地方的 POSIX 标准所覆盖?我知道有多个 PAM 实现(到目前为止我发现了四个或五个),但我不知道现有的共同点是法律上的还是事实上的,或者只是我碰巧如何配置我的系统。

  2. 在我ls -l /proc/<pid>/fd > /lsOutput从模块本身(通过system())做了一个之后:

[root@hypervisor pam]# cat /lsOutput 总计 0

lrwx-----。1 根 64 Jun 15 15:09 0 -> /dev/null

lrwx-----。1 根 64 Jun 15 15:09 1 -> /dev/null

lrwx-----。1 根 64 Jun 15 15:09 2 -> /dev/null

lr-x-----。1 根 64 Jun 15 15:09 3 -> 套接字:[426180]

[root@hypervisor pam]#

ls并在用户登录后发布手册:

所以基本上,似乎只有在会话模块完成后才打开 TTY 和任何其他套接字(我的临时测试模块的会话处理是sshd服务堆栈中的最后一个)。我一直无法做到这一点(或者甚至想到连接客户端不会是描述符 3 处的 TCP 套接字的时候)。

这仅仅是因为我缺乏想象力还是必然如此?我倾向于后者,因为与客户沟通似乎是做任何其他有用的事情的先决条件。我不确定,所以我觉得我应该问问别人。描述符 3 是否始终是身份验证客户端(我的 .so 仅假设它是编号最小的 TCP 套接字,并且仅在没有 TTY 的情况下,但似乎3应该始终是连接客户端的描述符)。提取第一个 TCP 描述符会是建立远程客户端身份的“确定性”方式吗?还是没有规定的方式应该发挥作用,这就是我的系统配置方式或 SSH 选择与 PAM 交互的方式?

  1. 设置 rhost 值还是sshd来自其他地方?我已经尝试grep过 SSH 和 libpam 的源代码,但没有骰子。当调用 pam_set_item 时,我可以看到 libpam 在哪里处理主机值的设置,但实际上并没有调用 pam_set_item 来将其设置为这个或那个特定的主机。

任何数量的帮助都将不胜感激,我已经用谷歌搜索了,但我开始在我的指尖上刮擦桶底。

我有兴趣知道这一点的主要原因是,我最终不仅会得到“正确”的答案,而且主要是为了以后我不会有任何惊喜。我们可以在一些 Solaris 平台上执行此操作,但我的主要动机是基于实际不变的事物进行假设。

我还意识到我可以让客户端程序/模块将主机信息提供给库,但这可能涉及代码重写两到三次(因为 CLI 工具从 utmp 准备会话信息,从 pam_get_item 准备 PAM 模块)并可能使项目看起来比实际需要的更复杂。

0 投票
1 回答
179 浏览

fedora - eclipse中的Pam模块

我想创建一个 Pam 模块。我使用 Eclipse 作为我的 IDE,并在 C/C++ 中制作 pam 模块。

当我尝试包含所需的 2 个 pam 模块时

和构建,我得到一个错误说“没有这样的文件或目录”,我环顾我的系统,看看我是否能找到 pam_modules.h 和 pam_macros.h,但没有运气。也许我在寻找错误的地方,或者我没有安装它们。

它们应该存储在哪里,以及如何才能在我的程序中使用这两个头文件。我需要手动将它们导入 Eclipse 吗?

0 投票
1 回答
1095 浏览

macos - .so 模块的 osx、openpam 和位置?

我开发了一个 PAM 模块,可以在 osx 10.6 上的 openpam 下运行。我过去创建了“linux-pam”模块,我知道这些共享对象应该安装在哪里。对于 osx,它显然不在同一个地方。我花了一些时间在目标 osx 机器上“查找”,但找不到正确的目录。我为 openpam 看到的文档没有提供任何线索。

想法?

0 投票
1 回答
217 浏览

macos - 在 OSX 上构建的 PAM 模块中的共享与动态库

OSX新手在这里。我有一个在 RedHat 上运行良好的自定义 PAM 模块。我正在尝试将其移植到 OSX。我撞墙了。我知道 OSX 使用“OpenPam”而不是“LinuxPam”。我实际上可以使用 eclipse 构建我的模块 [尽管必须安装 Xcode 和 Xcode 命令行工具]。

当我安装模块并尝试使用它时,我在日志中收到一条通用消息,只是说 openpam_load_module 无法加载我的模块。在线挖掘后,我发现了一个很小的 ​​dlopen “测试”程序,它试图加载你扔给它的任何对象,如果它失败了,就会产生更好的错误。我的模块依赖于“pam”、“sqlite3”和“mysqlclient”库的存在。这个测试加载器抱怨

好吧,那个库确实存在。它位于 Eclipse 项目构建路径中。我已经尝试“硬编码”eclipse链接行中的完整路径。我也尝试过链接库的静态版本。没有喜悦。

如果我链接到 lib 的静态版本,那么我会得到注释:

其次是大量未定义的符号。我不知道从这里去哪里。想法?

0 投票
1 回答
513 浏览

linux - pam_cracklib 没有看到旧密码

我已经启用了 Linux PAM(1.1.4 版)和cracklib(2.8.22 版)并且大部分工作正常。通过 PAM 配置文件指定的所有密码复杂性都被遵守(大写/小写、数字等),但没有遵守“difok”。无论我将此选项设置为什么,pam_cracklib 都会让任何密码通过(只要它满足我指定的其他复杂性要求)。

长话短说,我不得不修改 Linux PAM cracklib 以添加一些调试,并很快发现 pam_cracklib 无法检索 OLD 密码。它认为该字符串为 NULL,因此自然没有什么可以与新密码进行比较。

然而,当用户更改自己的密码时,它正确地验证了当前(将成为旧密码)密码,因此 pam_unix 正确地看到了旧密码。当它到达 PAM 配置的 pam_cracklib 行时,密码似乎已经以某种方式被清除了。

我正在努力弄清楚这是如何/在哪里/为什么发生的。

以下是我的 PAM 配置文件中的相关密码行:


顺便说一句:这一切都是通过前端应用程序以编程方式完成的。这不是可以在这种环境中以交互方式完成的事情。

有人对此有任何想法吗?