Я разрабатываю библиотеку (сборку CLI) для системы Linux. Я хочу предоставить метод для пользователей библиотеки для переключения текущего эффективного пользователя и группы. Основная причина заключается в том, чтобы обеспечить контроль доступа (определенные действия разрешены только определенными пользователями), а во-вторых, разрешить изменение файловой системы как определенного пользователя.Изменить текущего пользователя Linux в приложении C#, работающем с Mono?
я определил два возможных подхода:
1. Запустите Моно как корень и P/Invoke LibC процедуры, как seteuid и т.д.
Осуществив это, установив ей немного/USR/бен/моно, а затем задерживая эффективный пользователь из моей библиотеки (т.е. после запуска Mono времени выполнения) вызывает сбой в моно, когда она заканчивается:
ERROR:handles.c:1940:_wapi_handle_update_refs: assertion failed: (thr_ret == 0)
Native stacktrace:
mono2 [0x8bb6c]
/lib/libc.so.6(__default_rt_sa_restorer_v2+0) [0x4020a5a0]
/lib/libc.so.6(gsignal+0x40) [0x4020920c]
Логически я понимаю, что может быть проблемы Wi что меняет эффективный пользователь Mono, поскольку он управляет несколькими ресурсами, и это может вызвать проблемы.
2. Аутентификация Handle в нативной демона и не изменять Mono эффективного пользователя
я не уверен, если есть какие-либо внедорожных готовые решения для этого, но концептуально я имею в виду, чтобы иметь демон с правами администратора, с которым библиотека будет взаимодействовать (например, через очереди сообщений POSIX) для выполнения аутентификации. Демон работает от имени root, чтобы читать/etc/shadow. Эффективный пользователь Mono не будет изменен, но моя библиотека будет отслеживать, какой «эквивалентный пользователь» выполняет этот процесс. К сожалению, этот подход не позволит библиотеке обращаться к файловой системе как к другому пользователю.
Вопрос
Am Я застрял на второй вариант, или есть какой-то способ, чтобы реально изменить эффективного пользователя процесса Mono?
Спасибо!
я не знаю Mono реализована WindowsIdentity, как-то полезное - спасибо за указание! С образцом кода я все еще сталкиваюсь с ошибкой сегментации, которую я использовал при использовании seteuid(). Принимая этот ответ в любом случае. – d99kris
Какую версию моно вы используете? Я запускаю mono 3.0.7-1 в системе x64 и настраиваю рамки 4.0. – dna