IT

치명적 오류 "안전하지 않은 저장소('/home/repon'은 다른 사용자 소유)"

itgroup 2023. 7. 2. 19:14
반응형

치명적 오류 "안전하지 않은 저장소('/home/repon'은 다른 사용자 소유)"

Apache 2에서 치명적인 오류 로그를 찾았습니다.

unsafe repository ('/home/repon' is owned by someone else)

그것은 내가 가지고 있기 때문에 발생합니다.git rev-parse --symbolic-full-name --abbrev-ref HEAD'PHP 코드에서, 그리고 새로운 Git 안전 변화는 더 이상 허용하지 않는 것처럼 보입니다.www-data이 Git 명령을 실행합니다.

다음 명령을 실행해도 작동하지 않습니다.

git config --global --add safe.directory /homerepon

이 문제를 해결하기 위한 해결 방법이 있습니까?

Git 전버:2.35.3
버전: PHP 버전:7.4
Apache2 파일:2.4.41

이 문제는 여기에 설명된 취약성을 수정하는 Git 2.35.2 보안 업데이트 릴리스에서 발생하기 시작했습니다.크레딧 @후안-카발리

다음은 네 가지 가능한 솔루션입니다.

  • Git 디렉토리를 신뢰합니다(디렉토리 내용이 안전하다는 것을 알고 있다면 그렇게 하십시오).
git config --global --add safe.directory /home/repon

이것은 다음을 추가합니다.safe다음 예와 같이 group to file ~/.gitconfig:

[safe]
    directory = /home/repon
  • 명령을 올바른 사용자로 실행합니다. 예:
sudo -u ubuntu -- git status

참고: 사용자가 필요합니다.www-data할 수 입니다.ubuntu(Ubuntu가 저장소 소유자임).이 작업을 수행하려면 내부에 새 파일을 추가해야 합니다./etc/sudoers.d/다음 내용을 포함합니다.

www-data ALL=(ubuntu) NOPASSWD: /usr/bin/git

보안 문제가 있을 수 있으므로 먼저 보안 담당자에게 문의하십시오.

  • 를 Git 장소소다변음경다니로 합니다.www-data
sudo chown -R www-data:www-data /home/repon
  • 임시 해결책으로 Git을 다운그레이드합니다.예를 들어 Ubuntu의 경우:
apt install git-man=1:2.17.0-1ubuntu1 git=1:2.17.0-1ubuntu1

참고: 적어도 Windows에서는 꺼낼 수 있는 드라이브의 모든 Git 저장소가 안전하지 않은 것으로 간주되고 소유권을 변경하는 것이 작동하지 않는 것으로 보입니다.

이것은 Git safe 업데이트 때문입니다.

Git가 모든 디렉터리를 신뢰하도록 하려면 PowerShell에서 다음을 실행합니다.

git config --global --add safe.directory *

바시에서, 당신은 탈출해야 합니다.*확장을 방지하려면:

git config --global --add safe.directory '*'

『 』에 대한 지원*Git 2.36에서 언급한 대로 Git 2.36에서만 추가되었습니다. Git 2.36하이라이트댓글에 익명으로 추가되었습니다.

디렉터리를 하나만 신뢰할 경우 이 명령을 실행할 수 있습니다.

git config --global --add safe.directory your-directory

Windows의 경우 다음 작업을 수행해야 했습니다.

  1. 오류가 발생한 Git 저장소 폴더를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.

  2. 보안 탭을 선택한 다음 "고급"을 선택합니다(왼쪽 사진: "Erweitert"를 누릅니다).

  3. 새로 열린 창의 상단 영역에서 소유자 속성(오른쪽 사진: "Besitzer")을 확인하고 조정합니다(오른쪽 사진: "Anndern" 누름).작업 중인 Windows 계정이어야 합니다.

  4. 권한이 설정될 때까지 누르고 기다리면 Git 오류 메시지가 기록됩니다.

    Enter image description here

이 솔루션은 나중에 디렉토리를 이동하거나 디렉토리 이름을 변경하는 경우에도 작동합니다.내 생각에 당신은 이 해결책을 더 선호해야 합니다.

git config --global --add safe.directory <repo-path>

디렉토리 이름을 변경할 때마다 수행해야 합니다.에서 .gitconfig 파일을 수동으로 조정할 수도 있습니다.

C:\Users\<username>\.gitconfig

일단 안전 목록에 추가하면 됩니다.

윈도우즈용 Huber Thomas의 답변과 함께, 한 위치에서 다른 위치로 이동한 소스 제어 관리 폴더에 많은 파일이 있기 때문에 PowerShell 또는 CMD를 사용해야 했습니다.TAKEOWN 명령은 이 문제를 잘 처리했습니다(조금 느리더라도).

  1. 사용자 자신이 CMD를 엽니다(관리자일 필요 없음).
  2. 리포지토리 폴더(또는 여러 개인 경우 상위 폴더)로 이동합니다.
  3. 려달을 합니다.takeown /f . /r /d Y

이렇게 하면 현재 폴더의 모든 폴더에서 재귀적으로 작동하며 로그인한 사용자(사용자)에게 소유권을 설정합니다.

이전 답변의 솔루션 중 어떤 것도 저에게 효과가 없었지만 저장소의 소유권을 변경하는 것은 효과가 있었습니다.Ubuntu 20.04.4(Focal Fossa) LTS를 실행하고 있으며 다음 명령을 실행했습니다.

sudo chown -R username:group directory

자동화의 일환으로 시나리오에서는 하나의 스크립트를 여러 번 호출하여 작업 공간을 사전에 파악하지 못했습니다.

그래서, 우리의 경우에는,git config --global --add safe.directory *에 여러 .~/.gitconfig.

git config --global --replace-all safe.directory '*'중복 항목이 없도록 하는 데 도움이 되었습니다.

sudo git config --system --add safe.directory /homerepon

--system에서는 저장소를 저장소를음포모사든용안표것시전으를 포함하여 합니다.www-data.

비슷한 문제가 있었습니다. Git를 사용하는 웹 애플리케이션이 저장소에 액세스할 수 없습니다.

명령어 실행()git config --global --add safe.directory /repo/path. 로 실행했기 입니다.) 또한 작동하지 않았습니다. 왜냐하면 저는 'www-data' 사용자가 아닌 '나'로 실행했기 때문입니다.

간단했습니다 - ▁the다니▁created를 만들었습니다. 제가 만든 것은.gitconfig에 파일을 합니다./var/www경우 ) 및 put(put: wwww-data 사용자의 본거지)

[safe]
        directory = /repo/path

거기.

당연한 얘기일 수도 있지만, 저는 그 출마를 언급할 가치가 있다고 생각합니다.git config --global --add safe.directory /home/reponwww-data 사용자를 위해 수행해야 합니다.

문제 1: www-data의 HOME 디렉토리는/var/www따라서 .gitconfig 파일이 있으면 보안 위험(서버 경로 및 구성을 방해함)이 있을 수 있습니다.

문제 2: Apache/Ubuntu 20.04(Focal Fossa)에서는 HOME 환경 변수가 기본적으로 정의되지 않습니다(/etc/apache2/envvarsit)), (" "는", "는" "설정되지 않습니다" ( ).git config --globalfails with fatal: $HOME not set).

Git의 시스템 구성에 저장소를 추가하여 문제를 해결했습니다.git config --system --add safe.directory /home/repon.

Gitbash를 열고 다음 명령을 입력하면 됩니다.

git config --global --add safe.directory '*'

Windows에서 "오류: 잘못된 인수 수가 2이어야 합니다"라는 메시지가 표시되는 경우 허용된 답변 외에도 디렉토리 인수를 제공할 때 작은 따옴표 대신 큰따옴표를 사용합니다.

예:

git config --global --add safe.directory "D:/Source/Repos/SampleProject"

최상위 디렉터리의 소유자를 변경하여 수정했습니다.

로컬 Ubuntu LAMP 스택에서 Laravel을 실행하면 설정에 다음 명령이 포함됩니다.

sudo chown -R www-data /var/www/dirname

그러나 www-datadirname을 소유하고 있는 상황에서 Git는 위의 오류를 발생시켰습니다.이 문제를 해결하기 위해, 저는 최상위 dirname .git 디렉토리의 소유자를 변경하기만 하면 되었습니다.

sudo chown myUserName /var/www/dirname

sudo chown -R myUserName /var/www/dirname/.git

gitconfig에 추가하는 것은 효과가 있었지만, 누가 모든 디렉토리에 그렇게 하기를 원합니까?!미쳤어요!

저에게, 답은: → 스도를 사용하지 마세요!

대부분의 경우, 스도를 사용하는 것은 아프지 않으며, 사용자가 만질 수 있는 것과 더 많은 접근이 필요한 것 사이를 이동하는 것은 습관적일 수 있습니다.

사용자가 리포지토리를 만든 다음 "sudogit..."을 사용한 경우 오류가 발생했습니다.저는 또한 "sugdogit"를 먹었습니다.가명을 사용하고 있다는 것조차 분명하지 않았습니다.

Fabricator가 내 저장소의 내용을 표시할 수 없는 비슷한 문제가 있었습니다.git log귀하와 동일한 이유로 인해 실패했습니다).

가 실행중사파수없습다니악할를용자를 하고 있는지 알수.git모든 사용자에 대해 글로벌 Git 구성 파일을 편집/생성할 수 있다는 것을 알기 전까지는 적절한 해결책을 찾을 수 없었습니다.

다음을 사용하여 파일을 만들었습니다.

sudo vi /etc/gitconfig`

그리고 이것을 안에 넣습니다.

[safe]
        directory = /home/opt/phabricator_repo/1
        directory = /home/opt/phabricator_repo/4
        directory = /home/opt/phabricator_repo/5

OS: Ubuntu 20.04 (포칼 포사)

디렉토리를 소유한 다른 사용자가 있는 경우 이 문제가 발생합니다.예를 들어, Git 저장소는 www-data소유한 /var/www에 있습니다.이제 비 sudo 사용자 계정을 사용하여 로그인하고 /var/www로 이동하여 다음과 같은 Git 작업을 수행합니다.

git branch

이 오류가 발생하므로 적절한 디렉터리 권한이 있는지 확인하십시오.삭제를 실행하여 디렉토리 소유권을 변경하거나 현재 사용자를 디렉토리 소유자가 속한 그룹에 추가할 수 있습니다.

Linux에서 명시적 허용 목록을 선호하는 경우 Git 구성(예: nano 또는 Vim 사용)을 편집하여 수동으로 허용 목록을 만들 수 있습니다.폴더 허용 목록을 에 넣기만 하면 됩니다.[safe]구성 파일의 섹션:

nano ~/.gitconfig

다음은 허용 목록을 준비하는 Python 스크립트입니다.

from glob import glob

def println(my_list):
    print("\n".join(map(str, my_list)))

git_folders_list = sorted(glob("~/git/*", recursive=True))

println(["directory = " + d for d in git_folders_list])

Sublime Text Merge에서 Windows에서 이 문제가 발생했습니다.여기에 언급된 몇 가지 솔루션을 적용하려고 했지만 효과가 없었기 때문에 다음과 같이 말했습니다.

폴더에 문제가 있으면 새 폴더를 만들어야 하므로 프로젝트 폴더를 복사하여 붙여넣고, 이전 폴더를 삭제하고, 이전 이름으로 복사본 이름을 변경하면 끝입니다!

이것은 Linux에서도 작동해야 하며 프로젝트 폴더의 복사본을 만들 때 올바른 소유자와 함께 생성됩니다.

sudo chown -R [username]:[group directory]

그것은 저에게 정말 효과가 있습니다(맥북 에어 M1).

위의 오류/경고 메시지를 수신했을 뿐만 아니라 오류 경고로 인해 exec() 명령의 결과가 제공되지 않는 문제가 있었습니다.[2>&1을 끝에 추가하여 오류를 확인합니다.]

아래의 단계는 구성 파일을 /etc에 추가하고, 권한을 설정하고, 안전한 디렉토리를 추가했습니다.

touch /etc/gitconfig 
chown www-data:www-data /etc/gitconfig 
nano /etc/gitconfig

구성 파일의 내용

[safe] 
      directory = /var/www/YOURPATH

그게 해결했어요...원래 코드가 작동할 수 있습니다.

Jenkins 파일 선언 파이프라인에서 실행 중인 경우 스테이지 시작 시 아래 줄을 사용합니다.

sh(label: 'Git config safedir', 스크립트: "git config --global --add safe.directory ${env.WESTABLESS}", returnStdout: true)?다듬다 ()

env.WORKspace는 git checkout이 발생하는 작업 공간 dir입니다. 디렉토리에 .*를 사용하지 마십시오.

질문에 언급된 것과 동일한 문제가 발생했으며 아래의 문제도 발생했습니다.

오류: 치명적: 안전하지 않은 리포지토리(리포지토리는 다른 사람이 소유함)이 디렉터리에 대한 예외를 추가하려면 다음을 호출하십시오.

git config --global --add safe.directory repo

그러나 안전한 디렉토리로 repo를 추가하는 것은 ubuntu 18.04에서 작동하지 않았습니다.

창에 있는 소스 트리와 관련하여 답변에 추가하여, 저는 실행해야 했습니다.takeown명령행의 관리자로 지정합니다.

또한 DIR/Q를 사용하여 repo 폴더에 있는 모든 파일 및 폴더의 소유권을 확인하여 올바른 사용자로 소유권을 변경하는지 확인해야 했습니다.

원격 레포를 복제하고 해당 레포의 소유권과 사용 권한을 사용 중인 PC에서 복사한 다른 레포와 비교하여 확인하고 있었는데, Windows 탐색기의 보안 탭에 모든 것이 일치하는 것으로 나타났습니다.DIR/Q는 열 수 없는 저장소가 복제한 저장소와 다른 소유권을 가지고 있으며 액세스할 수 있음을 보여주었습니다.

위의 모든 솔루션은 다음 오류를 표시합니다.

could not lock config file */etc/gitconfig: Permission denied

이 솔루션으로 해결: https://dirask.com/posts/Git-git-config-error-could-not-lock-config-file-Permission-denied-Kj825D

다음 단계를 단계별로 따릅니다.

  • Git Bash를 관리자로 엽니다.
  • 프로젝트 디렉토리로 이동합니다. cd "C:\path\to\our\project\name"

명령 실행:

git config --system --unset credential.helper

Linux에서 sudo 명령을 사용하여 다음 명령을 실행합니다.

sudo git config --system --unset credential.helper

제 경우 폴더 소유권을 변경할 수 없었고 git config --global --addsafe.directory에서 수정하지 않았습니다.문제는 관리자로 실행되는 콘솔(승차 10)에서 폴더가 생성되고 Git가 일반 사용자 자격 증명으로 실행된다는 것입니다.관리자로 실행하지 않고 폴더 내용만 백업하고 삭제한 후 다시 만들었습니다.

위의 모든 답변을 시도해 보았지만 여전히 오류가 발생하고 있었습니다.답변과 단계는 정확했지만 PyCharm이 설치된 WSL(Windows Subsystem for Linux)에서는 작동하지 않았습니다.

그래서 WSL과 PyCharm 터미널을 제쳐두고 Windows PowerShell에서 명령을 실행했습니다.했습니다. .gitconfig 폴더는 .gitconfig 파일입니다. 폴더의 위치는\\wsl$\Ubuntu-20.04\home\user> 입한다음력을 입력합니다..gitconfigVisual Studio Code인 기본 텍스트 편집기를 엽니다.

인용문 없이 아래와 같이 디렉터리 경로를 업데이트했습니다.

directory = %(prefix)///wsl$/Ubuntu-20.04/home/user/project/mysite

를 " 터리를동설수있다습니정할게하일디렉다"로 할 수 .*모든 폴더를 안전으로 표시합니다.그 후, 저는 PyCharm의 캐시를 무효화했고, voila! 더 이상 오류가 없습니다.

누군가에게 도움이 되길 바랍니다.

모든 디렉토리를 safegit config --global --addsafe.directory *로 표시합니다.

언급URL : https://stackoverflow.com/questions/71901632/fatal-error-unsafe-repository-home-repon-is-owned-by-someone-else

반응형