问题标签 [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.
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 来获取它,有什么办法吗?
在此先感谢您的帮助,
ssh - 可能的 SSH PAM PTY 分配问题
我有一个托管在 Amazon EC2 上的 linux ubuntu 服务器。在系统上创建了大约 3000 多个 linux 用户,用户 ID 为 user_1、user_2 等。
令人惊讶的是,直到 user_2685 的用户都能够通过 ssh 登录到服务器。不止于此。
我已将 /etc/ssh/sshd_config 中的 LogLevel 更改为 DEBUG3。粘贴相关内容。
- 用户无法登录时的相关转储 - http://pastebin.com/NS2jC8vg
- 用户成功登录时的相关转储 - 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 会登录用户。但它会停止登录后并且没有出现提示。可能那是因为一开始没有要求提示。
php - PHP pam_auth() 最佳管理指南
好的,所以我正在为新站点开发一个小的临时欢迎登录页面。如果愿意,公众访问者可以选择提交他们的电子邮件地址。但我还想为开发人员添加一个用户/密码登录,以便在当前开发阶段查看完整的站点。开发人员在本地 LAMP 系统上各有一个用户/通行证。
现在,我想确定一个开发人员,而不是在适当的网站用户系统之上创建两个单独的用户系统,以便快速检查该用户是否可以使用本地系统登录。if(pam_auth($_POST["u"], $_POST["p"])) 正是这样做的。简单,不错。
但后来我发现你需要允许 apache 用户访问 */security/pam_passwd 文件(或者稍微好一点:pam_tally*)。这样做会造成安全漏洞。
我想知道其他开发人员从 PHP(+apache) 验证用户并通过本地 LAMP 安全系统进行了哪些操作?这是唯一的方法,还是有其他选择?有更好的建议吗?
最好的答案不一定是代码,而更多的是库名称的建议或指向其他解决方案描述的链接。
c++ - 在 PAM 模块之间传递密码
我为 Ubuntu 创建了一个新的 PAM 模块。
我的代码:
我配置了/etc/pam.d/commom-auth:
sudo 命令执行结果:
并且保存在/tmp/pass.txt 中的用户名和密码是正确的。
为什么 pam_unix 不接受我的模块传递的密码?
谢谢。
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
在日志中。如果有人对从这里去哪里有任何指示,我将不胜感激。
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 应该如何工作的高级问题:
是否有一些管理 PAM 操作的官方标准?例如,它是否被某个地方的 POSIX 标准所覆盖?我知道有多个 PAM 实现(到目前为止我发现了四个或五个),但我不知道现有的共同点是法律上的还是事实上的,或者只是我碰巧如何配置我的系统。
在我
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 交互的方式?
- 是设置 rhost 值还是
sshd
来自其他地方?我已经尝试grep
过 SSH 和 libpam 的源代码,但没有骰子。当调用 pam_set_item 时,我可以看到 libpam 在哪里处理主机值的设置,但实际上并没有调用 pam_set_item 来将其设置为这个或那个特定的主机。
任何数量的帮助都将不胜感激,我已经用谷歌搜索了,但我开始在我的指尖上刮擦桶底。
我有兴趣知道这一点的主要原因是,我最终不仅会得到“正确”的答案,而且主要是为了以后我不会有任何惊喜。我们可以在一些 Solaris 平台上执行此操作,但我的主要动机是基于实际不变的事物进行假设。
我还意识到我可以让客户端程序/模块将主机信息提供给库,但这可能涉及代码重写两到三次(因为 CLI 工具从 utmp 准备会话信息,从 pam_get_item 准备 PAM 模块)并可能使项目看起来比实际需要的更复杂。
fedora - eclipse中的Pam模块
我想创建一个 Pam 模块。我使用 Eclipse 作为我的 IDE,并在 C/C++ 中制作 pam 模块。
当我尝试包含所需的 2 个 pam 模块时
和构建,我得到一个错误说“没有这样的文件或目录”,我环顾我的系统,看看我是否能找到 pam_modules.h 和 pam_macros.h,但没有运气。也许我在寻找错误的地方,或者我没有安装它们。
它们应该存储在哪里,以及如何才能在我的程序中使用这两个头文件。我需要手动将它们导入 Eclipse 吗?
macos - .so 模块的 osx、openpam 和位置?
我开发了一个 PAM 模块,可以在 osx 10.6 上的 openpam 下运行。我过去创建了“linux-pam”模块,我知道这些共享对象应该安装在哪里。对于 osx,它显然不在同一个地方。我花了一些时间在目标 osx 机器上“查找”,但找不到正确的目录。我为 openpam 看到的文档没有提供任何线索。
想法?
macos - 在 OSX 上构建的 PAM 模块中的共享与动态库
OSX新手在这里。我有一个在 RedHat 上运行良好的自定义 PAM 模块。我正在尝试将其移植到 OSX。我撞墙了。我知道 OSX 使用“OpenPam”而不是“LinuxPam”。我实际上可以使用 eclipse 构建我的模块 [尽管必须安装 Xcode 和 Xcode 命令行工具]。
当我安装模块并尝试使用它时,我在日志中收到一条通用消息,只是说 openpam_load_module 无法加载我的模块。在线挖掘后,我发现了一个很小的 dlopen “测试”程序,它试图加载你扔给它的任何对象,如果它失败了,就会产生更好的错误。我的模块依赖于“pam”、“sqlite3”和“mysqlclient”库的存在。这个测试加载器抱怨
好吧,那个库确实存在。它位于 Eclipse 项目构建路径中。我已经尝试“硬编码”eclipse链接行中的完整路径。我也尝试过链接库的静态版本。没有喜悦。
如果我链接到 lib 的静态版本,那么我会得到注释:
其次是大量未定义的符号。我不知道从这里去哪里。想法?
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 配置文件中的相关密码行:
顺便说一句:这一切都是通过前端应用程序以编程方式完成的。这不是可以在这种环境中以交互方式完成的事情。
有人对此有任何想法吗?