SELinux “обучение” (разрешающие журналы режима)

Вполне уверенный AIX не имеет даты GNU по умолчанию. В зависимости от Вашей версии жемчуга можно сделать:

perl -MTime::Piece -MTime::Seconds -le '
    $tomorrow = Time::Piece->strptime($ARGV[0], "%Y/%m/%d") + ONE_DAY;
    print $tomorrow->ymd("/")
' 2013/10/28

Так, в ksh

#!/bin/ksh
read date?"Enter the date (YYYY/MM/DD): "
tomorrow=$(
    perl -MTime::Piece -MTime::Seconds -le '
        $tomorrow = Time::Piece->strptime($ARGV[0], "%Y/%m/%d") + ONE_DAY;
        print $tomorrow->ymd("/")
    ' "$date"
)
echo "Tomorrow is $tomorrow"

Выполнение этого похоже:

Enter the date (YYYY/MM/DD): 2013/12/31
Tomorrow is 2014/01/01

Протестированный на старой версии ksh и жемчуга

$ what /usr/bin/ksh
/usr/bin/ksh:
        Version M-11/16/88i
        SunOS 5.8 Generic 110662-24 Apr 2007
$ perl --version

This is perl, v5.10.0 built for sun4-solaris
3
27.03.2015, 17:32
1 ответ

Много раз вам будет представлена ​​информация, и ожидается, что вы выберете те биты, которые имеют отношение к вашим целям. Например, когда вы strace программу, у вас будет масса выходных данных, и вы сосредоточитесь только на тех частях, которые кажутся связанными с тем, почему вы смотрите на strace вывод.

Журналы аудита следуют аналогичной логике. Давайте посмотрим на ваш:

type = PROCTITLE msg = audit (27.03.2015 02: 58: 34.764: 439): proctitle = / bin / sh

Не слишком умопомрачительный. Он дает вам отметку времени и значение proctitle исполняемого файла, которое обычно является именем процесса.Не совсем уверен, почему logind имеет это как proctitle.

type = AVC msg = audit (27.03.2015 02: 58: 34.764: 439): avc: denied {getattr} for pid = 3861 comm = systemd-logind name = kvm dev = "devtmpfs" ino = 11755 scontext = system_u: system_r: system_dbusd_t: s0-s0: c0.c1023 tcontext = system_u: object_r: kvm_device_t: s0 tclass = chr_file permissive = 1

Это фактическое сообщение об ошибке SELinux, и вы должны позаботиться о том, чтобы наиболее. Тип = AVC - это то, что выдает. AVC означает векторный кэш доступа , который является компонентом SELinux .

Важные части, на которые следует обратить внимание, - это то, что находится в строфе denied (в данном случае getattr ), которая сообщает вам, что программа конкретно делала, чтобы быть отклоненным. После этого мы смотрим на исходный контекст (также известный как scontext ), который даст вам представление о том, в какой общей категории использовался компонент-нарушитель. В этом случае полный контекст system_u: system_r: system_dbusd_t , который сокращен до единственной части, которая имеет существенное значение (99% времени), всего лишь system_dbusd_t . Проделав то же самое с целевым контекстом, мы получим kvm_device_t . Поля comm и pid важны и очевидны. Исключение произошло с systemd-logind , который работал с PID 3861.

Итак, собрав все вместе , мы получили systemd-logind , который работал как system_dbusd_t и пытался выполнить какую-то getattr в файле с контекст kvm_device_t .

Право администратора решать, что это значит. Что касается SELinux, все, что он знает, - это то, что это запрещено его политикой, поэтому он предоставляет вам подробную информацию, чтобы вы могли сделать свой собственный звонок.

type = SYSCALL msg = audit (27.03.2015 02: 58: 34.764: 439): arch = x86_64 syscall = getxattr success = no exit = -61 (данные отсутствуют) a0 = 0x1fef030 a1 = 0x7fc0dbf2ef9f a2 = 0x7fff6aaa1da0 a3 = 0x84 items = 0 ppid = 1 pid = 3861 auid = unset uid = root gid = root euid = root suid = root fsuid = root egid = root sgid = root fsgid = root tty = (none) ses = unset comm = systemd-logind exe = / lib / systemd / systemd-logind subj = system_u: system_r: system_dbusd_t: s0-s0: c0.c1023 key = (null)

Это немного не по порядку с точки зрения того, как вы представил его, но я поместил его после, так как это облегчает понимание того, как вы должны его читать. type = AVC является важной частью, но обычно он регистрирует фактический сбой системного вызова, чтобы вы могли получить более подробную информацию.

Например, учитывая имя программы, мы знаем, что такое systemd-logind , но если бы оно было более двусмысленным, exe = / lib / systemd / systemd-logind мог бы позволить вам определить, какая программа вызвала ошибку.Такие вещи, как auid ( идентификатор входа процесса) или uid , также могут быть полезной информацией, если вы не уверены, почему рассматриваемый исполняемый файл был вылетает.

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


РЕДАКТИРОВАТЬ: Еще одна вещь по вашему последнему пункту. Обычно вы можете посмотреть политику audit2allow и понять, какие изменения она вносит. Фактически изменения не применяются, пока вы не вставите модуль политики. Таким образом, вы все равно можете сгенерировать его и просто просмотреть в текстовом редакторе, чтобы увидеть, если бы вы хотели, чтобы это произошло. Это может быть быстрее, чем отслеживание деталей путем непосредственного чтения audit.log .

2
27.01.2020, 21:27

Теги

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