Как я могу проверить, является ли пользователь root в PHP-скрипте? Какая команда? Я попробовал что-то вроде этого:
exec("su -l login < `echo password`");
но команда su не может получить пароль …
Обратите внимание, что машина изолирована от Интернета, поэтому я могу запустить PHP как root, если это необходимо.
EDIT: Я не хочу знать, является ли текущий пользователь, который запускает скрипт, root или нет. У меня есть список пользователей в моем PHP-скрипте, и я хочу знать для каждого входа, если у него есть привилегии root.
Сначала спросите себя, что именно определяет логин с привилегиями root. AFAICT существует 2 основных решения.
Старо-школьный способ, где сидэдмины создают несколько учетных записей с uid 0, которые я – и я, конечно, не одинок в этом – считаю кошмаром. В этом случае вы можете проверить всех пользователей в своем списке, используя posix_getpwnam, и посмотреть, соответствует ли их uid 0.
Следующий фрагмент кода делает именно это: $ privileged будет содержать пользователей с привилегиями root:
$logins = array('root', 'john', 'guest', 'foo'); $privileged = array(); foreach($logins as $login) { $userInfo = posix_getpwnam($login); if ($userInfo !== FALSE) { if ($userInfo['uid'] == 0) { $privileged[] = $login; } } }
Другой способ (и imho only sane) сделать это – добавить всех пользователей с правами root / администратора в определенную группу ( колесо или администратор уже используются в разных дистрибутивах Linux, выясните, какой из них работает для вас). Этот сценарий еще проще, поскольку вы можете использовать posix_getgrnam для извлечения всех членов в определенной группе.
Следующий фрагмент кода будет соответствовать массиву логинов, которые вы предоставляете, и узнать, кто является членом с определенными привилегиями, снова $ privileged будет содержать результат (т. Е. Пользователей в вашем списке, которые входят в указанную вами группу):
$logins = array('root', 'john', 'guest', 'foo'); $privileged = array(); $groupInfo = posix_getgrnam('admins'); if ($groupInfo !== FALSE) { $privileged = array_intersect($logins, $groupInfo['members']); }
Как насчет posix_getuid()
?
if (0 == posix_getuid()) { echo "Running as root."; } else { echo "not root"; }
Попробуй это .
<?php if (posix_getuid() == 0){ echo "This is root !"; // add more for root } else { echo "This is non-root"; } ?>
Если вы действительно имеете в виду «root», тогда вы можете просто проверить, есть ли whoami
, и посмотреть, появляется ли он «root»,
exec("whoami");
Если это умная вещь, это другой вопрос;)
«Я не хочу знать, является ли пользователь, который запускает сценарий, root или нет. Мне нужно проверить скрипт PHP для некоторых логинов / паролей, если они являются root или нет»
Теперь я понял, что вам нужно выполнить проверку подлинности root на PHP.
Я предлагаю использовать pwauth
вместо whoami / login и т. Д.
Вот пример того, как использовать его с PHP, хотя я считаю, что может быть более простой способ тестирования.
Если вы хотите узнать, есть ли у определенного пользователя системы (в отличие от пользователя веб-сервиса) привилегии root, вы можете использовать posix_getpwnam()
:
<?php $u = posix_getpwnam("username"); if ($u == FALSE) { print "no-such-user"; } elseif ($u["uid"] == 0) { print "root"; } else { print "non-root"; }; ?>
Имейте в виду, что это проверяет только имя пользователя. Если вам также необходимо проверить пароль, который вы действительно должны попытаться выполнить проверку подлинности в системе.