Я разрабатываю приложение Mac Cocoa, которое должно запускать второе приложение. Ниже приводится соответствующая форма второго приложения, которое мне нужно, чтобы запуститьМожно ли запустить root, выполнив вход пользователя с помощью getuid()?
int main(int argc, const char * argv[]) {
uid_t gRealUserID = getuid();
printf("User id:%d\n",gRealUserID);
return 0;
}
Проблема заключается в том, что второй терминал приложение должно работать корень, а также «getuid()» получить вошедшего в user.My первое приложение работает с привилегиями root.
так короче, если я построю приведенный выше код к исполняемым под названием «тест» и запустить в терминале
$ ./test
User id:501
если мы запустим
$ sudo ./test
User id:0
Я хочу знать, есть ли возможный путь с помощью которого, если я приказываю как
$ sudo ./test
гравюр
User id:501
Интересное наблюдение: Если я разрешаю корень привилегию не корневого приложения с помощью SFAuthorization
он работает как expected..But, к сожалению, я не могу сделать это сейчас, сделать какой-то потребности клиента изменения
спасибо @CRD Я попытаюсь .. но почему при использовании SFAuthorization autharization работает? –
Авторизация работает в обоих случаях, именно так настраиваются реальные и эффективные идентификаторы. Если вы прочитаете эти данные, вы узнаете, как программа UID для набора может создать установку 'sudo' - действительно делает' ls -l/usr/bin/sudo', и вы увидите, что это заданная программа UID. – CRD
Спасибо @CRD 'setuid()' форма первого приложения сделала трюк –