SSH 사용자를 위한 chroot 환경을 설정하려고 하는데 QA에서 UT8 문자가 "?"로 대체된 것을 발견했습니다.
xstorenas>ls /mnt/hires/tsi/
??????????????????
하지만 간단한 for 루프를 수행하면 다음과 같습니다.
xstorenas>for f in /mnt/hires/tsi/*; do
echo $f;
done
/mnt/hires/tsi/рэпертуар
/etc/locale.conf 및 전체 /usr/share/locale을 사용할 수 있으며 LANG이 올바르게 설정되었습니다.
xstorenas>printenv LANG
en_US.UTF-8
따라서 chroot 환경에서 누락된 내용을 찾을 수 없습니다(chroot 환경 외부에서 예상대로 작동하기 때문입니다).
답변1
의 출력은 ls
로캘에 따라 다르며 로캘이 작동하려면 많은 지원 파일이 필요합니다. 감옥에 이러한 서류가 없을 수도 있습니다 chroot
. 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
[...]
chroot
이러한 파일을 감옥 에 복사하여 ls
작업할 수 있지만 로케일 파일로 인해 다양한 보안 취약점이 노출될 수 있으므로 이는 좋은 생각이 아닙니다. 아마도 ed 환경 ls
에서 실행할 필요는 없을 것입니다 chroot
.