Разрешение, отклоненное при попытке записать файл из скрипта удара, запущенного от www-данных

У меня есть сценарий удара в/var/www/html/exe. Эта папка принадлежит www-data:www-data

Код PHP называет этот сценарий, работая как www-данные. Я тестирую его использование sudo -u www-data script.sh

мишень sudo: Я добираюсь, разрешение отрицало пытаться записать файл из сценария, например, как тест:

echo 10 | sudo tee tttt

Это запрашивает www-данные sudo пароль. Это не будет работать.

Временный файл: Я также пытался писать временный файл в/home/ubuntu папку, также отклоненное разрешение

Nopasswd: Я мог также, по-видимому, добавить www-данные для требования никакого пароля в sudoers файле. Это плохо, потому что это требует дополнительной пользовательской установки. Развертывание автоматизировано, и это увеличивает сложность кода развертывания.

Shell: Я попробовал различные комбинации выполнения в другой оболочке, например. $ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE" Они привели к запросу www-данных sudo пароль, не может работать.

Sudo: Я не думаю, что должен иметь к (и при этом я не хочу к), выполняет оболочку как sudo. Кроме того, это - сервис и потребовало бы, чтобы изменение кодировало, я не владею.

Ручное вмешательство: Многие ответы, которые я нашел, предлагают, чтобы вещи как "вошли в систему как корень". Нет никакого человека вокруг, чтобы сделать это: код автоматически создается и развертывается в несколько сред.

Обходное решение Hacky: Запишите cpp exe, который пишет файл и называет его из сценария. Я могу записать файлам этот путь без проблемы. Но это чувствует себя ужасным и добавляет сложность для создавания/развертывания.

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

0
задан 26 August 2016 в 18:31

1 ответ

Если сценарий, работающий как пользователь www-data выполняет команду echo 10 | sudo tee tttt, затем это - пользователь www-data запрос полномочий пользователя root через sudo, что-то, вероятно, не позволяется сделать.

Так как сам сценарий работает как www-data и Вы хотите записать в каталог, принадлежавший тому пользователю, нет никакой потребности в sudo: операция записи (команда tee) будет выполнен с полномочиями пользователя www-data также. Таким образом, то, что Вы хотите, echo 10 | tee tttt, или просто echo 10 > tttt.

Как в стороне, рассмотреть использование printf вместо echo распечатать строки.

1
ответ дан 28 September 2019 в 15:55

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

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