Повышение привилегий программно на моно

Из моего моноприложения, работающего под Linux, я хочу запустить еще одно от имени пользователя root. На данный момент я использую Process.Start, работает gksudo.

Это решение работает достаточно хорошо при одном условии - установлено gksudo.

Мне нужен механизм повышения привилегий для моносборки (не обязательно как другого процесса), который не зависит от конкретного приложения, зависящего от рабочего стола, такого как gksudo или kdesu, и не основан на консоли (как старый добрый sudo).

На самом деле я считаю, что мне нужен способ PAM-ify моего приложения.

Решение не обязательно должно быть совместимым с Windows, но было бы приятным бонусом.

Я видел много возможных ответов на мою проблему, но ни один из них не решил все проблемы.

Очень хорошим подходом был https://stackoverflow.com/a/16276287/882200, но он требует, чтобы сборка запускался как root, что невозможно.

Это вдохновило меня попробовать новый подход. я пробовал бегать

Process.Start("whoami", "otheruser", password, "");

Вывод должен быть otheruser, но это не так.

Обратите внимание, что я оставляю домен (последний параметр) пустым (это нормально?) и заполняю пароль в соответствии с этот пример.

Это решение не самое лучшее — оно требует, чтобы я предоставил средства для получения пароля, но оно приемлемо, хотя и не работает.

Лучшим вариантом для меня было бы заставить мою среду выбрать правильный способ получения пароля - либо во всплывающем окне Qt/GTK, либо в консоли.

Последнее, о чем следует помнить, — для запуска приложения с правами root я хотел бы иметь возможность указать пароль sudoer, а не обязательно пароль root (в соответствии с конфигурацией sudoers).


person Piotr Zierhoffer    schedule 21.03.2014    source источник
comment
Вы когда-нибудь находили решение для этого? Я переношу .net-приложение с Windows на Linux, и одним из компонентов является система обновлений. В Windows он использует ProcessStartInfo.Verb = runas для вызова подсказки UAC, но я не могу найти надежную альтернативу Mono в Linux.   -  person Ashley    schedule 26.05.2018
comment
Не на самом деле нет. К сожалению, мы придерживаемся try gksudo, иначе try beesu и т. д. и т. д. Глагол runas работает без проблем?   -  person Piotr Zierhoffer    schedule 28.05.2018
comment
Использование runas у меня безупречно работало в Windows, но не работает в Linux. Теперь я пошел по пути запуска службы обновлений в фоновом режиме от имени пользователя root, а клиентское программное обеспечение взаимодействует с ним с помощью сокетов всякий раз, когда оно хочет инициировать обновление программного обеспечения.   -  person Ashley    schedule 01.06.2018