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

时间:2017-06-09 09:46:42

标签: php .htaccess cpanel litespeed

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

所以我试图在受限制的访问站点上设置一个PHP脚本来执行类似于cPanel的操作,以便能够编辑实际的passwd文件。然而,我尝试过的一切都没有奏效。我们的Web服务器是LiteSpeed而不是apache(由于共享主机设置,无法更改此设置)。它在.htaccess文件引用的Web可访问文件夹之外的文件夹中使用passwd文件。查看列出的现有访问后,我可以看到它似乎没有使用apache文档中所述的salted MD5哈希:存储的哈希密码与我认为我应该期望的不同(例如salt大大超过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> $,而文件中的是$ apr1 $< 8-char-rand-string> $。在salt中添加“apr”会导致crypt失败:-(。

2 个答案:

答案 0 :(得分:0)

您可以在目录

中的.htaccess中添加拒绝/允许IP
  

命令拒绝,允许

     

拒绝所有

     

允许来自(你的ip)

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

  

AuthType Basic

     

AuthName"密码保护区"

     

AuthUserFile /path/to/.htpasswd

     

需要有效用户

类似于:http://www.htaccesstools.com/articles/password-protection/

答案 1 :(得分:0)

为了将来的参考,我的编辑#3占了解决方案的95%,我现在已经设法将其放置并运行。我最终意识到我只需要删除htpasswd以某种方式插入盐中进行算法选择的“apr”,然后使用前面带'$ 1 $'和'$'的盐。将其写入passwd文件以及用户名可以让我访问并工作。该页面包含对页面未来访问者的警告,以确保在需要时更新算法。

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

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

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