#c# #.net #linux
Вопрос:
Проблема в том, что одну и ту же программу можно запускать как с ней, так и без sudo
нее . С sudo
его помощью конфигурация должна храниться в системном каталоге, без sudo конфигурация должна храниться в каталоге пользователя. Кроме того, при запуске с sudo
ним следует записать обе конфигурации.
Проблема в том, что когда я создаю файл или каталог в своей программе, когда она запускается с sudo
— она создаст файл и каталоги как корневые. Тогда эти файлы не будут доступны для записи пользователем.
Моя программа также удаляет файл, который делает невозможным повторный сброс конфигурации. Поэтому при первом запуске ему необходимо создать как файлы, так и пользователя и систему.
Я знаю один способ сделать это: создайте все файлы и каталоги как root, затем измените владельца пользовательских каталогов и файлов на UID, так libc
getuid()
как все равно должен вернуть мой исходный идентификатор пользователя. Но этот подход требует добавления специализированного пакета для системного вызова Linux. Когда я делаю другой пакет, я ищу способ уменьшить зависимости, так что, может быть, есть встроенный способ просто переключить контекст на не-sudo из root?
Другой способ сделать это-использовать оболочку, но я не хочу использовать оболочку.
Я знаю, что для Windows есть встроенное переключение основного контекста.
Есть ли что-то подобное для Linux или мультиплатформенной системы, или единственный способ-использовать libc
вызовы?
Кстати, один или два простых звонка-это не проблема, я просто не хочу включать все такие вещи, как stat, chown, chmod и друзья. Но если нет другого способа, у меня все это есть в моем Woof.LinuxAdmin
пакете. Я просто не хочу добавлять зависимость в пакет, который не предназначен строго для системного администрирования. Моя цель-просто использовать новый DPAPI, и для этого (по крайней мере, в LINUX) необходимо каким-то образом настроить хранилище ключей. Так что это небольшая административная задача.
Обновить:
Ой, это кроличья нора 😉 Я только что проверил это libc
getuid()
и geteuid()
вернул то же значение sudo
. Это становится интересным. Поэтому, конечно, я все еще могу получить идентификатор пользователя stat
, указав основного владельца исполняемого файла. Я знаю, что это не эквивалентно текущему пользователю, но наиболее распространенным сценарием является то, что файлы в домашнем каталоге пользователя принадлежат пользователю. Но это оставляет меня с моим Woof.LinuxAdmin
пакетом, так как он содержит все необходимые системные вызовы и инструменты для легкого использования функций разрешений файловой системы Linux.
Поскольку, вероятно, нет простого способа обойти это, поэтому, когда я создам пакет, который должен работать как в Linux, так и в Windows, я, вероятно, добавлю зависимость от этого Linux
модуля.
Я просто сделаю еще одну «облегченную» версию только для Windows, без зависимости.