Quais são as permissões corretas do Linux dentro do chroot jail com userspec?

1

Eu estou tentando configurar uma jaula chroot, então eu fiz:

which binary
ldd /bin/binary

Então eu fiz:

cp /lib64/{libs} $jail/lib64
cp /usr/lib64/{libs} $jail/usr/lib64

PS: Durante esta configuração, descobri que / lib64 precisa de permissões especiais r-x, apenas r-- não funcionará (dentro ou fora do chroot).

Binário copiado para $ jail, criado / home / jailuser.

Criou proc, dev, sys e montou-os.

Encontrado uid e gid para jailuser: users

Propriedade alterada do diretório principal:

chown jailuser:users
chmod 700 (for dirs)
chmod 600 (for files)

Propriedade alterada de outros arquivos para root: root e para as permissões, por favor, veja adiante.

Em seguida, sob a raiz entrou na cadeia:

export USER=jailuser (and I did the same with LOGNAME, HOME)
cd $jail
chroot --userspec=$uid:$gid $jail $jail/binary

Funcionou, mas:

Na minha caixa local, só trabalhei com todas as permissões de não jailuser como 005.

Em um VPS KVM, tentei o mesmo, mas a única permissão que funcionou foi 050!

Por favor, alguém sabe:

1) Por que o local funciona apenas com pelo menos 005 e o remoto só funciona com pelo menos 050 (os dois sistemas são os mesmos)?

2) Existe uma maneira melhor de configurar permissões dentro de uma jaula chroot? (Mas mantendo root: propriedade de root, então o usuário / processo não pode modificar arquivos de "sistema") ...

3) Existe uma maneira melhor de iniciar essa jaula como um usuário não privilegiado, além de usar a opção --userspec?

Obrigado!

    
por Weber K. 05.11.2015 / 00:42

1 resposta

0

Acho que consegui! Eu acho que às vezes o sistema precisa mudar para um usuário que está dentro do grupo raiz e precisa das libs (talvez system ou nobody?) E assim lib64 e usr / lib64 realmente precisam de pelo menos 050 permissões.

Meu script final para definir permissões é este (testado e funcionando):

#Create vars
u=jailuser
g=users
home=/home/$u
jail=$home/jail

#Set normal home
u=jailuser
g=users
cd $home
find . -type d -exec chown $u:$g {} +
find . -type f -exec chown $u:$g {} +
find . -type d -exec chmod 700 {} +
find . -type f -exec chmod 600 {} +

#Set jail
u=root
g=root
cd $jail
find . -type d -exec chown $u:$g {} +
find . -type f -exec chown $u:$g {} +
find . -type d -exec chmod 511 {} +
find . -type f -exec chmod 100 {} +

#Set lib64
cd $jail/lib64
find . -type f -exec chmod 555 {} +

#Set usr/lib64
cd $jail/usr/lib64
find . -type f -exec chmod 555 {} +


#Set binary
chmod 511 $jail/binary

#Set etc
chmod 544 $jail/etc/passwd
chmod 544 $jail/etc/group

#Set tmp
chmod 777 $jail/tmp

#Set jailed home
u=jailuser
g=users
cd $jail$home
find . -type d -exec chown $u:$g {} +
find . -type f -exec chown $u:$g {} +
find . -type d -exec chmod 700 {} +
find . -type f -exec chmod 600 {} +

cd $home
    
por 05.11.2015 / 04:58