Запишите строку в файл, к которому только root может получить доступ при выполнении файла php

Один из вариантов - использовать bash

arr=(a b c)
x=$(IFS=,;printf  "%s" "${arr[*]}")
echo "$x"
a,b,c

Альтернативно

arr=(a b c)
printf -v x "%s," "${arr[@]}"
x=${x%,}
echo "$x"
a,b,c

Во втором варианте вы можете установить разделитель на , (запятая, за которой следует пробел) вместо , только

printf -v x "%s, " "${arr[@]}"
x=${x%, }
echo "$x"
a, b, c
0
04.02.2019, 05:43
2 ответа

Это похоже на непонимание того, как работает sudo. Просто добавление чего-либо в файл sudoers не приведет к фактическому изменению разрешений для файлов, файл должен быть запущен как :sudo php /var/www/html/myprogram/writefile.php под «именем пользователя». также могут возникнуть проблемы с SELinux, поскольку запуск из файла из этого местоположения может быть запрещен в зависимости от его настройки.

0
28.01.2020, 04:02

После нескольких попыток, а также прочтения ряда статей по теме. Наконец-то я понимаю, что проблема в той аранжировке, которую я сделал. Надеюсь, это поможет другим пользователям, которые не знакомы с sudon visudo.

Проблемы:

1. Имя пользователя

Что касается username, пользователь, которого я добавил, имеет доступ к входу в систему через терминал. Хотя доступ к приложению осуществляется через веб-сайт. Таким образом, пользователь должен быть www-data, выглядит как:

www-data ALL=(root) NOPASSWD: /usr/bin/php /var/www/html/myprogram/writefile.php

2. Не использовать exec или оболочку _exec

Я забыл, что к writefile.phpнельзя напрямую обращаться через браузер. Необходимо пройти через другой файл (index.php), а затем в файле необходимо использовать shell_execили execдля выполнения writefile.phpс помощью команды sudo. Структура выглядит так:

index.php

<?php
exec("sudo /usr/bin/php /var/www/html/myprogram/writefile.php");
?>

writefile.php

<?php
echo file_put_contents("tes.txt","tes write file");
?>

Наконец-то открыл tes.txtи работает нормально! Спасибо за все.

1
28.01.2020, 04:02

Теги

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