Проверьте, является ли пользователь root

Как я могу проверить, является ли пользователь 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"; }; ?> 

Имейте в виду, что это проверяет только имя пользователя. Если вам также необходимо проверить пароль, который вы действительно должны попытаться выполнить проверку подлинности в системе.