需要模仿cPanel的用户access/directory密码
Need to mimic cPanel's user access/directory password
我正在与 public 并行开发一个访问受限的控制网站。目前,所有用户访问权限和目录密码设置都在 cPanel 中执行,但是 cPanel 对某些用户来说有点混乱。但是我们需要在限制访问的网站中修改可以访问它的授权人员列表(以及网站的其他部分)。
所以我试图在受限访问站点上设置一个 PHP 脚本来执行类似于 cPanel 的操作,以便能够编辑实际的 passwd 文件。然而,我尝试过的一切都没有奏效。我们的网络服务器是 LiteSpeed 而不是 apache(由于共享主机设置无法更改)。它使用 .htaccess 文件引用的可通过 Web 访问的文件夹之外的文件夹中的 passwd 文件。查看列出的现有访问权限后,我可以看到它似乎没有使用 apache 文档中所述的加盐 MD5 哈希:存储的哈希密码与我认为我应该期望的不同(例如salt 明显超过 2 个字符),出于安全原因,我不愿意在我的代码中嵌入特定的密码哈希算法。我尝试使用通常通过 exec 或 shell_exec 与 apache 一起提供的 htpasswd 实用程序,但它要么没有安装,要么无法访问(我尝试了几种不同的路径 - 通过 [=30= 检查它是否存在) ] 在所有情况下都返回 false,因此 none 的文件已更改也就不足为奇了!)。
过去几天,我通过不同的文档集进行了各种搜索,以了解 LiteSpeed and/or cPanel 的功能,但我的搜索大多是关于 cPanel 登录密码,而不是用户访问控制密码.我尝试查看一些 cPanel 源代码,但没有找到任何东西。
如果有人能更直接地参考一些源代码,或者文档中描述如何 运行 LiteSpeed 中的密码 add/update/delete 功能的内容,那就太好了。即使只是一些更直接地触发 cPanel 功能的方法也会有用(我知道它有一个 API 但它的路径在我的主机上被锁定了)。
编辑:史蒂夫发表评论后,我去检查了几件事。无论脚本的目录位置如何,我的脚本都可以看到 passwd 文件。 passwd 文件具有我所期望的权限 644,我预计具有写权限的 "user" 是我用来登录 cPanel 的文件,希望它不是服务器的用户名 运行ning under... 这带来了额外的困难。
编辑 #2:我做了一个额外的测试,我创建了一个临时密码保护的子目录,然后直接从 PHP 脚本添加了一个用户(复制粘贴现有行之一,但更改了用户名)。效果很好,添加了新用户,cPanel 甚至看到了变化。所以权限不是问题。
编辑#3:我做了一些尝试并从 crypt 输出了一个字符串,该字符串大部分与密码文件中的内容匹配(我将在重置页面上添加一条警告消息以确保最新算法用来)。然而,crypt 寻找的盐是 $1$<8-char-rand-string>$ 而文件中的是 $apr1$<8-char-rand-string>$。在盐中添加 "apr" 会导致 crypt 失败:-( .
您可以在目录的.htaccess中添加deny/allow个IP,
order deny,allow
deny from all
allow from (your-ip)
或者为.htaccess中的特定目录添加一些密码保护规则。
AuthType Basic
AuthName "Password Protected Area"
AuthUserFile /path/to/.htpasswd
Require valid-user
类似于: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。所以我现在正在研究它,并且可能会擦除我完成的代码......但是出于历史原因或希望它能帮助其他人,将它留在这个答案中。
我正在与 public 并行开发一个访问受限的控制网站。目前,所有用户访问权限和目录密码设置都在 cPanel 中执行,但是 cPanel 对某些用户来说有点混乱。但是我们需要在限制访问的网站中修改可以访问它的授权人员列表(以及网站的其他部分)。
所以我试图在受限访问站点上设置一个 PHP 脚本来执行类似于 cPanel 的操作,以便能够编辑实际的 passwd 文件。然而,我尝试过的一切都没有奏效。我们的网络服务器是 LiteSpeed 而不是 apache(由于共享主机设置无法更改)。它使用 .htaccess 文件引用的可通过 Web 访问的文件夹之外的文件夹中的 passwd 文件。查看列出的现有访问权限后,我可以看到它似乎没有使用 apache 文档中所述的加盐 MD5 哈希:存储的哈希密码与我认为我应该期望的不同(例如salt 明显超过 2 个字符),出于安全原因,我不愿意在我的代码中嵌入特定的密码哈希算法。我尝试使用通常通过 exec 或 shell_exec 与 apache 一起提供的 htpasswd 实用程序,但它要么没有安装,要么无法访问(我尝试了几种不同的路径 - 通过 [=30= 检查它是否存在) ] 在所有情况下都返回 false,因此 none 的文件已更改也就不足为奇了!)。
过去几天,我通过不同的文档集进行了各种搜索,以了解 LiteSpeed and/or cPanel 的功能,但我的搜索大多是关于 cPanel 登录密码,而不是用户访问控制密码.我尝试查看一些 cPanel 源代码,但没有找到任何东西。
如果有人能更直接地参考一些源代码,或者文档中描述如何 运行 LiteSpeed 中的密码 add/update/delete 功能的内容,那就太好了。即使只是一些更直接地触发 cPanel 功能的方法也会有用(我知道它有一个 API 但它的路径在我的主机上被锁定了)。
编辑:史蒂夫发表评论后,我去检查了几件事。无论脚本的目录位置如何,我的脚本都可以看到 passwd 文件。 passwd 文件具有我所期望的权限 644,我预计具有写权限的 "user" 是我用来登录 cPanel 的文件,希望它不是服务器的用户名 运行ning under... 这带来了额外的困难。
编辑 #2:我做了一个额外的测试,我创建了一个临时密码保护的子目录,然后直接从 PHP 脚本添加了一个用户(复制粘贴现有行之一,但更改了用户名)。效果很好,添加了新用户,cPanel 甚至看到了变化。所以权限不是问题。
编辑#3:我做了一些尝试并从 crypt 输出了一个字符串,该字符串大部分与密码文件中的内容匹配(我将在重置页面上添加一条警告消息以确保最新算法用来)。然而,crypt 寻找的盐是 $1$<8-char-rand-string>$ 而文件中的是 $apr1$<8-char-rand-string>$。在盐中添加 "apr" 会导致 crypt 失败:-( .
您可以在目录的.htaccess中添加deny/allow个IP,
order deny,allow
deny from all
allow from (your-ip)
或者为.htaccess中的特定目录添加一些密码保护规则。
AuthType Basic
AuthName "Password Protected Area"
AuthUserFile /path/to/.htpasswd
Require valid-user
类似于: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。所以我现在正在研究它,并且可能会擦除我完成的代码......但是出于历史原因或希望它能帮助其他人,将它留在这个答案中。