То, как я могу безопасно позволить php, основывало веб-сайт, чтобы создать пользователя Linux и взаимодействовать со средой?

Моя компания имеет услугу веб-хостинга, в которой регистрируются люди. После знака обрабатывают, завершено, мы входим вручную и создаем тест / dev среда для того клиента для использования. Обычно процесс идет как это:

  1. создайте пользователя Linux, переключитесь на того пользователя
  2. запустите скрипты для установки шаблонного набора файлов и каталогов в их корневой каталог
  3. создайте Apache .conf файл
  4. апач перезапуска
  5. Пошлите электронное письмо, чтобы позволить им знать, что сервер является установкой и готовый к доступу
  6. Наконец, клиент может получить доступ к их сайту как 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, с которым можно взаимодействовать. Поскольку коммерческие решения существуют, я уверен, что длительное размышление было дано тому, как выполнить его надежно и безопасно. То, что я пытаюсь выполнить, идентично, только в намного меньшем масштабе.

5
задан 20 January 2017 в 12:01

2 ответа

Я думаю, что опасался бы чего-либо, что дает пользователю браузера способность автоматически сгенерировать пользователя UNIX. Если бы Вы сделали, то это, вероятно, должно включить обоих механизм организации очередей, а также журнал или база данных так, чтобы следующее не происходило:

  1. Пользователь нажимает кнопку, чтобы заставить его произойти
  2. , Ваш процесс начинается
  3. , пользователь нажимает F5 или нажимает кнопку
  4. перезагрузки пользователь более поздние нажатия кнопка Backspace для резервного копирования страницы в их истории
  5. , пользователь создает закладку на этой странице и много раз пересматривает ее

Поэтому, что происходит, когда пользователь является переинициированием что-то, что это было или сделано или все еще происходит?

1
ответ дан 23 November 2019 в 10:26

WARNING


Это - свойственная угроза безопасности и имеет большой потенциал для движения на юг в в любое время. Я высоко отговорил бы от этой установки, но о хорошо.

Я не ответственен ни за что, что происходит в результате Вас после чего-либо данного в этом сообщении, и при этом я не советую Вам следовать за этой системой. Это главным образом в образовательных целях / целях исследования.

Linux знали что-то как setuid это позволяет любую данную программу (как sudo) работать с полномочиями выше, чем текущий пользователь выполнения. Можно записать сценарий оболочки, чтобы сделать все, в чем Вы нуждаетесь.

Оттуда, потому что сценарии оболочки не могут быть setuid, необходимо преобразовать это в двоичный файл. Можно использовать что-то как shc для этого.

После того как у Вас есть свой псевдодвоичный файл оболочки (имя в качестве примера: bootstrap_user) содержа все, в чем Вы нуждаетесь, можно сделать некоторые забавные изменения, чтобы подготовить его. А именно, это:

  1. Установите принадлежавший root, и группа www-data.

    chown root:www-data ./bootstrap_user
    
  2. Присвойте перманент RWX для владельца (корень), читайте и выполнитесь для группы, ни одного для кого-либо еще:

    chmod 750 ./bootstrap_user
    
  3. Переместитесь двоичный файл к где-нибудь PHP может exec() это.

  4. Наконец, добавьте setuid бит к нему, так, чтобы это было выполнено как корень:

    chmod u+s ./bootstrap_user
    

В PHP можно теперь звонить bootstrap_user как Ваш исполняемый файл, передавая любые обязательные параметры. Обязательно заботьтесь, чтобы выйти и санировать вход.

2
ответ дан 23 November 2019 в 10:26

Другие вопросы по тегам:

Похожие вопросы: