На сервере установлен антивирус для сканирования файлов (Антивирус Касперского 8.0 для Linux File Servers). Когда пользователь сайта загружает файл на сервер, надо проверить файл на наличие вируса. С консоли все работает, например:
sudo-s / opt/kaspersky/kav4fs/bin/kav4fs-control - scan-file / var/www/file.exe
Могу ли я запускать команду без sudo? Мне нужно методом php вызвать эту команду.
Я добавил в /etc /sudoers:
username ALL = NOPASSWD: / opt/kaspersky/kav4fs/bin/kav4fs-control
но это не помогло. Могу ли я запустить команду например методом eхес() или другим методом php?
Сам метод exec работает, так как echo(exec('whoami')); выводит - ngnix. То есть команда запускается от юзера ngnix
/etc /sudoers:
nginx ALL=(ALL) ALL
nginx ALL=NOPASSWD: /opt/kaspersky/kav4fs/bin/kav4fs-control
Вроде все права на исполение команды дал, но запустить так и не могу без sudo. По этому не могу запустить команду с php
Антивирус Касперского 8.0 для Linux File Servers
но запустить так и не могу без sudo.
Почему вы решили, что будет работать без sudo?
Вы как раз разрешаете вызов определённой команды посредством sudo без запроса пароля.
Ну я только предполагаю что будет работать, не уверен. Но в принципе если зайдя из под пользователя, от имени которого выполняется php-скрипт смогу успешно запустить команду и она успешно выполнится, тогда с php будет то же самое.
С точностью до ограничения на время выполнения и память
Ну я только предполагаю что будет работать, не уверен. Но в принципе если зайдя из под пользователя, от имени которого выполняется php-скрипт смогу успешно запустить команду и она успешно выполнится, тогда с php будет то же самое.
С точностью до ограничения на время выполнения и память
Ещё раз, вот эта строка в файле /etc/sudoers позволит указанному пользователю делая вызов указанной команды посредством sudo не вводить пароль
username ALL = NOPASSWD: / opt/kaspersky/kav4fs/bin/kav4fs-control
а не запускать указанную команду от root без sudo.
Поэтому вам нужно вызывать в php "sudo /opt/kaspersky/kav4fs/bin/kav4fs-control ..."
Я уже пробовал этот вариант. Пробовал даже через файлы sh исполнить команду. Когда вывожу ошибки исполнения команды то пишет 126 ошибку
На сервере установлен антивирус для сканирования файлов (Антивирус Касперского 8.0 для Linux File Servers). Когда пользователь сайта загружает файл на сервер, надо проверить файл на наличие вируса.
Я бы вообще не стал вписывать в код сервера запуск каких либо задач. Есть inotifywait. Контролирует файловую систему, определенный каталог. И по наступлению определенных событий можно вызвать нужный обработчик. Тот же антивирусный сканнер. Ну а дальше - принимай решение по результатам анализа. Скрипт там элементарный, на пару команд всего.
[quote=vadim.draganyuk]На сервере установлен антивирус для сканирования файлов (Антивирус Касперского 8.0 для Linux File Servers). Когда пользователь сайта загружает файл на сервер, надо проверить файл на наличие вируса.
Я бы вообще не стал вписывать в код сервера запуск каких либо задач. Есть inotifywait. Контролирует файловую систему, определенный каталог. И по наступлению определенных событий можно вызвать нужный обработчик. Тот же антивирусный сканнер. Ну а дальше - принимай решение по результатам анализа. Скрипт там элементарный, на пару команд всего.[/quote]
Дело в том, что я пишу файловое хранилище, что то типу дропбокса, и мне нужно проверить файл именно при загрузке пользователем на сайт(сервер) и записать в базу информацию, проверен он или нет, вирус или нет, по этому нужно через методы php
Дело в том, что я пишу файловое хранилище, что то типу дропбокса, и мне нужно проверить файл именно при загрузке пользователем на сайт(сервер) и записать в базу информацию, проверен он или нет, вирус или нет, по этому нужно через методы php
Так inotifiwait как раз и вызовет проверку файла, как только он будет загружен на сервер (станет файлом в файловой системе). Как только кончится загрузка, произойдет соответствующее событие файловой системы. По нему дернется проверочный скрипт, в котором вы вполне сможете решить, что именно дальше делать. Например, помимо антивирусной проверки посчитать хэш файла и решить - есть ли такой файл в вашем хранилище или нет. И если есть - то новую копию не хранить, а сделать хардлинк на существующий файл. Или что еще придумать... Естественно и в базу нужную информацию записать...
У меня на этом inotifywait реализована антивирусная защита файлового сервера. Если там появляется новый файл или имеющийся файл изменяется - вызывается проверочный скрипт. А там - если файл "заражен", то он переносится в карантин. А юзеру, владельцу этого файла, идет соответствующий е-мейл с уведомлением.
В чем достоинство inotifywait - каким бы Вы образом не закидывали свой файл на сервер (а вдруг способов будет много?) файл всегда пройдет стандартные проверочные процедуры. В отличие от проверки, реализованной в одном загружающем модуле. А появится второй-третий? А потом - решите добавить ftp...