Я работаю над проектом виртуальной машины, где я использую два сервера, назовем их сервером A и сервером B, оба с установленной Ubuntu 14.04 LTS.
На сервере A работает веб-сервер Apache2 с веб-сайтом, на котором пользователи могут заказать виртуальные частные серверы. Как только процесс заказа пользователя завершен, пользователь нажимает кнопку, которая создает следующую команду с помощью функции PHP exec ().
ssh -p 22 john@serverB.com fallocate -l 2048M /home/john/images/guest.img 2>&1
Это должно создать образ на сервере B, где в конечном итоге создается виртуальный частный сервер пользователя. Выполнение предыдущей команды с пользователем john прекрасно работает, но поскольку команда запускается через PHP, www-data является пользователем, выполняющим ее.
Как и ожидалось, я получаю следующие ошибки:
array(3) {
[0]=>
string(36) "Permission denied, please try again."
[1]=>
string(36) "Permission denied, please try again."
[2]=>
string(39) "Permission denied (publickey,password)."
}
Я знаю о рисках безопасности, связанных с предоставлением этому пользователю прав sudo для того, чтобы стать другим пользователем и выполнить команду как «john». Поэтому мой вопрос для этого: есть ли другой способ выполнить эту операцию без изменения разрешений www-данных? Я считаю, что SSH - это единственный способ создать что-то на удаленном сервере, или я ошибаюсь?
Я не собираюсь запускать сайт на сервере B, чтобы создавать эти изображения локально, это не то, что я хочу.
Стоит ли пытаться ответить на этот сценарий этого пользователя? https://superuser.com/a/547577/514523
источник
Ответы:
Вы должны сделать владельца www-данных / home / john / images, или добавить его в группу john, предоставляя ему надлежащие права на запись, или изменить эту папку на 777.
Попробуй это:
Затем вы даете кому-либо права на эту папку, в том числе www-data.
Это может быть слишком много, поэтому, если это работает, вы можете ограничить права. Вы можете добавить www-данные в группу john:
Сначала вы видите, к каким группам относятся www-data и john. Затем вы добавляете www-данные в john-group.
Теперь вы должны ограничить права на эту папку:
Теперь пользователь 'john' и все члены группы 'john' имеют права на запись.
источник