Em um env chrooted, o comando ls mostra “?” em vez de caracteres UTF8

2

Estou tentando configurar um env chrooted para usuários ssh, mas nosso QA descobre que os caracteres UT8 foram substituídos por "?":

xstorenas>ls /mnt/hires/tsi/
??????????????????

Mas quando eu faço um loop for simples:

xstorenas>for f in /mnt/hires/tsi/*; do 
    echo $f; 
done
/mnt/hires/tsi/рэпертуар

Eu tenho um /etc/locale.conf e um / usr / share / locale completo disponível e o LANG está configurado corretamente:

xstorenas>printenv LANG
en_US.UTF-8

Portanto, não encontrei o que está faltando no env chrooted (já que está funcionando como esperado fora do env chrooted).

    
por ThoSil 05.09.2016 / 12:07

1 resposta

2

A saída de ls depende das localidades e as localidades precisam de uma pilha de arquivos de suporte para funcionar. Você provavelmente não possui esses arquivos na sua chroot jail. Exemplo no Linux:

$ strace -eopen ls >/dev/null
[...]
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/en_US.UTF-8/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/en_US.utf8/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/gconv/gconv-modules", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/en_US.UTF-8/LC_MEASUREMENT", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/en_US.utf8/LC_MEASUREMENT", O_RDONLY|O_CLOEXEC) = 3
[...]

Você pode copiar esses arquivos para a chroot jail para fazer ls funcionar, mas isso não é uma ótima ideia, pois os arquivos de localidade podem abrir várias explorações de segurança. Você provavelmente não precisará executar ls em um ambiente chroot ed para começar.

    
por 05.09.2016 / 13:38