Как проверить, какой пользовательский php работает как?
Мне нужно определить, работает ли php как никто. Как мне это сделать?
Есть ли другие имена для "никто"? "Апач"? Любые другие?
Ответы
Ответ 1
Если доступно, вы можете исследовать текущую учетную запись пользователя с помощью posix_geteuid
а затем получить имя пользователя с помощью posix_getpwuid
.
$username = posix_getpwuid(posix_geteuid())['name'];
Однако, если вы работаете в безопасном режиме (что часто бывает, когда exec отключен), то маловероятно, что ваш PHP-процесс работает под чем угодно, кроме учетной записи www-data
или apache
по умолчанию.
Ответ 2
<?php echo exec('whoami'); ?>
Ответ 3
Вид обратного пути, но без exec/system:
file_put_contents("testFile", "test");
$user = fileowner("testFile");
unlink("testFile");
Если вы создадите файл, владелец будет пользователем PHP.
Это также может быть запущено с любой из временных файловых функций, таких как tempnam()
, которая создает случайный файл во временном каталоге и возвращает имя этого файла. Если есть проблемы из-за чего-то вроде разрешений, open_basedir
или безопасного режима, который предотвращает запись файла, как правило, каталог temp все равно будет разрешен.
Ответ 4
Более подробная информация была бы полезна, но если предположить, что это Linux-система, и предположим, что php работает под apache, она будет работать так же, как и любой пользовательский apache, выполняемый как.
Простой способ проверить (опять же, предполагая некоторую среду, похожую на unix) - создать php файл с помощью
<?php
print shell_exec( 'whoami' );
?>
который предоставит вам пользователя.
Для моего экземпляра AWS я получаю apache
как вывод, когда я запускаю этот script.
Ответ 5
Вы можете попробовать использовать обратные такты:
echo `whoami`;
Ответ 6
я использовал бы:
lsof -i
lsof -i | less
lsof -i | grep :http
любой из них. Вы можете ввести em в свою командную строку ssh, и вы увидите, какой пользователь прослушивает какую службу.
вы также можете пойти и проверить этот файл:
more /etc/apache2/envvars
и найдите следующие строки:
export APACHE_RUN_USER=user-name
export APACHE_RUN_GROUP=group-name
чтобы отфильтровать данные файла envvars, вы можете использовать grep:
more /etc/apache2/envvars |grep APACHE_RUN_
Ответ 7
exec('whoami')
сделает это
<?php
exec('whoami');
?>
Ответ 8
добавьте файл info.php в следующий каталог - ваш каталог http/apache по умолчанию - обычно /var/www/html
со следующим содержанием
<?php
phpinfo();
?>
Затем перезапуск httpd/apache
перейдите в свой html-каталог по умолчанию
http://enter.server.here/info.php
предоставит всю родословную php!
Ответ 9
В моей настройке я хочу проверить, разрешено ли текущему процессу создавать папки, вложенные папки и файлы, прежде чем начинать процесс, и предложить решение, если оно похоже на то, что я не могу. Я хотел запустить stat(<file>)
для разных целей, чтобы обеспечить соответствие разрешений для выполняемого процесса (я использую php-fpm, поэтому он зависит от пула).
Решение, созданное на основе posix, описанное Марио выше, кажется идеальным, однако кажется, что расширение posix --disabled, поэтому я не мог выполнить вышеописанное, и поскольку я хочу сравнить результаты с ответом от запуска stat(), выполняющего whoami
в отдельная оболочка тоже не полезна (мне нужны uid и gid, а не имя пользователя).
Однако я нашел полезный намек, я мог stat(/proc/self)
и stat(/proc/self/attr)
и видеть uid и gid файла.
Надеюсь, что кто-то еще поможет
Ответ 10
Прямо из оболочки можно запустить:
php -r "echo exec('whoami');"
Ответ 11
Я обычно использую
<?php echo get_current_user(); ?>
Буду рад, если это поможет вам
Ответ 12
$_SERVER["USER"]
$_SERVER["USERNAME"]
Ответ 13
Предложение
Немного поздно, но, несмотря на то, что следующее является обходным, оно решает требование, поскольку это работает очень хорошо:
<?
function get_sys_usr()
{
$unique_name = uniqid(); // not-so-unique id
$native_path = "./temp/$unique_name.php";
$public_path = "http://example.com/temp/$unique_name.php";
$php_content = "<? echo get_current_user(); ?>";
$process_usr = "apache"; // fall-back
if (is_readable("./temp") && is_writable("./temp"))
{
file_put_contents($native_path,$php_content);
$process_usr = trim(file_get_contents($public_path));
unlink($native_path);
}
return $process_usr;
}
echo get_sys_usr(); // www-data
?>
Описание
Выделение кода выше неточно, скопируйте и вставьте в свой любимый редактор и просмотрите его как PHP-код или сохраните и протестируйте его самостоятельно.
Как вы, вероятно, знаете, get_current_user()
возвращает владельца "текущего запуска script", поэтому, если вы не "chown" a script на сервере для пользователя веб-сервера, он, скорее всего, быть "никому", или если разработчик-пользователь существует в той же ОС, он скорее отобразит это имя пользователя.
Чтобы обойти это, мы создаем файл с текущим запуском процесса. Если вы просто require()
в текущем запуске script, он будет возвращать то же самое, что и parent-script, как указано; поэтому нам нужно запустить его как отдельный запрос для вступления в силу.
Процесс потока
Чтобы сделать это эффективным, подумайте о запуске шаблона проектирования, который включает в себя "режим выполнения", поэтому, когда сервер находится в "режиме разработки или в тестовом режиме", тогда только он может запустить эту функцию и сохранить ее выход где-то в include, или просто текст или базу данных, или в зависимости от того, какой из них.
Конечно, вы можете изменить некоторые особенности кода выше, так как вы хотите сделать его более динамичным, но логика выглядит следующим образом:
- определить уникальную ссылку на ограничение помех другим пользователям
- определить локальный путь к файлу для записи временного файла
- определить общий URL-адрес/путь для запуска этого файла в собственном процессе
- напишите временный файл php, который выводит имя владельца script
- получить результат этого script, сделав запрос к нему
- удалить файл, поскольку он больше не нужен - или оставить его, если вы хотите
- возвращает результат запроса в качестве возвращаемого значения функции
Ответ 14
$user = $_SERVER['REMOTE_USER'];
http://php.net/manual/en/reserved.variables.server.php
Аутентифицированный пользователь
Ответ 15
<?php phpinfo(); ?>
сохранить как info.php и
откройте info.php в вашем браузере
Ctrl + F затем введите любой из них:
APACHE_RUN_USER
APACHE_RUN_GROUP
user/group
Вы можете видеть пользователя и группа Apache работает как.
Ответ 16
Вы можете использовать эти команды:
<? system('whoami');?>
или же
<? passthru('whoami');?>
или же
<? print exec('whoami');?>
или же
<? print shell_exec('whoami');?>
или же
<? print get_current_user();?>