Запуск программы через chroot-тюрьму выдает ошибку о кодировании?

Это, скорее всего, относится к локали, в которых символы верхнего и нижнего регистра упорядочены в чередовании, а не сначала один, затем другой:

$ echo "$LANG"
en_US.UTF-8
$ touch a A z Z
$ ls
A  Z  a  z
$ bash -c 'echo [a-z]'
a A z

Тем не менее, соответствующий класс символов работает:

$ bash -c 'echo [[:lower:]]'
a z

Но может также совпадать не только с aпоz:

$ LANG=fi_FI.UTF-8
$ touch ä Ä ö Ö
$ bash -c 'echo [[:lower:]]'
a z ä ö

Если вы хотите избежать этого и сопоставлять только английские строчные буквы от aдо z, Bash, в частности, имеет возможность интерпретировать диапазоны в порядке ASCII:

$ bash -c 'shopt -s globasciiranges; echo [a-z]'
a z

И вы всегда можете установить порядок сортировки по умолчанию:

$ LC_COLLATE=C bash -c 'echo [a-z]'
a z

Что касается того, что говорит POSIX, мне кажется, что диапазоны выражений в квадратных скобках остаются неопределенными в локалях, отличных от POSIX по умолчанию. Описание сопоставления с образцом относится к описанию регулярных выражений скобочных выражений , в котором говорится:

In the POSIX locale, a range expression represents the set of collating elements that fall between two elements in the collation sequence, inclusive. In other locales, a range expression has unspecified behavior: strictly conforming applications shall not rely on whether the range expression is valid, or on the set of collating elements matched.

0
11.01.2020, 20:41
1 ответ

Вместо chroot используйте контейнер, например docker (есть много других):

  • Он делает больше :chroot, изоляцию пространства имен, cgroups и т. д.
  • Он сделает это за вас.
  • Для докера есть готовые -встроенные образы.

Как бы то ни было, я вижу, что вы просите, чтобы это было легче решить с помощью простой изоляции пользователей. :Отдельная учетная запись для каждого пользователя. Затем вы можете дополнить это обязательным -доступом -контролем (, например. броня приложения ).

Однако все это усложняется тем, что вы используете WSL. WSL — это Gnu/Linux для MS -Windows. WSL — это Gnu/Linux с заменой Linux. Я не уверен, что WSL2 намного лучше. Все, что мы обсуждаем, сделано в Linux-части Gnu/Linux, и в наибольшей степени склонно не работать (или работать по-другому ), если не работает настоящая система Gnu/Linux. Общая файловая система -— большая область несовместимости. Это затрудняет использование прав доступа к файлам, чтобы разделить пользователей.

Я слышал, что Docker работает на MS -Windows, я думаю, он делает это, помещая Gnu/Linux в виртуальную машину (, но я не уверен ).

1
28.01.2020, 02:38

Теги

Похожие вопросы