UNIX-эквивалент CreateProcessWithLogonW - PullRequest
0 голосов
/ 20 июля 2010

Что у меня есть: логин / пароль для пользователя UNIX (Алиса).

Кто я: какой-то другой пользователь UNIX (Боб).

Что мне нужно сделать: запустить процесс программно (foo), как другой пользователь (alice).

Какой должен быть конечный результат: процесс выполняется и отображает Алису в качестве владельца, если выполнено «ps». В целях привилегий действует так, как будто Алиса запустила его.

В основном мне нужно написать некоторый код, который эквивалентен "su -c 'foo' - alice"

В идеале я не хочу устанавливать какие-либо специальные биты или разрешения для рассматриваемого исполняемого файла (foo).

Ответы [ 2 ]

1 голос
/ 21 июля 2010

Никогда не говори никогда, но я думаю, что это возможно невозможно любым unix-переносимым способом.Вызов setuid (2) (и друзей) завершается успешно, только если текущий uid совпадает с целевым (по модулю некоторых тонкостей относительно эффективных и реальных uid) или если текущий uid равен 0 (т. Е. Root).То есть вы не можете перейти с одного пользователя без полномочий root на другой.

Наличие пароля не помогает.Пароль используется для начальной аутентификации в системе, будь то через login, ssh или через какой-либо диалог входа в систему с графическим интерфейсом, но пароль касается только этих программ, а несистема как таковая.Иными словами, kernel не заботится о вашем пароле, и вам нужно поговорить с kernel , если вы хотите изменить uid.

Таким образом, вы, вероятно, поэтому обязаны рассмотреть косвенные маршруты, такие как упомянутые Питером Г.

(Да, некоторые Unix могут иметь способ сделать это, но это зависит от платформы).

Я знаю, что я не добавляю здесь никаких положительных советов, только, возможно, экономящий время отрицательный совет: «здесь нечего видеть;двигаться прямо вдоль ... '

1 голос
/ 20 июля 2010

Я вижу только два варианта запуска процесса как алисы в UNIX / Linux из процесса, принадлежащего bob, который не может сам себя настроить.

  • вызов программы setuid
  • взаимодействует с уже запущенным процессом, который может запускать процессы как алиса
...