2016-03-02 3 views
0

Это система Ubuntu, и мне нужен PHP для выполнения программы с определенным именем пользователя, скажем, userA.PHP взаимодействует с Shell Script

Я использовал функцию php exec() для вызова sudo -Eu userA command_to_run_program, это не сработало из-за отсутствия некоторых функций безопасности или переменных среды на Ubuntu.

Так что я имею в виду, если этот альтернативный способ может быть достигнут:

С задним конца, есть скрипт оболочки с фиксированным подрядом Pid и ожидание сигналов. Если этот процесс получит определенный сигнал, он выполнит программу. Предположим, что я вручную начал этот сценарий оболочки с помощью userA. Поэтому я предполагаю, что когда он получает сигнал и выполняет программу, программа выполняется с помощью userA.

И на этом компьютере есть сервер Apache с PHP. Передний пользователь переходит на страницу PHP, а программа php отправляет сигнал сценарию запуска оболочки, пробуждает скрипт оболочки и, таким образом, программа выполняется пользователем.

Если это может быть достигнуто, то что лучше всего подходит для этого?

Спасибо за помощь!

+0

Лучшей практикой является, вероятно, решение переменных окружения или функций безопасности, а не создание сложного беспорядка сигналов и помощников! –

ответ

0

Другими словами, вам нужна эскалация привилегий из учетной записи пользователя на веб-сервере (конкретному?) Другому пользователю. Это имеет последствия для безопасности, но я предполагаю, что вы рассмотрели возможности.

Во всяком случае, следующие шаги должны работать:

  • Создать программу (хотя и просто скрипт), который запускает в соответствии код.
  • Поместите программу в место, где веб-сервер может получить к ней доступ.
  • Сделать целевого пользователя владельцем программы и установить бит SUID. Таким образом, выполнение этого приведет к его запуску под учетной записью пользователя.
  • Сделайте группу веб-серверов группой программы и разрешите ей (а не другим пользователям) запускать программу через исполняемый бит.

Просмотреть контактные данные chown и chmod для получения дополнительной информации.

+0

Спасибо за ваш ответ. Можете ли вы объяснить, почему: «Сделать целевого пользователя владельцем программы и установить бит SUID». «Таким образом, выполнение этого приведет к его запуску под учетной записью пользователя». ? –

+0

Проверьте https://duckduckgo.com/?q=file+owner+chown и https://duckduckgo.com/?q=suid+bit+chmod. –

+0

Например, поставьте «whoami» в сценарий оболочки. Он не всегда выводит владельца оболочки, вместо этого он печатает пользователя, выполнившего этот сценарий оболочки. –