É possível registrar IDs de usuários / grupos “virtuais” em um sistema Linux?

2

Existe um mecanismo padronizado no Linux que pode ser usado para vincular nomes de usuários a IDs de usuário sem realmente criar uma conta do sistema que possa efetuar login?

Parece que algo assim é possível, uma vez que existe a capacidade de se conectar a um servidor Windows e fornecer UIDs aos usuários. Geralmente em um intervalo alto de números.

O que eu preciso / quero isso é ser capaz de atribuir nomes significativos a grupos e usuários que só existem como IDs subordinados ().

Eu acho que isso poderia ser feito com algo relacionado a nss (5) mas veio de mãos vazias.

Um pouco de fundo

Nosistemahost,geralmente,UIDs(eGIDs)de64kestãoemuso,mas0..2^32-1éointervalodeIDsdeusuáriodisponíveis.Assim,podemosatribuirsub-intervalosdesseintervalogeralcomoIDssubordinadosparadeterminadosusuários.Porexemplo.poderíamosdizerqueointervalo100000..2^32-1éatribuídoaousuáriorootnonamespaceraiz.

EmtermosdeLXC(

Consequentemente, os arquivos pertencentes a root dentro do namespace filho aparecerão como pertencentes ao UID 100000 no host .

Portanto, seria útil se eu pudesse atribuir um nome significativo a este "virtual" UID 100000 no sistema host sem realmente ter que criar uma conta de usuário.

É isso que estou procurando.

Agora, estou usando este script auxiliar como solução alternativa. Sinta-se à vontade para usá-lo nos termos prescritos pelos termos StackExchange ou Public Domain / 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

Requer awk ( mawk ou gawk ), bash , getent , groupadd , useradd . Se você comentar a linha:

        $cmd

você simplesmente obterá a saída de todos os comandos que, de outra forma, executaria. Adiciona os IDs de usuário e grupo em ordem crescente. No entanto, supõe-se que a entrada lxc.id_map esteja em um arquivo com o nome do convidado LXC com o nome do arquivo seguindo o esquema /etc/lxc/guests/lxc.${guestname}.conf . Você pode querer ajustar essa configuração.

Você pode executar novamente o script se adicionar usuários aos convidados.

Isso vai

    
por 0xC0000022L 28.02.2015 / 22:33

0 respostas