Я работаю над веб-сайтом с ограниченным доступом параллельно с публичным. На данный момент все настройки доступа пользователя и пароля к каталогу выполняются в cPanel, однако cPanel немного запутывает некоторых пользователей. Но нам нужно на сайте с ограниченным доступом изменить список авторизованных людей, которые могут получить к нему доступ (и некоторые другие части сайта).
Поэтому я пытаюсь настроить PHP-скрипт на сайте с ограниченным доступом, чтобы сделать что-то похожее на cPanel, чтобы иметь возможность редактировать фактические файлы passwd. Однако все, что я пробовал, не сработало. Наш веб-сервер LiteSpeed не Apache (не может изменить это из-за настройки общего хоста). Он использует файлы passwd в папке вне папки, доступной через Интернет, на которую ссылаются файлы .htaccess. Посмотрев на существующие списки доступа, я вижу, что он не использует соленый хеш MD5, указанный в документации apache: хешированный пароль, который хранится, отличается от того, что, я думаю, следует ожидать (например, Соль значительно больше, чем 2 символа), и из соображений безопасности я неохотно встраиваю определенный алгоритм хеширования паролей в мой код. Я пытался использовать утилиту htpasswd, обычно поставляемую с apache через exec или shell_exec, но она либо не установлена, либо недоступна (и я пробовал несколько разных путей — проверка даже на наличие файла с помощью file_exists возвращала false во всех случаях, поэтому Не удивительно, что ни один из файлов не изменился!).
Последние пару дней я проводил различные поиски по разным наборам документации, чтобы увидеть, что делают LiteSpeed и / или cPanel, но в основном мои поиски связаны с паролями входа в систему cPanel, а не с паролями контроля доступа пользователя. Я попытался заглянуть в некоторый исходный код cPanel, но безуспешно нашел что-то.
Если у кого-то есть более прямая ссылка на какой-либо исходный код или что-то в документации, описывающей, как запустить функцию добавления / обновления / удаления пароля в LiteSpeed, это было бы замечательно. Даже какой-то простой способ активировать функциональность cPanel был бы полезен (я знаю, что у него есть API, но путь к нему заблокирован на моем хосте).
Изменить: После комментария Стива я пошел, чтобы проверить пару вещей. Мои сценарии могут видеть файлы passwd независимо от расположения каталога в сценарии. Файл passwd имеет разрешения 644, как и следовало ожидать, я ожидаю, что «пользователь», у которого есть разрешения на запись, — это тот, кого я использую для входа в cPanel, который, как мы надеемся, не является именем пользователя, под которым работает сервер. … что представляет дополнительные трудности.
Редактирование # 2: я провел дополнительный тест, в котором я создал временный защищенный паролем подкаталог, а затем добавил пользователя непосредственно из сценария PHP (скопируйте и вставьте одну из существующих строк, но изменили имя пользователя). Это сработало, новый пользователь был добавлен, и cPanel даже увидел изменения. Так что разрешения не проблема.
Редактирование # 3: я немного поиграл и получил строку, выводимую из крипты, которая в основном соответствует тому, что находится в файле passwd (я добавлю предупреждающее сообщение на странице сброса, чтобы убедиться, что используется последний алгоритм). Тем не менее, соль, которую ищет крипта, составляет $ 1 $<8-char-rand-string> $, тогда как в файле находится $ apr1 $<8-углеродно ранд-строка> $. Добавление «апр» в соль приводит к сбою крипты :-(.
Вы можете добавить запретить / разрешить IP-адреса в .htaccess в каталоге,
приказ отказать, разрешить
отрицать все
разрешить от (ваш-ip)
или добавьте некоторое правило защиты паролем для определенного каталога в .htaccess.
AuthType Basic
AuthName «Защищенная паролем область»
AuthUserFile /path/to/.htpasswd
Требуется действительный пользователь
что-то вроде: http://www.htaccesstools.com/articles/password-protection/
Для дальнейшего использования, моя редакция № 3 была на 95% пути к решению, которое я теперь смог установить и работает. В конце концов я понял, что мне просто нужно сбросить «apr», который htpasswd каким-то образом вставляет в соль для выбора алгоритма, и просто использовать соль с «$ 1 $» до и «$» после. Запись этого в файл passwd вместе с именем пользователя дала мне доступ и работала. Страница содержит предупреждение для будущих посетителей страницы, чтобы гарантировать, что алгоритм обновляется, когда это необходимо.
Фактический код шифрования: crypt ($ password, ‘$ 1 $’. Substr (str_replace (‘+’, ‘.’, Base64_encode (openssl_random_pseudo_bytes (12))), 0, 8). ‘$’)
Я надеюсь, что мой код достаточно криптографически безопасен. Я видел слишком много фрагментов кода, где соль генерируется с использованием mt_rand или эквивалентного … (вставьте дрожь здесь)
Изменить: Ответив на это, я обнаружил, что PHP-файл API cPanel не устанавливается автоматически. Это дополнительный вам нужно скачать, смотрите https://github.com/CpanelInc/xmlapi-php. Так что теперь я поиграюсь с этим и, вероятно, отсканирую код, который я сделал … но оставлю его здесь в этом ответе по историческим причинам или в надежде, что это поможет кому-то еще.