0

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

所以我试图在受限访问站点上设置一个 PHP 脚本来执行类似于 cPanel 的操作,以便能够编辑实际的 passwd 文件。但是我尝试过的一切都没有奏效。我们的网络服务器是 LiteSpeed 而不是 apache(由于共享主机设置,无法更改)。它使用 web 可访问文件夹之外的文件夹中的 passwd 文件,由 .htaccess 文件引用。查看列出的现有访问权限后,我可以看到它似乎没有使用 apache 文档中所述的加盐 MD5 散列:存储的散列密码与我认为我应该期望的不同(例如salt 明显超过 2 个字符),出于安全原因,我不愿意在我的代码中嵌入特定的密码哈希算法。我'

在过去的几天里,我一直在通过不同的文档集进行各种搜索,以查看 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>$。在盐中添加“apr”会导致 crypt 失败:-(。

4

2 回答 2

0

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

命令拒绝,允许

否认一切

允许来自(您的 IP)

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

AuthType 基本

AuthName "密码保护区"

AuthUserFile /path/to/.htpasswd

需要有效用户

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

于 2017-06-09T14:04:49.093 回答
0

为了将来参考,我的编辑#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。所以我现在正在玩这个,并且可能会清理我已经完成的代码......但是出于历史原因或希望它对其他人有所帮助而将其留在此答案中。

于 2017-06-10T09:08:37.753 回答