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

awkmawkまたはgawk)、、、、、bashgetent必要groupaddですuseradd。この行をコメントアウトすると:

        $cmd

実行するすべてのコマンドの出力を取得できます。ユーザーとグループIDを昇順に追加します。ただし、lxc.id_mapエントリがLXCゲスト名を付けたファイルにあり、ファイル名がスキーマに従うと仮定します/etc/lxc/guests/lxc.${guestname}.conf。この設定を調整したい場合があります。

ゲストにユーザーを追加すると、スクリプトを再実行できます。

これは

関連情報