Используя sudoers для разрешения php команде выполнения

Обратные галочки '' в команде эха порождают процесс, и она производится, заменен в командную строку эха. Вы видите это с, например.

echo "`tput setaf 1`" | hexdump -C
00000000  1b 5b 33 31 6d 0a                       |.[31m.|

Это работает потому что содержание "..." расширены прежде чем быть переданным эху.

sed управляют, чтобы Вы использовали, переносит все в ' таким образом, это передается sed без расширения, и sed рассматривает все это как буквенный текст.

Можно зафиксировать это путем помещения "" вокруг команды sed

echo "foo" | sed -e "s/\(foo\)/`tput setaf 1`\1`tput op`/g"

У Вас также была ошибка в Вашей команде sed. ( и ) потребность, которой оставят \( и \) обозначить помнивший шаблон. У меня есть также никогда использование \0 Я всегда использовал \1 как первый помнивший шаблон.

3
26.01.2014, 03:06
3 ответа

Ваша sudoers строка корректна в этом, она только позволяет www-данным выполнять одну команду как корень. php синтаксис выглядит главным образом корректным (Вы проверяете $num, чтобы удостовериться, что это - число? разные символы могут нанести реальный ущерб здесь. см. http://us3.php.net/manual/en/function.escapeshellcmd.php), две вещи, которые Вы не упоминали, был, какие апачские mpm - Вы использование и являются Вами работающий php в безопасном режиме. shell_exec не работает в безопасном режиме, и он использует ветвление, которое не может работать со всем mpm's. Я рекомендовал бы использовать предварительное ветвление mpm.

2
27.01.2020, 21:23
  • 1
    , который Мой php 5.4.4, таким образом, я понимаю, что он не имеет безопасного режима и думания, что я использую предварительное ветвление... По крайней мере, это находится в моих загруженных модулях. –  Stoopkid 26.01.2014, 07:51
  • 2
    Почему предварительное ветвление предпочтено? Пока система поддерживает ориентированный на многопотоковое исполнение опрос затем, 'событием' является MPM по умолчанию. Что преимущества были бы, переключая, чтобы 'предварительно разветвиться' достигнуть? положительная сторона –  dotancohen 21.07.2014, 07:41
  • 3
    @dotancohen sudo cgi требует ветвления (если Вы не используете fcgi или подобные), который может повредить поточную обработку, которая повреждает несколько MPMs. Существуют специальные обходные решения, чтобы заставить mod_cgi работать с event_mpm, но я не знаю, были ли они портированы к mod_php. Это, как известно, работает с предварительным ветвлением. (и использование пропускной способности на большинстве sudo приложений не является проблемой) –  hildred 22.07.2014, 03:39

Да, я думаю, что это - действительно плохая идея добавить апачские пользовательские www-данные к списку sudoers, особенно потому что Вы включаете переменную $num в Вашем коде, который мог серьезно вредить Вашему серверу, если неправильно введено (особенно, если используется sudoer пользователем).

Я предложил бы вместо этого создать новую группу, добавить www-данные к той группе и присвоиться /home/xbian/433Utils/RPi_utils/codesend группе. Затем дайте полномочия codesend выполняться всеми членами той группы; Вас нельзя попросить никакого пароля, и Ваша система будет защищенной.

1
27.01.2020, 21:23
  • 1
    Это, кажется, не работает. Я сделал новую группу, добавленные www-данные к ней, измените группу файла к этому новому и установите полномочия файла так, чтобы они могли все выполнить ее... Эта codesend программа потребовала sudo из-за зависимой библиотеки, это, как предполагается, имеет дело с этим? –  Stoopkid 26.01.2014, 03:59
  • 2
    @edoardo849, Ваше решение менее безопасно, чем использование правильно, установка sudo. sudo может быть настроена, чтобы позволить пользователю только выполнять одну команду. –  hildred 26.01.2014, 05:49
  • 3
    Это не более безопасно, чем подход sudo. Оба случая позволяют любому процессу веб-сервера выполнять определенный сценарий. –  forcefsck 15.06.2014, 15:55

Разрешить пользователю www-data запускаться для запуска program1 и program2 без пароля:

sudo visudo

Добавьте к содержимому файла sudoers:

User_Alias WWW_USER = www-data
Cmnd_Alias WWW_COMMANDS = /sbin/program1, /sbin/program2
WWW_USER ALL = (ALL) NOPASSWD: WWW_COMMANDS

Save.

из https://askubuntu.com/questions/76920/call-a-shell-script-from-php-run-as-root

0
27.01.2020, 21:23

Теги

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