shell — Почему обратные ссылки PHP и SSH не возвращают одинаковые значения?

Когда я бегу ps cax с моей командной строкой ssh ​​я получаю следующее:

user@dqeb ~ $ ps cax
PID TTY      STAT   TIME COMMAND
3277 ?        Ss    12:51 httpd
6797 ?        S      1:45 httpd
7190 ?        Ss     0:00 gpopd.pl
7291 ?        S      0:02 httpd
7303 ?        S      0:05 httpd
7309 ?        S      0:03 httpd
7336 ?        S      0:02 httpd
7361 ?        S      0:03 httpd
7419 ?        S      0:02 httpd
7426 ?        S      0:02 httpd
7427 ?        R      0:03 httpd
7440 ?        S      0:02 httpd
7457 ?        S      0:01 httpd
7468 ?        S      0:01 httpd
7504 ?        S      0:02 httpd
7743 ?        S      0:00 wrapper
7744 ?        Sl     0:00 java
7812 ?        S      0:00 qmail-local
7843 ?        S      0:00 qmail-local
7848 pts/3    R+     0:00 ps
8769 ?        Sl     0:00 sshd
8775 pts/5    Ss+    0:00 bash
9159 pts/2    S      0:00 su
9160 pts/2    S+     0:00 bash
9241 pts/5    S      0:00 gimap.pl
30334 ?        S      0:00 imap
30335 ?        S      0:00 imap
30340 ?        S      0:00 imap
30582 ?        Sl     0:00 sshd
30589 pts/3    Ss     0:00 bash

Тем не менее, когда я запускаю следующий код PHP:

$newline = chr(10);
$out = `ps cax`;
$out = str_replace($newline, '<br>', $out);
echo $out;

я получил

7519 ? R 0:00 ps
15886 ? S 0:00 httpd
15890 ? S 0:00 httpd
15891 ? S 0:00 httpd
15917 ? S 0:00 httpd
15920 ? S 0:00 httpd
15930 ? S 0:00 httpd
15932 ? S 0:00 httpd
15933 ? S 0:00 httpd
16124 ? S 0:00 httpd
16125 ? S 0:00 httpd
16126 ? S 0:00 httpd
16128 ? S 0:00 httpd
16129 ? S 0:00 httpd
16130 ? S 0:00 httpd
16131 ? S 0:00 httpd
16134 ? S 0:00 httpd
16137 ? S 0:00 httpd
16138 ? S 0:00 httpd
16448 ? S 0:00 httpd

..и так продолжается довольно долго.

Почему я не вижу одинаковые процессы, когда запускаю одну и ту же команду на одном и том же сервере? Я ожидал, что они будут идентичны.

3

Решение

Когда вы запускаете скрипт PHP через веб-браузер, он выполняется как www user, который является менее привилегированным. Вы можете видеть только те процессы, которые принадлежат www, Вот почему вы видите только httpd то есть apache дочерний процесс. Когда вы запускаете тот же скрипт через оболочку, он запускается от имени соответствующего пользователя (root или имя пользователя, которое вы использовали для ssh). Этот пользователь может иметь больше привилегий, чем www user, Таким образом, вы можете увидеть почти все процессы, запущенные в системе.

Если вы хотите получить тот же результат при выполнении скрипта через браузер, вам нужно повысить привилегию www user, что является угрозой безопасности. Любой, кто просматривает ваш сайт, получит такую ​​же привилегию, и он может легко взломать ваш сервер. Поэтому я не буду рекомендовать это.

4

Другие решения

Если у вас нет прав root:
Создайте файл «mypass.secret»
[Введите ваш пароль user @ dqeb password] И из php:

$newline = chr(10);
$out = `sudo -u user -S ps cax < ~/mypass.secret`;
$out = str_replace($newline, '<br>', $out);
echo $out;

если у вас есть root-доступ:

Вы должны добавить www-данные в ваш файл / etc / sudoers:

sudo visudo -f /etc/sudoers
www-data ALL=(ALL) NOPASSWD: ALL

Тогда вы сможете захватить весь процесс, используя:

$newline = chr(10);
$out = `sudo ps cax`;
$out = str_replace($newline, '<br>', $out);
echo $out;
1

По вопросам рекламы [email protected]