AppArmor: возможно ли несколько профилей для каждого приложения (Firefox, Thunderbird)? Синтаксис?

Решенный с

./configure --with-ffmpeg=/usr/local/cpffmpeg
4
12.06.2015, 20:15
4 ответа

По какой-то причине /usr/bin/vi работает неправильно на вашем компьютере, как вы можете сказать из сообщения об ошибке:

crontab: "/usr/bin/vi" exited with status 1

Что произошло, так это то, что при выходе vi создается код ошибки. Когда crontab увидит, что vi вышел с кодом ошибки, он не будет доверять содержимому файла vi , который редактировался, и просто не внесет никаких изменений в ваш crontab.

Вы можете попытаться выяснить, почему vi не работает, или, если вы предпочитаете, вы можете использовать совершенно другой редактор. Например, если вы предпочитаете использовать vim , вы можете ввести:

EDITOR=/usr/bin/vim crontab -e

Или вы можете сохранить «официальную» версию вашего crontab в вашем домашнем каталоге. Затем отредактируйте версию в домашнем каталоге и, наконец, установите ее с помощью:

crontab filename
-121--68319-

Используйте -n вместо -p :

perl -ne 'print unless /[0-5],[0-5]?|[0-5].,[0-5]?/' file

-n .

Я не уверен, какова ваша цель, так что вам, возможно, потребуется изменить регрессы, но общий подход должен сработать.

-121--229397-

AppArmor работает с помощью исполняемого файла. Он не может выяснить, что Firefox загрузил другой профиль и поэтому он должен использовать другой профиль AppArmor.

AppArmor поддерживает правила изменения , которые позволяют приложению изменять профиль . Сценарий использования предназначен именно для того, чтобы позволить приложению переключиться на более ограничительный профиль после завершения инициализации и выяснить, к чему ему необходим доступ в данном конкретном экземпляре. Таким образом, если бы Firefox знал AppArmor, можно было бы дать ему изменить правило _ профиля и применить переход, как только он выяснит, какой профиль будет запущен как. Насколько я знаю, этого не было сделано.

Без программирования можно создать несколько копий или жестких ссылок исполняемого файла firefox-bin и определить различные профили для каждого из них (AppArmor основан на пути к исполняемому файлу, поэтому разные жесткие ссылки не должны использовать один и тот же профиль, в отличие от SELinux, который основан на inodes). Это требует root и не так удобно, поэтому функция профиля изменений была добавлена в AppArmor.

3
27.01.2020, 20:55

От man bash :

  • set -u
    • При выполнении расширения параметров в качестве ошибки обрабатываются неснятые переменные и параметры, отличные от специальных параметров «@» и «*» . При попытке расширения для неснятой переменной или параметра оболочка печатает сообщение об ошибке и, если не -i nteractive, завершает работу с ненулевым состоянием.

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

  • Последствия ошибок оболочки :
    • Ошибка расширения возникает, когда расширения оболочки, определенные в Word Expansions , выполняются (например, «$ {x! y}» , потому что ! не является допустимым оператором) ; реализация может рассматривать их как синтаксические ошибки, если она способна обнаружить их во время токенизации, а не во время расширения.
    • [A] n интерактивная оболочка должна писать диагностическое сообщение о стандартной ошибке без выхода.

Также от man bash :

  • ловушка... ERR
    • Если sigspec имеет значение ERR , команда arg выполняется всякий раз, когда конвейер (который может состоять из одной простой команды) , список или составная команда возвращает ненулевой статус выхода при соблюдении следующих условий:
      • Ловушка ERR не выполняется, если неудачная команда является частью команды перечислять сразу после , пока или до ключевого слова...
      • ... часть теста в , если утверждение...
      • ... часть команды, выполняемая в списке & & или | | , за исключением команды, следующей за последним & & или | | ...
      • ... любая команда в конвейере, но последняя...
      • ... или если возвращаемое значение команды инвертируется с помощью ! .
    • Это те же самые условия, которым подчиняется опция errexit -e .

Обратите внимание на то, что ловушка ERR предназначена для оценки возврата некоторых других команд. Однако при возникновении ошибки расширения выполнение команды на возврат данных не выполняется. В примере echo никогда не происходит - потому что пока оболочка вычисляет и расширяет свои аргументы, она встречает переменную -u nset, которая была задана явным параметром оболочки, чтобы вызвать немедленный выход из текущей оболочки со сценарием.

Таким образом, выполняется ловушка EXIT , если таковая имеется, и оболочка выходит с диагностическим сообщением и состоянием выхода, отличным от 0 - точно так же, как и должно.

Что касается rc: 0 , то я ожидаю, что это какая-то специфическая для версии ошибка - вероятно, связанная с двумя триггерами для EXIT , происходящими одновременно, и с одним, получающим код выхода другого (который не должен происходить) . И в любом случае, с актуальным бинарным bash , как установлено pacman :

bash <<\IN
    printf "shell options:\t$-\n"
    trap 'echo "EXIT (rc: $?)"' EXIT
    set -eu
    echo ${UNSET_VAR}
IN

я добавил первую строку, чтобы вы могли видеть, что условия оболочки являются таковыми для сценарной оболочки - она не интерактивна. Вывод:

shell options:  hB
bash: line 4: UNSET_VAR: unbound variable
EXIT (rc: 1)

Вот некоторые релевантные примечания из последних изменений :

  • Исправлена ошибка, из-за которой асинхронные команды не установили $? правильно.
  • Исправлена ошибка, вызвавшая сообщения об ошибках, сгенерированные ошибками расширения в для команд с неправильным номером строки.
  • Исправлена ошибка, из-за которой SIGINT и SIGQUIT не были ловушкой в асинхронных командах субоболочки.
  • Устранена проблема с обработкой прерываний, из-за которой вторая и последующие SIGINT были проигнорированы интерактивными оболочками.
  • Оболочка больше не блокирует прием сигналов во время выполнения обработчиков ловушек для этих сигналов и позволяет выполнять рекурсивно большинство обработчиков ловушек . (запуск обработчиков trap во время выполнения обработчика trap ) .

Я думаю, что это либо последний, либо первый, который наиболее актуален - или, возможно, комбинация двух. Обработчик ловушки по своей природе является асинхронным , поскольку вся его работа заключается в ожидании и обработке асинхронных сигналов . И вы запускаете два одновременно с -eu и $ UNSET _ VAR .

И, возможно, вам стоит просто обновить, но если вы любите себя, вы сделаете это с другой оболочкой вообще.

-121--15771-

Просто для полноты: мы можем объединить отличный сценарий неловкости в ответе Стефана Шазеласа, и perl сценарий в ответе кос, но без сохранения всего списка в памяти, в надежде, что perl может быть быстрее, чем неловко. (Я изменил порядок аргументов, чтобы соответствовать исходному вопросу).

#!/usr/bin/env perl
use strict;

die "Usage: $0 l f\n" if $#ARGV+1 != 2;
open(L,$ARGV[0]) or die "$ARGV[0]: $!";
open(F,$ARGV[1]) or die "$ARGV[1]: $!";

while(my $number = <L>){
    #chop $number;
    while (<F>) {
        if($. == $number){
            print;
            last;
        }
    }
}
-121--25398-

Я не уверен, но, как я понимаю, я думаю: нет.

Apparmor может проводить различие между различными

  • приложением
  • путь к файловой системе
  • пользователь/группа

. Для использования различных методов поведения apparmor в разных профилях приложений необходимо создать различных пользователей для каждого метода поведения Apparmor.

Как и Android для создания изолированных приложений под разными «пользователями».

1
27.01.2020, 20:55

Очень легко, мой друг. Создайте жесткую ссылку -с именем firefox -(putProfileNameHere):

cd /data/usr/lib/firefox/
sudo ln firefox /usr/bin/firefox-default
sudo ln firefox /usr/bin/firefox-1b58iygj
#etc etc etc

Создайте несколько профилей App Armor:

cd /etc/apparmor.d
cp usr.bin.firefox usr.bin.firefox-default
cp usr.bin.firefox usr.bin.firefox-1b58iygj
#etc etc etc

Измените каждый профиль по своему усмотрению.

Создавайте разные файлы.desktop в /usr//share/applications (или используйте менеджер меню, такой как Alacarte или KDE ??)для запуска пользовательских двоичных файлов + соответствующий профиль:

firefox-default 
firefox-1b58iygj --profile /home/<yourUserID>/.mozilla/firefox/1b58iygj
#etc etc etc

Получайте удовольствие.

0
27.01.2020, 20:55

Можно либо с локальным профилем , либо с неприкрепленным профилем , либо с пространством имен .

Локальный профиль определяется с помощью

profile /usr/bin/firefox//some-name {
  …
}

Неприкрепленный профиль определяется с помощью

profile Some.name {
  …
}

Профиль с пространством имен определяется с помощью

profile :some-namespace:/usr/bin/firefox {
  …
}

Присвоение нестандартного -профиля процессу может быть достигнуто либо самим процессом с change_profile(, как уже было сказано ), либо с помощью свойства (systemd AppArmorProfile=, которое должно быть определено в сервисный блок ).

1
22.02.2021, 08:06

Теги

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