Chroot
在 chrooted 環境中,ls 命令顯示“?”而不是 UTF8 字元
我正在嘗試為 ssh 使用者設置 chrooted 環境,但我們的 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
因此,我找不到 chrooted env 中缺少的內容(因為它在 chrooted env 之外按預期工作)。
的輸出
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
工作,但這不是一個好主意,因為語言環境文件可能會使您面臨各種安全漏洞。一開始您可能不需要ls
在chroot
ed 環境中執行。