У меня есть программа C++, которая требует прав root для выполнения некоторых функций. Если я запустил свой скомпилированный код в режиме su, например
linux-c5b6:/home/suman #
Он удовлетворяет моему требованию, но во время выполнения я хочу проверить, имеет ли мой процесс привилегии root или нет. Если нет, тогда пользователь получит пароль su и запустит мой код для получения правильных результатов.
Системный вызов geteuid (2) вернет действительный идентификатор пользователя, запускающего вашу программу:
if (geteuid() == 0) {
// running as root
} else {
// not running as root
}
Вместо того, чтобы программа запрашивала у пользователя пароль root, я бы рекомендовал, чтобы он вышел с сообщением об ошибке и попросил пользователя повторно запустить программу с помощью sudo
.
Вы можете проверить текущую переменную оболочки оболочки UID, только root будет UID = 0
Или, еще лучше, запросите текущего пользователя и проверьте свой UID напрямую, используя функции библиотеки системных паролей.