www-данные в sudo с монтированием - PullRequest
0 голосов
/ 19 мая 2019

Невозможно запустить команду монтирования через php и exec

Конечно: файл sudo toto.sh работает, и www-данные разрешены в sudoers для ALL, поэтому все процессы www-data ALL = (ALL)NOPASSWD: ALL

toto.sh:

Machine = "L1069"
machine="L1069"
mount -t cifs //$ipaddr/c$ /mnt/pc-backup/$machine -o   "vers=2.0,username=agent-back-ws,password=Bcth2,ro,iocharset=utf8
,noserverino"

В файле go.php:

$outputShell=passthru('sudo cat /etc/passwd');
$output=exec('sudo  /var/www/html/toto.sh 2>&1');
var_dump ($output);
var_dump ($outputShell);

Когда я запускаю php go.php (как root) Iget:

<pre> </ pre> string (0) ""

и монтирование завершено, и отображается содержимое / etc / passwd


С другой стороны, через браузер я запускаю www / go.php, поэтому вwww-data: я получаю:

string (0) ""

без монтирования и отображается содержимое / etc / passwd

Почему не работает монтирование - это проблема, кажется, что скрипт с php7 и последнимиВерсия Debian ...

1 Ответ

0 голосов
/ 19 мая 2019

Когда вы запускаете скрипт из своего «корневого контекста», вам не нужно использовать полные пути к исполняемым файлам, которые вы используете.

Вы должны использовать полный путь к двоичному файлу в ваших скриптах.

Machine = "L1069"
machine="L1069"
/bin/mount -t cifs //$ipaddr/c$ /mnt/pc-backup/$machine -o   "vers=2.0,username=agent- 
back-ws,password=Bcth2,ro,iocharset=utf8
,noserverino"

и

$outputShell=passthru('sudo /bin/cat /etc/passwd');
$output=exec('sudo  /var/www/html/toto.sh 2>&1');
var_dump ($output);
var_dump ($outputShell);

Чтобы определить правильный путь, используйте whereis mount и whereis cat

...