Помогите с форматированием текста

Проблема с вашим первым модулем :пользователь root в unconfined _t все еще имеет разрешения и правила, позволяющие изменять политику selinux. Ваша настраиваемая политика применяет только новые автоматические переходы для semanage _exec _t на пользователя _t . Процесс в домене пользователя _t не может изменить политику, поэтому semodule, semanageи т. д. завершаются ошибкой. Однако любая программа в неподтвержденном домене по-прежнему может изменять политику. Кроме того, root может просто переименовать эти semanage _exec _t помеченные двоичные файлы в любой неограниченный тип для их запуска.

Ваш второй модуль политики ничего не делает, потому чтоneverallowправила проверяются компилятором -и не приводят ни к каким правилам в скомпилированной политике.Вы не можете использовать neverallow для удаления/черного списка правил, уже включенных в загруженную политику (, и в языке политики SELinux нет инструкции deny , которую вы могли бы использовать таким образом ).

Компиляция политики должна выдавать ошибку и завершаться сбоем, если существуют конфликтующие правила allow и neverallow . Согласно документации , neverallow правила могут использоваться в модулях политик, но для того, чтобы проверки были эффективными, expand-checkдолжно быть установлено на 1 в semanage.conf(, возможно, причина, по которой ваш модуль успешно скомпилировано ).

Некоторые способы решения вашей проблемы для предотвращения изменений загруженной политики SELinux:

  • Использоватьsecure_mode_policyloadлогическое значение:

    Boolean to determine whether the system permits loading policy, setting enforcing mode, and changing boolean values.

    Подобным образомsecure_mode_insmodлогическое значение предотвратит загрузку дополнительных модулей ядра. Эти логические значения нельзя отключить в работающей системе, после включения (требуется перезагрузка для отключения ).

  • Настройте пользователей на более ограниченные домены (, например пользователя _t ), что не позволяет изменять загруженную политику. Переключение на root с помощью su/ sudoне приведет к повышению уровня до более привилегированного пользователя SELinux и сохранит те же принудительные ограничения SELinux.

  • Создайте собственного пользователя SELinux. Вы можете основывать его на пользователе SELinux, предоставленном вашим дистрибутивом (загрузить исходники политик вашего дистрибутива ). Вероятно, вам следует рассмотреть возможность использования какого-либо ограниченного пользователя в качестве шаблона вместо неограниченного пользователя и добавлять только те разрешения, которые вам нужны, чтобы избежать предоставления чрезмерно широких разрешений.

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

0
05.04.2020, 07:07
2 ответа

с awk, который является подходящим инструментом для форматирования текста -:

awk '/^Grp:/ { OFS=" "; $1= "Reporting"; mg=$2; print; next} 
             { OFS=","; print mg, $0}' infile
3
28.04.2021, 23:18

Использованиеsed:

$ cat script.sed
/^Grp: / {                              ;# A "Grp: " line
        s///                            ;# Remove "Grp: "
        h                               ;# Save in hold space
        s/^/Reporting /p                ;# Insert "Reporting " at start, print
        d                               ;# Delete, start next cycle
}

# Any other line:
G                               ;# Append the hold space
s/\(.*\)\n\(.*\)/\2,\1/         ;# Swap strings around \n, insert comma
$ sed -f script.sed file
Reporting MG1
MG1,user1
MG1,user2
MG1,user3
Reporting MG2
MG2,user7
MG2,user1
MG2,user9
MG2,user6
MG2,user2

Как «один -лайнер»:

sed -e '/^Grp: /{s///;h;s/^/Reporting /p;d;}' \
    -e 'G;s/\(.*\)\n\(.*\)/\2,\1/' file

Аналогичный подход к описанному выше сawk:

awk '/^Grp: / { sub("^Grp: ", ""); group = $0; print "Reporting " $0; next }
              { print group "," $0 }' file

Оба варианта sedи awkв этом ответе (, а также вариант shв конце ниже )справятся с пробелами в данных либо в строках MG, либо в строках user:

$ cat file
Grp: some group ID
line 1
the other line
$ sed -e '/^Grp: /{s///;h;s/^/Reporting /p;d;}' -e 'G;s/\(.*\)\n\(.*\)/\2,\1/' file
Reporting some group ID
some group ID,line 1
some group ID,the other line

В качестве забавного упражнения, используя/bin/sh:

while IFS= read -r line; do
        case $line in
                'Grp: '*)
                        group=${line#Grp: }
                        printf 'Reporting %s\n' "$group"
                        ;;
                *)
                        printf '%s,%s\n' "$group" "$line"
        esac
done

Выполнить с

sh script.sh <file
1
28.04.2021, 23:18

Теги

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