Dependendo da configuração, processos sem privilégios (não raiz) podem criar um namespace de usuário.
RLIMIT_NPROC
limita o número de processos por usuário .
Se eu inserir um namespace de usuário, posso criar processos com UIDs diferentes e, portanto, exceder meu real RLIMIT_NPROC
?
Há um princípio geral de que ter namespaces não oferece privilégios adicionais. Não há nada que você possa fazer com o resto do sistema com vários namespaces que você não poderia fazer com um único namespace. O que os namespaces oferecem é a capacidade adicional de aplicar restrições adicionais a alguns de seus processos.
RLIMIT_NPROC
é o número máximo de processos que você pode criar. Se alguns desses processos estiverem em namespaces, eles podem ter menos privilégios, mas ainda contam como um processo. Todos esses processos são processos nos namespaces externos, de qualquer maneira. Eles podem ter UIDs diferentes dentro do namespace, mas fora do namespace, eles são seus processos.Não parece.
De forma similar:
A execução
ulimit -u 1000
internaunshare -r
não afeta meu usuário fora do namespace do usuário. Ah - isso porqueulimit -u
sempre define um limite dentro do processo. Mas quando o limite é verificado em fork() , comparamos o RLIMIT_NPROC desse processo, com o número total de processos do UID "real", ou seja, do ponto de vista do namespace "raiz".Então, tanto quanto eu posso ver, tudo isso funciona muito bem.
Aliás, notei que você não pode usar namespaces de usuário para criar processos com vários UIDs diferentes, se você não for privilegiado.
As regras para este aspecto são explicadas, por exemplo, por Michael Kerrisk em Namespaces em operação, parte 5: User namespaces .