Назад | Перейти на главную страницу

Создание учетной записи Linux одновременно с созданием учетной записи MySQL DB

я попросил этот вопрос около шести месяцев назад, и я подумал, что могу получить здесь лучшие отзывы.

У меня есть веб-сайт, написанный почти исключительно на javascript (холст HTML), и база данных MySQL, управляемая через PHP. На стороне сервера скрипты, которые я выполняю, выполняются как пользователь www-data. Теперь предположим, что я хочу создать новую учетную запись Linux, а также добавить имя / пароль пользователя в базу данных. Как мне это автоматизировать?

Фактическая функциональность, которую я хотел бы, распространяется также на создание групп для пользователя, создание скелетного каталога для домашней папки и получение доступа для чтения / записи к их домашней папке и подпапкам. По сути, мне нужно выполнять определенные команды как root, но я, очевидно, не могу вводить их с клавиатуры.

У меня была одна идея - создать /home/www-data/.ssh/ папка с входом по SSH без ключа в root, но меня беспокоит, что это дает слишком много возможностей.


Безумный Шляпник указал, что это потенциальный дубликат этот вопрос поэтому я уточняю свой первоначальный вопрос.

На моем веб-сайте каждому пользователю разрешено создавать свои собственные сценарии и выполнять их. Создана сложная библиотека, которая может динамически загружать сценарии javascript, выполнять их, почти всегда перерисовывая элемент HTML Canvas. В дополнение к этому они могут создавать сценарии PHP.

Поскольку пользователь может создавать свои собственные сценарии PHP, я не могу просто передать root-доступ для создания новых пользователей к www-данным (путем редактирования /etc/sudoers файл). Я хочу способ выполнить приведенную ниже команду / скрипт PHP, когда пользователь регистрируется (поэтому подключается как пользователь www-data)

shell_exec("sudo useradd J.C.Denton");

Но избегайте ситуации, когда впоследствии пользователь пишет сценарий PHP, чтобы использовать указанный выше файл PHP для создания своих собственных пользователей.

Мой идеальный сценарий состоял бы в том, чтобы иметь возможность войти в систему пользователя не только как сеанс PHP и предоставить ему доступ только к элементам базы данных SQL, на которую он / она имеет права, но и фактически зарегистрировать его на сервере Apache, как в этом кейс, J.C.Denton

Вы не можете «фактически зарегистрировать его на сервере Apache как, в данном случае, J.C.Denton», потому что, если вы не реализуете соответствующие конструкции в своем приложении, функциональность не будет существовать. Хотя вы можете использовать HTTP-аутентификацию, это не обеспечивает всех остальных частей, необходимых для модели безопасности.

Здесь вы пытаетесь иметь дело с 3 разными моделями безопасности

  • безопасность пользователя unix для доступа к файловой системе
  • безопасность MySQL для доступа к данным
  • безопасность приложения в веб-приложении

Да, рационализация этих потенциально конфликтующих моделей должна быть в вашем списке приоритетов проектирования, но действительно ли вы должны основывать это на модели разрешений Unix? Есть инструменты для расширения это в область приложения с помощью PHP - но это не единственное решение.

Оставим это пока в стороне, в системе Unix / Linux / POSIX создание пользователей из командной строки прост - но есть некоторые предостережения. Точно так же вы можете создавать пользователей mysql с помощью SQL. Но учтите, что модуль pam_mysql, о котором я знаю делает не использовать функции аутентификации MySQL и управления пользователями, но просто предоставляет репозиторий для данных аутентификации.

Объединить все это в единую оболочку или php-скрипт - тривиально. Единственное предостережение заключается в том, что если вы хотите вызвать это из чего-то другого, кроме оболочки, принадлежащей root, вы все равно должны сделать ее доступной для чтения / выполнения только для root, но настройте sudo, чтобы разрешить ее запуск, например с веб-сервера.

Итак, чтобы ваша модель работала, вам нужно более подробно спланировать, как вы собираетесь структурировать разрешения Unix и использовать suPHP.

Вы думали об использовании чего-то вроде pam_mysql или pam_ldap и поместить информацию об учетной записи пользователя в базу данных? Таким образом вы можете разделить свои системные учетные записи (локальные /etc/passwd) из ваших учетных записей пользователей, повышая гибкость и безопасность. Управление вашими пользователями будет происходить через MySQL, root-доступ не требуется.

pam_mkhomedir затем создаст домашний каталог (и необходимые файлы скелета) при первом входе в систему.

Благодаря PAM большинство сервисов, которые я могу себе представить (доступ к оболочке, электронная почта, [s] ftp, www ...), могут использовать pam_mysql или pam_ldap прозрачно, ваши конечные пользователи ни в коем случае не заметят этого.