Двоичный файл не выполняется для веб-пользователя - PullRequest
0 голосов
/ 28 октября 2018

У меня есть сценарий php, который создает файл сценария оболочки, который в конечном итоге выполняется как пользователь www-данных, все команды выполняются, кроме последней, которая подразумевает двоичный файл. Если я запускаю команду как root, она запускается нормально ...

Это последняя часть скрипта:

&& echo "Tokenizing the file........" >> Logs/table_of_contents.php \
&& perl ../common/Scripts/xmltokenize.pl --filename=xmlfiles/table_of_contents.xml >> Logs/table_of_contents.php \
&& perl ../common/Scripts/xmlrenumber.pl --filename=xmlfiles/table_of_contents.xml >> Logs/table_of_contents.php \
&& echo "Tagging the file........" >> Logs/table_of_contents.php \

# I have added this line to check if it helps but id doesn't
&& export HOME="/tmp/" \

# And this is the command that calls the binary file
&& perl tagfile.pl xmlfiles/table_of_contents.xml \

Здесь у вас есть содержимое tagfile.pl

use File::Find;
$\ = "\n";

$fn = shift;

if ( $fn =~ /([^\/\.]+)\.xml/ ) { $fileid = $1; } else { exit;};
print $fileid;

$cmd = "perl tagfl2/makevrt.pl 'xmlfiles/$fileid.xml' > 'tagtmp/$fileid.vrt'";
print $cmd;
print `$cmd`;

#ALL OF THE PREVIOUS WORKS
#THIS IS THE ONE THAT GIVES PERMISSION ERRORS 
# OF COURSE: "www-data:www-data tagtmp/" and "www-data:www-data $fileid.vrt = table_of_contents.vrt"
$cmd = "cut -f 1 tagtmp/'$fileid.vrt' | tagfl2/treetagger/bin/tree-tagger -no-unknown -token -lemma tagfl2/treetagger/lib/english.par  > 'tagtmp/$fileid.tagged'";
print $cmd;
`$cmd`;
$cmd = "perl tagfl2/mrg.pl 'tagtmp/$fileid.vrt' 'tagtmp/$fileid.tagged' > 'tagtmp/$fileid.mrg'";
print $cmd;
`$cmd`;
$cmd = "perl tagfl2/tagxml.pl 'tagtmp/$fileid.mrg' 'xmlfiles/$fileid.xml'";
print $cmd;
`$cmd`;

Вот ошибка:

sh: 1: tagfl2/treetagger/bin/tree-tagger: Permission denied

Также на всякий случай:

chown -R www-data:www-data tagfl2/
chmod -R g+rwx tagfl2/

Ответы [ 3 ]

0 голосов
/ 28 октября 2018

Почему вы обновили владение пользователя ?Смена владельца группы должно быть достаточной:

chgrp -R www-data tagfl2/
chmod -R g+rwX tagfl2/

И поменяйте нижний регистр x на больший, чтобы дать разрешение на доступ / выполнение, только если это уже относится квладелец пользователя (нет необходимости указывать иное).

Затем вы можете проверить разрешение следующим образом:

su -m -c 'ls -R tagfl2/' www-data

и посмотреть, воспроизводите ли вы проблему с доступом;и затем обновите разрешение соответственно.

0 голосов
/ 07 ноября 2018

Хорошо, все решено, одна вещь дала файловой системе, фактически смонтированному модулю, указание exec.

Вторая вещь перемещала каталог treetagger в /usr/local/

Затем на /usr/local/bin/ я создал программную ссылку следующим образом:

ln -s ../treetagger/bin/tree-tagger

Делаем двоичный файл глобально исполняемым.На самом деле, этот последний шаг был окончательным решением.

Затем в сценарии tagfile.pl perl, в строке, содержащей команду tree-tagger , я изменил еетаким образом:

cut -f 1 'tagtmp/$fileid.vrt' | /usr/local/bin/tree-tagger -no-unknown -token -lemma tagfl2/treetagger/lib/english.par  > 'tagtmp/$fileid.tagged'
0 голосов
/ 28 октября 2018

Попробуйте определить полный путь к скрипту

$cmd = "perl /[full_path]/makevrt.pl 'xmlfiles/$fileid.xml' > 'tagtmp/$fileid.vrt'";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...