Для OS X: смотрите ли вы Руководство по аутентификации, авторизации и разрешениям для Mac OS X?
Как правило, в UNIX-подобных операционных системах процессы обычно принадлежат одному конкретному пользователю, и то, что им разрешено делать, определяется в первую очередь этим. Есть некоторые исключения из этого, но, как правило, идея состоит в том, чтобы сделать это с гранулярностью каждого процесса. С другой стороны, запуск новых процессов очень прост - см. fork()
функция .
Таким образом, типичный способ для демона (такого как sshd ) выдать себя за другого пользователя - это запустить основной процесс как root . Затем примите входящие соединения и передайте их fork()
ed дочерним процессам, которые, как вы говорите, немедленно отбрасывают привилегии, используя set * uid. Существуют различные каналы связи между процессами, такие как каналы, которые можно настроить, если дочерние процессы должны взаимодействовать с родительским процессом. Очевидно, что чем меньше кода выполняется от имени пользователя root, тем лучше с точки зрения безопасности, поэтому вам нужно стремиться к тому, чтобы дочерние процессы были автономными.
Если вам нужно, чтобы пользователи фактически указали свое имя пользователя и пароль, все становится немного сложнее; Возможно, вы захотите взглянуть на исходный код утилит su и sudo и прочитать документацию для платформы для API аутентификации.