Я запускаю свое приложение как sudo, но мне нужно использовать git pull, основанное на информации в ~/.gitconfig
и ~/.netrc
которые есть у моего текущего пользователя. Как мне сделать это, не помещая мои учетные данные в учетную запись пользователя root.
1 ответ
Согласно man-странице sudo, изменение переменной среды HOME
может быть поведением по умолчанию, но это не обязательно. Если переменная среды HOME
не обновлена, вы, вероятно, ничего не измените, и она будет работать. Посетите справочную страницу sudoers для получения дополнительной информации о политиках sudo
, включая обновление переменной среды HOME
.
Этот вопрос StackOverflow охватывает программный поиск домашнего каталога пользователя. Вы можете использовать этот подход (очевидно, не используя подход переменной среды HOME
, если он изменяется с помощью sudo
). Обратите внимание, что getuid
возвращает "реальный" UID вызывающего процесса, который будет тем пользователем, которого вы хотите (geteuid
получает эффективный UID, который в вашем случае будет root). Затем вы можете найти пользовательские файлы конфигурации и учетные данные и использовать их, или, возможно, просто (временно или иначе) отредактировать переменную среды HOME
вашего процесса перед вызовом функций git
.
Вы также можете просто указать вашей программе путь к конфигурации git
и / или файлу учетных данных в качестве параметра. Пользователи должны будут предоставить их вручную, но затем вы можете передать их в git
в вашей программе.
Важное предупреждение: все эти предложения основаны на предположении, что пользователю можно доверять (то есть, если пользователь может вызвать sudo, ему разрешено полностью захватить систему).
Если ваша программа использует настраиваемую политику sudo
которая позволяет вызывать ее ненадежными пользователями (или это сам setuid root и исполняемый ненадежными пользователями), вам нужно быть более осторожным. Например, ненадежный пользователь, который хочет получить доступ к чему-либо с использованием учетных данных git
другого пользователя, может создать символическую ссылку на файл (ы) конфигурации / учетных данных целевого пользователя, а затем использовать вашу программу (или может передать профиль другого пользователя, если вы использовали подход аргумента командной строки). Лучший способ смягчить эту угрозу, за исключением того, что «не запускайте вашу программу от имени пользователя root», - это использовать seteuid(getuid())
чтобы временно понизить ваш эффективный UID до реального UID вашего пользователя, что означает попытку доступа к другим пользователям. файлы приведут к отказу в доступе. Вы можете восстановить эффективный UID позже, если это необходимо.