LXC의 하위 GID/UID와 권한이 없는 사용자의 사용자가 있습니까?

LXC의 하위 GID/UID와 권한이 없는 사용자의 사용자가 있습니까?

사용자를 사용할 때(내 경우에는 LXC를 통해) 권한이 없는 사용자에게 일련의 하위 GID 및 UID를 할당합니다. 리소스 보기:subuid(5),subgid(5),newuidmap(1),newgidmap(1),user_namespaces(7).

그런 다음 범위를 사용할 수 있으며 전달됩니다.시스템 계정에 매핑합니다.

johnUID(및 GID) 1000을 가진 (호스트) 시스템 계정이 있다고 가정합니다 . 할당된 GID 및 UID 범위는 100000..165536입니다.

/etc/subgid따라서 및 각각에 대한 항목이 있습니다 /etc/subuid.

john:100000:65536

권한이 없는 컨테이너 내에서 "내부"가 소유한 파일은 john이제 호스트에서 101000이 소유하고 "내부"가 소유한 파일은 root100000이 소유하게 됩니다.

일반적으로 이러한 범위는 호스트의 어떤 이름에도 할당되지 않습니다.

질문:

  1. ls친구에게 더 의미 있는 출력을 제공하기 위해 호스트 시스템에서 이러한 각 UID/GID에 대한 사용자를 생성할 수 있습니까 ?
  2. john사용자를 "소유"하는 호스트 사용자(예: 우리의 경우) 가 이러한 파일/폴더에 액세스할 수 있도록 하는 방법이 있습니까 ? 그렇다면 하위 범위의 유효 사용자와 사용자의 "소유자" 간에 공유되는 그룹을 만들고 그에 따라 권한을 설정하는 것이 유일한 합리적인 접근 방식입니까? 음, 분명히 ACL입니다.

답변1

  1. ls와 친구들에게 더 의미 있는 출력을 제공하기 위해 해당 UID/GID에 대해 호스트 시스템에서 사용자를 생성할 수 있습니까?

네, 괜찮아요. 그러나 해당 사용자가 호스트 시스템의 어떤 항목에도 권한이 없는지 확인해야 합니다.

  • 액세스 또는 비밀번호 비활성화,
  • 사용 가능한 로그인 쉘이 없습니다.
  • 쓰기 가능한 홈 디렉토리가 없습니다.

또한 사용자 이름이 중복되지 않도록 주의하세요.

/etc/passwd다음은 게스트 와 /etc/group파일을 사용하여 호스트 시스템에서 적절한 사용자를 생성하는 샘플 스크립트입니다 . 모든 이름에는 컨테이너 이름이 접두어로 붙고 모든 ID는 컨테이너의 UID와 일치하도록 지정된 값으로 증가됩니다.

#! /bin/sh

# Path to guest's `/etc' directory.
guest_etc=/var/lib/lxc/mycontainer/rootfs/etc
# Guest's name, used as login prefix and inside GECOS field.
guest_name=mycontainer
# Increment to be applied to UIDs and GIDs (= range start).
uid_incr=100000
gid_incr=$uid_incr

guest_passwd=${guest_etc}/passwd
guest_group=${guest_etc}/group

exec <$guest_group
while IFS=":" read name pass gid null; do
    gid_new=$( expr $gid + $gid_incr )
    if ! getent group $gid_new >/dev/null; then
        addgroup --system --gid $gid_new "${guest_name}_${name}"
    fi  
done

exec <$guest_passwd
while IFS=":" read login pass uid gid gecos null; do
    uid_new=$( expr $uid + $uid_incr )
    gid_new=$( expr $gid + $gid_incr )
    if ! getent passwd $uid_new >/dev/null; then
        adduser --system --home /nonexistent --no-create-home \
            --shell /bin/nologin --uid $uid_new --gid $gid_new \
            --gecos "\"$guest_name container user (${gecos})\"" \
            "${guest_name}_${login}"
    fi  
done

액세스할 수 없는 홈 디렉토리에 대한 경고는 정상적이고 예상되는 것입니다. 이는 /nonexistent실제 목적이 아닙니다.

  1. 사용자를 "소유"하는 호스트 사용자(예: 이 예에서는 John)가 이러한 파일/폴더에 액세스할 수 있도록 하는 방법이 있습니까? 그렇다면 하위 범위의 유효 사용자와 사용자의 "소유자" 간에 공유되는 그룹을 만들고 이에 따라 권한을 설정하는 것이 유일한 합리적인 접근 방식입니까? 음, 분명히 ACL입니다.

내 생각에는 이것은 그 자체로 질문을 받을 가치가 있다.

컨테이너의 콘텐츠는 컨테이너 소유자의 UID와 다른 UID가 소유하므로 콘텐츠에 액세스할 수 없습니다. 하위 사용자에 대한 이 규칙에 예외가 있다고 상상할 수 있지만 현재는 모르겠습니다.관련된 질문시간이 좀 지났는데 아직 답변이 없네요.)

파일 /etc/subuid이며 현재 특정 프로세스가 하나의 UID/GID에서 다른 UID/GID로 전환하는 것을 허용하거나 거부하기 위해 /etc/subgid(1)에서만 사용됩니다 . newuidmap목장 주인에게 다른 권리를 부여하지 않습니다.

따라서 솔루션은 사례별로 설계되어야 합니다. 그러나 ACL 아이디어에 주의하세요. 호스트의 UID 1000이 읽을 수 있도록 컨테이너의 파일에 일부 ACL을 배치한다고 가정하면 이는 컨테이너의 UID 1000의 컨테이너 사용자도 동일한 수준의 권한을 갖게 된다는 것을 의미합니다.

관련 정보