Команда оболочки lsof в php запрещена - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть следующий код:

        $cmd="lsof | awk '{print $1 \" \" $2 \" \" $3 \" \" $9}'";
        $info = shell_exec($cmd);        
        $processors = preg_split('/\s?\n\s?\n/', trim($info));
        $processors = explode("\n",$processors[0]);
        foreach($processors as $processor){
           echo $processor."\n";
        }

когда я запускаю его в командной строке, я получаю положительные результаты. однако, когда я запускаю его на PHP-скрипте, я получаю:

systemd 1 root denied) для каждого $processor

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Когда я попробовал опубликовать ваш код, я тоже получил те же ошибки (смог воспроизвести ошибки).

Затем я попытался поставить вместо вашего полного только lsoflsof команда с awk для просмотра полной ошибки, и я получил следующую ошибку.

COMMAND PID    USER   FD      TYPE DEVICE SIZE/OFF       NODE NAME
sh        1    root  cwd   unknown                            /proc/1/cwd (readlink: Permission denied)
sh        1    root  rtd   unknown                            /proc/1/root (readlink: Permission denied)
sh        1    root  txt   unknown                            /proc/1/exe (readlink: Permission denied)
sh        1    root NOFD                                      /proc/1/fd (opendir: Permission denied)
time      9    root  cwd   unknown                            /proc/9/cwd (readlink: Permission denied)
time      9    root  rtd   unknown                            /proc/9/root (readlink: Permission denied)

После этого я погуглил и нашел отличную ссылку https://unix.stackexchange.com/a/109228 (межсайтовая ссылка), котораяговорит нам, что lsof выдает ошибку, поскольку у нас нет доступа к этим файлам / командам, и, очевидно, мы НЕ запускаем команду с root.

Так что, чтобы преодолеть эту проблему, ИМХО, вы могли бы:

  • Запустите команду lsof как sudo, чтобы избавиться от ошибок в случае, если у вашего пользователя есть доступ sudo для выполнения этой команды.
  • В случае, если вас НЕ интересуют подробности корневых процессовтогда вы можете удалить эти ошибки, отправив их на /dev/null.
0 голосов
/ 06 ноября 2019

Если вы посмотрите на полный вывод lsof, вы увидите, что большинство строк выглядят так:

COMMAND     PID   TID TASKCMD            USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd       1                          root  cwd   unknown                                         /proc/1/cwd (readlink: Permission denied)

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

Попробуйте: sudo lsof

...