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