파일을 추출하는 데 사용되는 명령에 관계없이 파일이 추출되는 위치를 tarball에서 변경할 수 있습니까?

파일을 추출하는 데 사용되는 명령에 관계없이 파일이 추출되는 위치를 tarball에서 변경할 수 있습니까?

내 동료 중 한 명은 타르볼을 추출할 때 자신도 모르는 사이에 변경 사항이 발생할 수 있으므로 주의해야 한다고 말했습니다. 나는 항상 타르볼이 압축된 파일의 계층일 뿐이라고 생각했습니다. 그래서 /tmp/example/에 압축을 풀면 파일을 /etc/나 그와 비슷한 곳에 몰래 넣을 수는 없습니다.

답변1

이와 관련하여 다양한 tar 유틸리티가 다르게 동작하므로 주의하는 것이 가장 좋습니다. 생성하지 않은 tar 파일의 경우 압축을 풀기 전에 디렉터리를 나열해야 합니다.

솔라리스 타르:

tar파일에서 지정된 파일을 추출하여 현재 디렉터리를 기준으로 tarfile에 지정된 디렉터리에 씁니다. 추출하려는 파일 및 디렉토리에 대한 상대 경로 이름을 사용하십시오.

tar 아카이브에 포함된 절대 경로 이름은 절대 경로 이름을 사용하여 압축이 풀립니다. 즉, 선행 슬래시(/)를 제거하지 않습니다.

전체(절대) 경로 이름이 있는 tar 파일의 경우 예를 들면 다음과 같습니다.

/tmp/real-file
/etc/sneaky-file-here

...이와 같은 파일을 추출하면 결국 이 두 파일이 됩니다.

GNU 타르:

기본적으로 GNU tar는 입력 또는 출력에서 ​​선행 문자를 제거하고 /구성 요소가 포함된 파일 이름에 대해 불평합니다 ... 이 동작을 끄는 옵션이 있습니다.

--absolute-names

-P

파일 이름에서 선행 슬래시를 제거하지 말고 파일 이름에 ..파일 이름 구성 요소가 포함되도록 허용하십시오.

...GNU tar를 사용하여 전체 경로 tar 파일을 추출하는 경우아니요-P옵션을 사용하면 다음 내용이 표시됩니다.

/tar: 멤버 이름에서 선행 제거

현재 디렉터리의 하위 디렉터리에 파일을 추출합니다.

AIX 타르:

이에 대해 아무 말도 하지 않으며 Solaris tar와 동일하게 작동합니다. 전체/절대 경로 이름을 가진 tar 파일을 생성하고 추출합니다.

HP-UX 타르: (더 나은 온라인 참조를 환영합니다)

경고하다

절대 경로 이름을 상대 위치로 복원할 수 없습니다.

OpenBSD 타르:

-P

/경로 이름에서 선행 슬래시( )를 제거 하지 마십시오 . 기본값은 선행 슬래시를 제거하는 것입니다.

일부 옵션은 macOS, FreeBSD 및 NetBSD에서도 동일한 의미로 구현됩니다 -P.tartarFreeBSD..없는 경우 .-P

힐리 툴 스타:

-/

아카이브를 추출할 때 파일 이름에서 선행 슬래시를 제거하지 마십시오. 절대 경로 이름을 포함하는 Tar 아카이브는 일반적으로 좋은 생각이 아닙니다. 다른 tar 구현을 사용하면 기존 파일을 삭제하지 않고는 추출할 수 없습니다. 따라서 추출 모드에서는 기본적으로 파일 이름에서 선행 슬래시가 제거됩니다.

답변2

일어난 흥미로운 일 중 하나타르 폭탄현재 디렉토리의 권한을 tarball에 포함된 권한으로 변경하는 것은 바로 이들입니다.

예를 들어, tarball에 "." 디렉토리가 포함되어 있고 이를 루트로 /tmp에 추출하면 루트 외에는 /tmp에 쓸 수 없게 되어 시스템이 손상됩니다.

관련 정보