- Is it alright to create a user for those respective UIDs/GIDs on the host in order to have a more meaningful output for ls and friends?
Sim, está tudo bem. No entanto, você deve garantir que esse usuário não tenha nenhum direito sobre qualquer coisa no sistema host:
- Acesso ou senha desativados,
- Nenhum shell de login utilizável,
- Não há diretório inicial gravável.
Certifique-se também de não criar duplicatas nos seus nomes de usuário.
Aqui está um exemplo de script, pegando os arquivos /etc/passwd
e /etc/group
do convidado para criar os usuários correspondentes no sistema host. Todos os nomes são prefixados com o nome do contêiner e todos os IDs são aumentados usando o valor fornecido para corresponder aos UIDs do contêiner:
#! /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
Os avisos sobre o diretório inicial inacessível são normais e esperados: este é o objetivo real de /nonexistent
de não existir.
- is there a way to make those files/folder accessible to the host user who "owns" the userns, i.e. john in our case? And if so, is the only sensible method to create a group shared between those valid users inside the subordinate range and and the userns "owner" and set the permissions accordingly? Well, or ACLs, obviously.
Isso deve valer uma pergunta separada da IMO.
Como o conteúdo do contêiner é de propriedade de diferentes UIDs que o UID do proprietário do contêiner, ele não é acessível a ele. Posso imaginar uma exceção a essa regra para subusuários, mas atualmente não tenho conhecimento de nenhuma (criei uma pergunta relacionada há pouco tempo, mas ainda sem respostas).
Os arquivos /etc/subuid
e /etc/subgid
são atualmente usados apenas por newuidmap
(1) para permitir ou negar a alternância de um UID / GID para outro de um determinado processo. Não dá ao proprietário do intervalo qualquer outro direito.
Portanto, a solução para esse problema deve ser projetada caso a caso. Cuidado com a sua idéia de ACL: digamos que você coloque algumas ACLs nos arquivos do contêiner para permitir que o UID 1000 do seu host as leia, isso significa que o usuário do contêiner com o contêiner UID 1000 também terá o mesmo nível de privilégio ...