Skip to content

다중 사용자 모드

다중 사용자간 닉스 저장소 공유를 안전하게 허용하기 위해, 닉스 저장소나 데이터베이스를 임의의 방법으로 수정하거나 다른 사용자에 의해 시작된 빌드 과정을 방해하는 빌더를 실행하는 것은 불가능하게 만드는 것이 중요합니다. 만약 그게 가능했다면, 트로잔 공격이 가능한 패키지를 심어 타인의 계정을 무력화할 수 있게 됩니다.

이를 방지하고자, 닉스 저장소나 데이터베이스는 일부 권한 있는 사용자(통상적으로 root)가 소유하고, 빌더는 특별 사용자 계정(통상적으로 nixbld1, nixbld2 등의 이름이 부여됨)으로 실행됩니다. 권한 없는 사용자가 닉스 명령어를 실행하면, (빌더와 같이) 닉스 저장소에서 작동해야하는 기능은 닉스 데몬 에게 넘겨져 닉스 저장소/데이터베이스에 접근하여 해당 기능을 수행할 수 있는 소유자 아래에서 동작합니다.

주의

다중 사용자 모드는 한가지 주요한 제한 사항이 있습니다: 오직 루트와 nix.conf에 명시된 일부 신뢰받는 사용자 집단만이 임의의 바이너리 캐시를 활용할 수 있다는 점입니다. 따라서 권한 없는 사용자가 임의의 닉스 표현식을 통해 패키지를 설치할지라도 이미 빌드된 바이너리를 얻을 수는 없습니다.

빌드 사용자 설정

빌드 사용자란 특정 빌드가 수행될 특별한 UID를 말합니다. 빌드 사용자들은 반드시 빌드 사용자 그룹nixbld의 구성원이어야 합니다. 이 그룹은 다른 구성원은 절대로 가져서는 안됩니다. 빌드 사용자는 다른 그 어떤 그룹에도 속해서는 안됩니다. 리눅스에서는, 그러한 그룹과 사용자를 다음 명령을 통해 만들 수 있습니다.

$ groupadd -r nixbld
$ for n in $(seq 1 10); do useradd -c "Nix build user $n" \
    -d /var/empty -g nixbld -G nixbld -M -N -r -s "$(which nologin)" \
    nixbld$n; done

이 과정은 10개의 빌드 사용자를 생성합니다. 빌드 사용자의 개수보다 많은 수의 동시 수행 빌드(concurrent build)는 불가능하므로, 동시에 더 많은 빌드 작업을 수행하고자 한다면 이 숫자를 늘려야 합니다.

데몬 실행

Nix 데몬은 다음 명령을 통해 실행되어야만 합니다(root 계정으로):

$ nix-daemon

시스템 부트 스크립트 어딘가에 해당 명령을 집어넣어두는게 편할 수도 있습니다.

권한 없는 사용자가 데몬 실행하는 것을 허가하고자 한다면, NIX_REMOTE 환경 변수daemon으로 설정해야 합니다. 따라서 다음 줄을

export NIX_REMOTE=daemon

해당 사용자 로그인 스크립트에 입력합니다.

접근 제한

어떤 사용자가 닉스 기능을 수행할 수 있는지 제한하고자 한다면, /nix/var/nix/daemon-doxket디렉터리의 권한 설정을 사용합니다. 예를 들어, 닉스 명령어를 nix-users 그룹의 사용자에게만 제한하고자 한다면,

$ chgrp nix-users /nix/var/nix/daemon-socket
$ chmod ug=rwx,o= /nix/var/nix/daemon-socket

를 수행합니다.

이 방법으로 nix-users그룹에 속하지 않는 사용자는 /nix/var/nix/daemon-socket/socket 유닉스 데몬 소켓에 접근할 수 없게 되고, 따라서 닉스 명령을 수행할 수 없게 됩니다.


Last update: November 4, 2021
Back to top