AppArmor вызывает сбои Firefox

В:

cat test.txt | while read i; do echo $i; done

Вам удалось втиснуть довольно много плохих приемов написания сценариев оболочки:

Хотя я, вероятно, сначала должен был упомянуть Почему использование цикла оболочки для обработки текста считается плохой практикой? .

Попробуйте, например, ввести такой ввод:

-n
/*/*/*/../../../*/*/*
  foo\
bar

Если вам действительно нужно использовать цикл оболочки, это, вероятно, должно быть что-то вроде:

{
while IFS= read <&3 -r i; do
  printf '%s\n' "$i" || exit
done
[ -z "$i" ] || printf %s "$i" || exit
} 3< test.txt

В

for i in $(cat test.txt); do echo $i; done

Это заменяет плохую практику другим. Здесь у вас есть веская причина оставить $ (cat test.txt) без кавычек: вам нужна разделенная часть оператора split + glob, но вы забыли указать, что вы хотите разделить и чтобы отключить глобальную часть.

IFS='
' # split on newline only. The default value of $IFS
  # contains space, tab and newline which explains why you see
  # one word per line
set -o noglob # disable glob
for i in $(cat test.txt); do
  printf '%s\n' "$i" || exit
done

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

2
02.08.2016, 13:03
1 ответ

Мне удалось решить проблему. Я сделал это, отредактировав / etc / default / grub и изменив GRUB_CMDLINE_LINUX с

GRUB_CMDLINE_LINUX=" apparmor=1 security=apparmor"

на

GRUB_CMDLINE_LINUX=""

. Затем после запуска sudo update grub и sudo reboot проблема была исправлена . Однако это остановило работу apparmor, так как выдает ошибку:

apparmor.common.AppArmorException: 'Предупреждение: не удалось найти подходящую файловую систему в / proc / mounts, она смонтирована? \ NИспользуйте --subdomainfs для переопределения. \ N '

Однако мне удалось решить эту проблему, снова используя команды из руководства по debian.

sudo perl -pi -e 's,GRUB_CMDLINE_LINUX="(.*)"$,GRUB_CMDLINE_LINUX="$1 apparmor=1 security=apparmor",' /etc/default/grub
sudo update-grub
sudo reboot

После перезагрузки я попытался запустить firefox и не получил никаких ошибок, теперь все работает нормально. Однако, попробовав его на своем компьютере, я снова столкнулся с проблемой segfault, и это исправление не сработало. но после сравнения профилей apparmor в /etc/apparmor.d я обнаружил, что правила профилей были другими.

Правила для segfaulting pc:

# Last Modified: Tue Aug  2 11:32:25 2016
#include <tunables/global>

/usr/lib/firefox/firefox {
  #include <abstractions/base>

  /usr/bin/firefox r,

}

Правила для рабочего компьютера:

# Last Modified: Tue Aug  2 11:32:25 2016
#include <tunables/global>

/usr/bin/firefox {
  #include <abstractions/base>
  #include <abstractions/bash>

  /bin/dash ix,
  /usr/bin/firefox r,

}

Я добавил #include и / bin / dash ix, в конфигурацию файл, затем изменил путь на / usr / bin / firefox , и теперь проблема устранена после перезагрузки.

0
27.01.2020, 22:45

Теги

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