需要模仿cPanel的用户访问/目录密码



我正在与公共网站并行开发一个限制访问控制网站。目前,所有用户访问和目录密码设置都在cPanel中执行,但是cPanel对于某些用户来说有点令人困惑。但是我们需要在限制访问的网站中修改可以访问它的授权人员列表(以及网站的其他部分)。

所以我正在尝试在受限访问站点上设置一个 PHP 脚本来执行类似于 cPanel 的操作,以便能够编辑实际的 passwd 文件。但是,我尝试过的所有方法都没有奏效。我们的网络服务器是LiteSpeed而不是apache(由于共享主机设置而无法更改)。它在 Web 可访问文件夹之外的文件夹中使用 passwd 文件,由 .htaccess 文件引用。查看列出的现有访问后,我可以看到它似乎没有使用 apache 文档中所述的加盐 MD5 哈希:存储的哈希密码与我认为我应该期望的不同(例如,盐明显超过 2 个字符),出于安全原因,我不愿意在我的代码中嵌入特定的密码哈希算法。我尝试使用通常通过 exec 或 shell_exec 随 apache 提供的 htpasswd 实用程序,但它要么未安装,要么无法访问(并且我已经尝试了几种不同的路径 - 甚至通过检查它的存在file_exists在所有情况下都返回 false,所以没有任何文件更改也就不足为奇了!

在过去的几天里,我花了几天时间对不同的文档集进行各种搜索,以查看 LiteSpeed 和/或 cPanel 的功能,但我的搜索大多是关于 cPanel 登录密码而不是用户访问控制密码。我尝试查看一些cPanel源代码,但没有找到任何东西。

如果有人更直接地引用某些源代码,或者文档中描述如何在 LiteSpeed 中运行密码添加/更新/删除功能的内容,那就太好了。即使只是某种更直接地触发cPanel功能的方法也会很有用(我知道它有一个API,但它的路径被锁定在我的主机上)。

编辑:在史蒂夫的评论之后,我去检查了几件事。我的脚本可以看到 passwd 文件,而不管脚本的目录位置如何。正如我所期望的那样,passwd 文件的权限为 644,我预计具有写入权限的"用户"是我用来登录 cPanel 的用户,希望这不是服务器运行的用户名......这带来了额外的困难。

编辑#2:我做了一个额外的测试,我创建了一个受密码保护的临时子目录,然后直接从PHP脚本中添加了一个用户(复制粘贴现有行之一,但更改了用户名)。这工作正常,添加了新用户,cPanel 甚至看到了更改。所以权限不是问题。

编辑#3:我已经做了一些游戏,并从crypt输出了一个字符串,该字符串主要与passwd文件中的内容匹配(我将在重置页面上添加警告消息以确保使用最新算法)。但是,crypt 正在寻找的盐是 $1$<8-char-rand-string>$,而文件中的内容是 $apr 1$<8-char-rand-string>$。在盐中添加"apr"会导致加密失败:-( .

您可以在目录中的 .htaccess 中添加拒绝/允许 IP,

订单拒绝,允许

拒绝所有人

允许来自(您的 IP)

或者为 .htaccess 中的特定目录添加一些密码保护规则。

身份验证类型基本

身份验证名称"密码保护区域">

AuthUserFile/path/to/.htpasswd

需要有效用户

像这样:http://www.htaccesstools.com/articles/password-protection/

为了将来参考,我的编辑 #3 是解决方案的 95%,我现在已经设法实施并工作。我最终意识到,我只需要将htpasswd以某种方式插入到盐中的"apr"放入算法选择中,只需在盐之前使用"$1$",在之后使用"$$"。将其与用户名一起写到 passwd 文件中给了我访问权限并工作。该页面包含对页面未来访问者的警告,以确保在需要时更新算法。

实际的加密代码是: crypt($password, '$1$' . substr(str_replace('+', '.', base64_encode(openssl_random_pseudo_bytes(12))), 0, 8) 。'$')

我希望我的代码在加密上足够安全。我见过太多的代码片段,其中盐是使用 mt_rand 或等效物生成的......(在这里插入颤抖)

编辑:回答这个问题后,我发现cPanel API PHP文件不会自动安装。这是您需要下载的额外内容,请参阅 https://github.com/CpanelInc/xmlapi-php。所以我现在正在玩这个,并且可能会清理我所做的代码......但是出于历史原因或希望它可以帮助其他人,将其留在此答案中。

最新更新