12

Я изучаю основы работы SELinux и посчитал бы полезным вызвать отказ. Мой тестовый компьютер работает под управлением CentOS 7, это базовая установка сервера без каких-либо дополнительных сервисов, и Getenforce сообщает «Enforcing». Поэтому я был уверен, что сделать /root доступным для чтения всему миру и попытаться прочитать файлы оттуда как непривилегированный пользователь, поможет. Но не повезло! Кто-нибудь может предложить несколько быстрых тестов? Попытка получить доступ к путям или открыть порты и т.д.

В идеале я ищу простые команды оболочки, которые ЦАП не ограничил бы, но MAC это заметит и откажет. Поэтому я не собираюсь компилировать сделанные на заказ программы или устанавливать конкретные службы (например, веб-сервер) для достижения этой цели. Это ценно, поскольку предоставляет общий и понятный способ увидеть SELinux в действии.

У меня нет проблем с изменением DAC (т.е. разрешений файловой системы), чтобы сделать их менее строгими, чем они будут по умолчанию в рамках теста.

4 ответа4

3

Чтобы продемонстрировать утилиту SELinux для обнаружения ошибок для кода стороннего / собственного разработчика, вот тест защиты памяти (модифицирующий первый пример кода здесь):

#include <fcntl.h>
#include <stdio.h>
#include <sys/mman.h>

int main (void) {
  // open file read-write, get a memory-mapped pointer with private access, write permission
  int fd = open ("file_to_test", O_RDWR);
  char *p = mmap (NULL, 42, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);

  p[0] = 'a';   // put something

  // Update protection mode; SELinux response depends on sebool: allow_execmod
  int r = mprotect (p, 42, PROT_READ | PROT_EXEC);

  // Display mprotect result
  printf ("mprotect = %d\n", r);

  close(fd);
  return 0;
}
Компилировать и показывать по умолчанию (не перехвачено)
$ echo "test data" > file_to_test
$ gcc execmod.c 

$ ./a.out 
mprotect = 0

$ sudo aureport -a

AVC Report
========================================================
# date time comm subj syscall class permission obj event
========================================================
<no events of interest were found>

Измените логическое значение, чтобы уловить проблему:

$ sudo getsebool allow_execmod
allow_execmod --> on

$ sudo setsebool allow_execmod 0
$ ./a.out 
mprotect = -1

$ sudo aureport -a

AVC Report
========================================================
# date time comm subj syscall class permission obj event
========================================================
1. 04/30/2015 12:26:41 a.out unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 10 file execmod unconfined_u:object_r:user_home_t:s0 denied 3612
3

Это ясно демонстрирует политику MAC, в которой эквивалентный ЦАП мог быть обойден при базовой установке CentOS 7.

  1. По умолчанию (в CentOS на момент написания статьи) непривилегированные пользователи, не являющиеся системными пользователями, вошли в систему как роль «undefined_u». Однако мы можем изменить нашу систему так, чтобы вместо непривилегированного пользователя «Алиса» была назначена роль «user_u». Политики по умолчанию могут быть сделаны для того, чтобы четко ограничить эту роль только небольшим количеством дополнительной конфигурации.

    [root]# echo "alice:user_u:s0-s0:c0.c1023" >> /etc/selinux/targeted/seusers
    
  2. Теперь отключите возможность для этих пользователей выполнять файлы, расположенные в их домашних каталогах и /tmp. Еще раз, по умолчанию разрешено такое поведение. Выполнение этой команды может занять некоторое время.

    [root]# setsebool -P user_exec_content off
    
  3. Теперь (с нашим непривилегированным пользователем) мы можем войти в систему и попытаться выполнить что-то в одной из этих областей, где нет доступа. Как видите, нам отказано.

    [alice]$ cp /bin/ls /tmp/
    [alice]$ /tmp/ls
    -bash: /tmp/ls: Permission denied
    
  4. Наконец, мы можем просмотреть журнал AVC, чтобы увидеть наше отрицание SELinux.

    [root]# aureport -a
    
    AVC Report
    ========================================================
    # date time comm subj syscall class permission obj event
    ========================================================
    1. 02/05/15 21:08:33 bash user_u:user_r:user_t:s0 59 file execute user_u:object_r:user_tmp_t:s0 denied 693
    
1

Если вы не изменили свои политики на вкладке Boolean в system-config-selinux (или в /etc /selinux /policy), то по умолчанию должно реагировать на следующее (NB, вы также можете установить setroubleshoot для более глубокого погружения):

mkdir -m 755 -p /install /ks

cp /root/anaconda-ks.cfg /install /ks

chmod 644 /install/ks/anaconda-ks.cfg

Затем перезапустите веб-сервер и попытайтесь получить доступ к http://localhost/ks с помощью веб-браузера. Вы должны увидеть сообщение "Запрещено". Если вы используете /var/log/audit/audit.log или недавно запустили ausearch -m avc -ts recent , вы должны увидеть сообщение: type=AVC msg=audit(1391277951.222:266): avc: denied { read } for pid=1731 comm="httpd" name="ks" dev=sda1 ino=22351 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined u:object r:default t:s0 tclass=dir

Затем вы можете изменить контекст SELinux с помощью chcon -Rv --reference /var/www/html /install/ks если вы не хотите отключать SELinux, но иметь доступ к ресурсу.

РЕДАКТИРОВАТЬ: извините, не видел, что вы сказали "не веб-сервер". Попробуйте chcon -u fake_u <filename> используя непривилегированную учетную запись в системном файле.

0

установить два небольших пакета - без зависимостей

  yum install -y vsftpd lftp

запустить FTP-сервер

  systemctl start vsftpd

создать файл в корне дома

  touch ~/tux.tch

перейти из корневого каталога в FTP-каталог.
примечание: переместите, не копируйте, или текст файла изменится

  mv ~/tux.tch /var/ftp/pub

войдите в свой FTP-сервер как пользователь FTP-клиента и попытайтесь получить доступ к новому файлу.
примечание: автозаполнение вкладки здесь не будет работать

  lftp localhost
    ls pub/tux.tch
    exit

просмотреть отказ в необработанных журналах

  grep AVC /var/log/audit/audit.log

или если вы setroubleshoot* установлено

  grep sealert /var/log/messages

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .