빌드 시스템에 사용자가 없어도 데비안 패키지를 빌드할 때 사용자를 설정할 수 있나요?

빌드 시스템에 사용자가 없어도 데비안 패키지를 빌드할 때 사용자를 설정할 수 있나요?

로컬로 빌드하고 싶은 패키지가 있습니다. 패키지의 특정 파일은 해당 사용자가 처음 생성된 시스템에 설치됩니다. 이러한 파일은 이 사용자가 소유해야 합니다.

/usr/share/foo/protected.file예를 들어, 내 서버에 "foo"라는 사용자가 있고 권한이 있는 파일 u=r(즉, 해당 사용자만 파일을 읽을 수 있음)이 포함된 패키지 를 생성한다고 가정해 보겠습니다 .

내 파일에서 수행하려는 작업은 debian/rules다음과 같이 설정됩니다.

override_dh_fixperms:
    dh_fixperms
    ...
    chmod 400 debian/foo/usr/share/foo/protected.file
    chown foo:foo debian/foo/usr/share/foo/protected.file
    ...

내 문제는 패키지를 빌드하는 데 사용하는 컴퓨터에 "foo"라는 사용자가 없어서 chown실패한다는 것입니다. 나는 그 컴퓨터에 "foo" 사용자를 생성하고 싶지 않습니다.

빌드 프로세스 중에 이 작업을 수행할 수 있는 방법이 있습니까(즉, 결과 .tar 파일을 해킹할 수 있다는 것을 알고 있지만 그러고 싶지는 않습니다).


다음 명령을 사용하여 로컬 빌드를 실행합니다.

dpkg-buildpackage -us -uc

답변1

기술적으로 말하자면, 원하는 방식으로 패키지를 구축할 수 있습니다. 파일 에 관한 한 , 패키지 구축의 마지막 단계에서 예상되는 모든 것은 .deb상위 디렉터리에 debian/rules binary올바른 이름을 가진 유효한 파일이 남아 있는 것입니다 . .deb따라서 dh_builddeb존재하지 않는 사용자가 소유한 파일로 tarball을 생성하도록 재정의할 수 있습니다.

그러나 비표준 사용자를 다루는 데비안 패키지는 이를 수행하지 않습니다. postinst거기에서 사용자 생성도 처리합니다. 사용자가 존재하지 않으면 실행하기 전에 생성합니다 chown. 이렇게 하면 기존 사용자에 관계없이 패키지를 설치할 수 있습니다.

귀하의 의견에서 언급한 경쟁 조건은 실제로 중요하지 않습니다. dpkg -i성공하면 파일이 dpkg -i완료되기 전에 올바른 소유권을 갖게 되며, 실패하면 패키지를 사용할 수 없는 것으로 간주되어야 합니다.

답변2

소유자를 이름으로 변경 하지 않으면 chown숫자(이름이 매핑되는 UID)로 변경됩니다.

대상 시스템에서 특정 UID(및 GID)를 사용하여 사용자를 생성하고 해당 숫자를 사용하도록 명령을 변경해야 할 수도 있습니다.

chown 9876:9876 debian/foo/usr/share/foo/protected.file

관련 정보