소스에서 애플리케이션을 설치하는 마지막 단계에서 루트로 make 실행을 방지하려면 어떻게 해야 합니까? [복사]

소스에서 애플리케이션을 설치하는 마지막 단계에서 루트로 make 실행을 방지하려면 어떻게 해야 합니까? [복사]

make install저는 소스에서 애플리케이션을 설치하는 마지막 단계로 루트로 실행하는 것을 항상 꺼려합니다 . 결국 Makefile에서 임의의 코드를 실행할 수 있습니다. 적절한 인용 부족으로 인해 Makefile 명령이 소스 코드 디렉토리 외부의 파일을 포함하여 있어서는 안되는 항목을 삭제하는 상황에 직면했습니다.

make install그래서 저는 루트로 실행하는 것을 피하고 루트로서의 활동을 임의의 코드를 실행하지 않는 기본 작업(예: 파일 복사 또는 아카이브 추출)으로 제한하는 방법을 찾고 있습니다 .

답변1

검색을 한 후에 대부분의 소스 패키지(적어도 autotools 또는 cmake를 사용하는 패키지)는 컴파일에 사용된 PREFIX와 다른 디렉토리에 설치를 허용한다는 사실을 발견했습니다. DESTDIR 환경 변수에 원하는 위치를 지정하기만 하면 됩니다.

나는 결국 다음을 수행했습니다.

firejail --x11=none --net=none --whitelist="$PWD" # Enter sandbox
./configure # (or similar)
make
DESTDIR=dest make install # install application into dest
exit # from firejail

pkgname="$(basename "$PWD")" # (or specify desired package name manually)
fakeroot tar czf "$pkgname.tgz" -C dest . # pack the installed files into a .tgz archive
fakeroot alien --version=$(date +%F) -k "$pkgname.tgz" # create a .deb package from the .tgz archive

패키지를 즉시 설치하는 sudo alien -i대신 마지막 명령에서 사용할 수도 있습니다 . fakeroot alien또는 애플리케이션을 패키지로 변환하지 않으려는 경우 alien마지막 줄(호출)을 sudo tar xzf "$pkgname.tgz" -C /루트로 패키지 추출로 바꿀 수 있습니다.

다음은 참고할 몇 가지 사항입니다.

  • 잠재적으로 유해한 명령을 루트로 실행하는 것을 단순히 피하는 대신 컴파일 및 설치가 샌드박스 내에서 수행되므로 더 안전합니다(그러나 전적으로 선택 사항).
  • 나는 이것을 포기 checkinstall하고 사용했는데 alien, 이는 파일 작업을 관찰하고 되돌리기 위해 추악하고 신뢰할 수 없는 해킹에 의존하지 않기 때문에 약간 더 깨끗하고 안전한 솔루션입니다.

관련 정보