Linux 시스템에서 "가상" 사용자/그룹 ID를 등록할 수 있습니까?

Linux 시스템에서 "가상" 사용자/그룹 ID를 등록할 수 있습니까?

실제로 로그인할 수 있는 시스템 계정을 만들지 않고도 사용자 이름을 사용자 ID에 연결하는 데 사용할 수 있는 표준화된 메커니즘이 Linux에 있습니까?

Windows 서버에 연결하고 사용자에게 UID를 제공하는 기능을 고려하면 이것이 가능해 보입니다. 일반적으로 더 높은 범위의 숫자에 있습니다.

나에게 필요한/원하는 것은 하위 ID로만 존재하는 그룹과 사용자에게 의미 있는 이름을 할당할 수 있는 것입니다().

관련된 일을 함으로써 이 일을 할 수 있다고 생각합니다.국가안전보위부(5)그런데 빈손으로 왔습니다.


일부 배경

사용자의 시각적 표현

호스트 시스템에서는 일반적으로 64k UID(및 GID)가 사용되지만 0..2^32-1범위는쓸 수 있는사용자 ID. 따라서 전체 범위 내의 하위 범위를 특정 사용자의 하위 ID로 할당할 수 있습니다. 예를 들어 범위가 루트 네임스페이스의 사용자 100000..2^32-1에게 할당되었다고 말할 수 있습니다 .root

LXC의 경우(), 루트 네임스페이스가 있는 사용자를 사용합니다.주인100000..165535및 하위 ID는 하위 네임스페이스에 매핑되므로 하위 네임스페이스 내 호스트의 UID 범위는 로 표시됩니다 0..65535.

따라서 파일 소유자는root ~에하위 네임스페이스는 UID 100000이 소유한 것으로 나타납니다.호스트에서.

따라서 실제로 사용자 계정을 만들지 않고도 호스트 시스템에서 이 "가상" UID 100000에 의미 있는 이름을 할당할 수 있다면 매우 도움이 될 것입니다.

이것이 내가 찾고 있는 것입니다.


지금은 해결 방법으로 이 도우미 스크립트를 사용하고 있습니다. StackExchange 또는 공개 도메인/CC0 약관에 명시된 약관에 따라 자유롭게 사용하세요.

#!/usr/bin/env bash
LXCPATH=$(lxc-config lxc.lxcpath)

function create-group
{
        local NAME=$1
        local GUEST=$3
        local GUESTCONF="/etc/lxc/guests/lxc.$GUEST.conf"
        local BASEID=$(awk '$1 ~ /^lxc\.id_map$/ && $3 ~ /^g$/ {print $5}' "$GUESTCONF" || echo "0")
        local ID=$(($2+$BASEID))
        echo "groupadd -g $ID $NAME"
}

function create-user
{
        local NAME=$1
        local GUEST=$3
        local GUESTCONF="/etc/lxc/guests/lxc.$GUEST.conf"
        local BASEID=$(awk '$1 ~ /^lxc\.id_map$/ && $3 ~ /^u$/ {print $5}' "$GUESTCONF" || echo "0")
        local ID=$(($2+$BASEID))
        echo "useradd -M -N -u $ID -s /usr/sbin/nologin $NAME"
}

function create-entry
{
        local GUEST=$1
        local DATABASE=$2
        local FUNCTION=$3
        local entry; local NAME; local ID
        for entry in $(awk -F : '{print $1 ":" $3}' "$DATABASE"); do
                NAME=$GUEST.${entry%:*}
                if getent ${DATABASE##*/} $NAME; then
                        echo "Entry $NAME (${DATABASE##*/}) already exists"
                else
                        $FUNCTION $NAME ${entry#*:} $GUEST
                fi
        done
}

for guest in $(lxc-ls -1); do
        create-entry $guest "$LXCPATH/$guest/rootfs/etc/group"  create-group
        create-entry $guest "$LXCPATH/$guest/rootfs/etc/passwd" create-user
done|sort -u|while read cmd; do
        echo "$cmd"
        $cmd
done

awk( mawk또는 gawk), bash, getent, groupadd, 가 필요합니다 useradd. 이 줄을 주석 처리하면:

        $cmd

실행할 모든 명령의 출력을 얻을 수 있습니다. 사용자 및 그룹 ID를 오름차순으로 추가합니다. 그러나 lxc.id_map항목이 LXC 게스트 이름을 딴 파일에 있고 파일 이름이 스키마를 따른다고 가정합니다 /etc/lxc/guests/lxc.${guestname}.conf. 이 설정을 조정하고 싶을 수도 있습니다.

게스트에 사용자를 추가하면 스크립트를 다시 실행할 수 있습니다.

이것은 것이다

관련 정보