Моя компания имеет услугу веб-хостинга, в которой регистрируются люди. После знака обрабатывают, завершено, мы входим вручную и создаем тест / dev среда для того клиента для использования. Обычно процесс идет как это:
somerandomstring.devserver.com
Даже при том, что мы используем сценарии, чтобы сделать это, объем диктует, что вручную необходимость войти в систему и выполнить их теперь неудобна. Так, мы хотим автоматизировать этот процесс, который будет сразу инициирован после того, как клиент подписывается, процесс завершен.
Я думал о паре способов обработать это.
1) Дайте пользователю adduser
возможность и использование PHP exec()
функция для создания сказала пользователя. Я должен был бы дать ту возможность www-data
хотя, правильно? С PHP, работающим в безопасном режиме, команды для должностного лица () ограничиваются указанным каталогом. Так, если я должен был скопировать/usr/sbin/adduser в/my/custom/dir, где только, что команда доступна, каковы были бы непрекращающиеся проблемы безопасности? Я все еще в недоумении, хотя, как я обновил бы доступную сайтам папку с новым сайтом, так как они принадлежат корню.
2) Позвольте крону сделать это: человек должен зарегистрироваться в сервисе, так по умолчанию у них есть имя пользователя и другие клиентские данные, сохраненные в mysql. Из учетной записи, которая имеет adduser
возможности, имейте крон, запускает стандартный скрипт, который проверяет на новые учетные записи (возможно, каждые 30 - 60 секунд). Если найдено, создайте Linux, составляют их, заполняют корневые каталоги, пишут апачский conf virtualhost файл и перезагружают апача.
Опция 2 чувствует себя подобно самому безопасному пути в этом, изолированная администраторская учетная запись обрабатывает это без www-данных или веб-сайта, имеющего необходимость выполнить системные сценарии и программы. Проблемой является пакет. Предпочтительно, я хотел бы найти решение для опции 1 так, чтобы клиент был сразу подписан, и они перенаправляются к их installed-and-ready-to-use экземпляру сервера. Мне также не нравится это, я должен перезагрузить / перезапускают апача так.
Компании делают это каждый день, особенно хостинговые компании. Bluehost, например, после того как Вы завершили знак, обрабатывают, у Вас сразу есть доступ к/home/user/public_html, с которым можно взаимодействовать. Поскольку коммерческие решения существуют, я уверен, что длительное размышление было дано тому, как выполнить его надежно и безопасно. То, что я пытаюсь выполнить, идентично, только в намного меньшем масштабе.
Я думаю, что опасался бы чего-либо, что дает пользователю браузера способность автоматически сгенерировать пользователя UNIX. Если бы Вы сделали, то это, вероятно, должно включить обоих механизм организации очередей, а также журнал или база данных так, чтобы следующее не происходило:
Поэтому, что происходит, когда пользователь является переинициированием что-то, что это было или сделано или все еще происходит?
⚠
WARNING
⚠
Это - свойственная угроза безопасности и имеет большой потенциал для движения на юг в в любое время. Я высоко отговорил бы от этой установки, но о хорошо.
Я не ответственен ни за что, что происходит в результате Вас после чего-либо данного в этом сообщении, и при этом я не советую Вам следовать за этой системой. Это главным образом в образовательных целях / целях исследования.
Linux знали что-то как setuid
это позволяет любую данную программу (как sudo
) работать с полномочиями выше, чем текущий пользователь выполнения. Можно записать сценарий оболочки, чтобы сделать все, в чем Вы нуждаетесь.
Оттуда, потому что сценарии оболочки не могут быть setuid
, необходимо преобразовать это в двоичный файл. Можно использовать что-то как shc
для этого.
После того как у Вас есть свой псевдодвоичный файл оболочки (имя в качестве примера: bootstrap_user
) содержа все, в чем Вы нуждаетесь, можно сделать некоторые забавные изменения, чтобы подготовить его. А именно, это:
Установите принадлежавший root
, и группа www-data
.
chown root:www-data ./bootstrap_user
Присвойте перманент RWX для владельца (корень), читайте и выполнитесь для группы, ни одного для кого-либо еще:
chmod 750 ./bootstrap_user
Переместитесь двоичный файл к где-нибудь PHP может exec()
это.
Наконец, добавьте setuid
бит к нему, так, чтобы это было выполнено как корень:
chmod u+s ./bootstrap_user
В PHP можно теперь звонить bootstrap_user
как Ваш исполняемый файл, передавая любые обязательные параметры. Обязательно заботьтесь, чтобы выйти и санировать вход.