PHP работает как пользователь apache, не входит ни в одну группу LDAP, членом которой является apache

В коротком коде, выполняемом PHP как пользователь apache, похоже, нет доступа для записи в группы, членом которых является apache, в которые apache может писать в оболочке.

Так что у меня есть пользовательский apache на рабочем сервере. Если я бегу id apache Я вижу Apache в качестве члена нескольких групп, в том числе groupa, Если я grep apache /etc/groups Я вижу, что членство в этих группах определяется не локально, а из LDAP.

У меня есть папка /u/dir который принадлежит root:groupa с разрешениями g+rws

Если я бегу sudo su -s /bin/bash -c "mkdir /u/dir/subdir" apache он работает нормально, apache имеет разрешение на создание файлов / папок в /u/dir

Однако, если я создаю и запускаю следующий скрипт на PHP, он завершается неудачно с запрещенным разрешением: `

Если я бегу id apache из оболочки он показывает: uid=48(apache) gid=123(groupa) groups=123(groupa)

Однако, если я запускаю следующее из PHP, я получаю другой результат: —

<?php echo shell_exec("id");?>

uid=48(apache) gid=48(apache) groups=48(apache)

Любые идеи, почему PHP (и, вероятно, процесс Apache / httpd) не имеют всех членств в группах, как они должны, и как я могу это исправить?

Я сделал тест, прежде чем кто-либо предложит это; Если я добавляю apache в группу в / etc / groups и перезапускаю apache, то приведенный выше вызов показывает новую группу, но не выбирает группы, в которые входит apache через LDAP (а этот сервер является одним из пула, доступ к удаленно сопоставленной / u, поэтому я не хочу вручную дублировать каждую группу локально на каждом сервере)

Я также добавлю, что я подозреваю, что наши серверы получают id информация из LDAP через sssd

Наблюдение: https://unix.stackexchange.com/questions/409843/how-to-get-the-supplementary-groups-ids-of-a-process

Если я добавлю <?php echo shell_exec("cat /proc/$$/status"); ?> Я вижу, что процесс httpd не поднял ни одного из sssd группы, только местные.

Редактировать для ясности:

Для ясности я должен добавить, я тестировал добавление apache в местную группу (300)testgroupзатем побежал <?php echo shell_exec("id");?> снова:-

uid=48(apache) gid=48(apache) groups=48(apache),300(testgroup)

Так что, хотя ясно, что основные права доступа к процессу имеют значение, по какой-то причине, когда я запускаю httpd (как apache:apache), это пикап местных групп, которые apache является членом и добавляет их в подгруппу («Группы» в /proc/$$/status), это не собирание групп, которые apache является членом via sssd. Это загадка.

0

Решение

Вы сравниваете яблоки с грушами.

Скрипт, который вы запускаете в оболочке, когда пользователь apache возвращает информацию, которую оболочка имеет для пользователя.

Но когда вы запускаете ваш PHP-скрипт, он запускается не только пользователем apache, но и демоном apache, у которого есть параметр конфигурации, под которым должен запускаться пользователь и какую группу его подпроцессов. И это перезаписывает системную информацию. Я почти уверен, что ваш apache httpd.conf где-то содержит группу и пользователя «apache». Таким образом, PHP-скрипты выполняются как пользовательские apache и групповые apache — и только эта одна группа из-за настроек config.

Я не уверен, что произойдет, когда вы вызовете этот PHP-скрипт:

<?php
echo shell_exec("/bin/bash id");

как это может вызвать новую сессию Bash.

0

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

Оказывается, у меня не было проблем вообще. Кто-то изменил основную группу пользователя apache на мою удаленную группу (в моем примере groupa), поэтому, когда apache запускался как apache: apache в соответствии с файлом httpd.conf, он перезаписывал эту основную группу. Поскольку apache на самом деле не был членом группы, кроме этого, казалось, что он покидает группу.

0

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