LINUX.ORG.RU

Белый список приложений в Linux

 , , , ,


2

4

Доброе времени суток Комрады.

Перейду сразу к примеру. В ОС windows есть оснастки mmc с помощью которой можно задать список исполнимых файлов для конкретного пользователя. После чего все остальное ПО которое будет запускаться из под данного пользователя запускаться не будет. Сама ОС запускается под системной учетной записью и все работает без проблем.

Примерно тоже самое нужно реализовать на «SUSE Linux».

Как я понимаю есть несколько вариантов.

1. На уровне файловой системы разграничить для данного пользователя с помощью ACL. Но тут возникает сложности так как от данного пользователя запускаются не только определенные приложения но и скрипты на bash и pyton. Опять таки ограничить к системному ПО как например «cp» «kill» не получиться.

2. Использовать Apparmor. Но тут сразу вопрос. Возможно ли сделать правило именно белого списка «запретить все, что не разрешено?» кроме того создать для каждого приложения свой профайл как то не реально.

3. SELinux - сложен в настройке. Получиться ли на нем реализовать именно похожий вариант как на windows с mmc?

4. LSM-модуля WhiteEgret - про этот вариант прочитал недавно. Как он реализован и как применить его именно в Suse?

Буду благодарен за любой грамотный совет.



Последнее исправление: ctopmbi4 (всего исправлений: 3)

Ответ на: комментарий от ctopmbi4

По факту, сейчас вариантов всего 2 — запуск через именованные профили или запуск через хардлинки (но это для kdeinit4 точно не подходит, т.к. надо делать хардлинки и патчить скрипты запуска, чтобы они запускали kdeinit4 для каждого пользователя через свой хардлинк + потом для каждого хардлинка делать профили).

Много проще делать именованные профили для kdeinit4 (для каждого пользователя) и вызывать сам kdeinit4 из профиля с hat-ом как именованный. Вы должны понимать, что сам кде запускается уже в сессии пользователя, значит нам просто надо отловить точку входа (в профиле с hat) и во время запуска процесса переключиться на нужный профиль (профиль для конкретного пользователя). Важно (!) в пределах одного профиля может использоваться не более 12 именованных профилей (это ограничение в коде ядра и его никак просто так не обойти).

Собственно, вся суть RBAC — это создание таких вот уникальных ветвей профилей для каждого пользователя.

Пример (на базе более ранних примеров):

Создаем именованный профиль (не привязанный к реальному исполняемому файлу):

profile kdeinit4_for_user1 {
  # разрешаем доступ ко всем ресурсам, кроме доступа к файлам:
  ptrace,
  signal,
  unix,
  dbus,
  mount,
  umount,
  network,

  # доступ к файлами (разрешаем все, кроме запуска):
  /** rwklm,

  # собственно, белый список (разрешение на запуск):
  /программа1 Pix,
  /программа2 Pix,
  /программа3 Pix,
}
profile kdeinit4_for_user2 {
...
}
profile kdeinit4_for_user3 {
...
}
...
В профиле с hat запускаем kdeinit4 с переходом в именованный профиль нужного пользователя:
profile /программа_с_аутентификацией {

... доступ к ресурсам до аутентификации

^user1 {
   ...
  /usr/bin/kdeinit4 Px -> kdeinit4_for_user1,
  }
^user2 {
  ...
  /usr/bin/kdeinit4 Px -> kdeinit4_for_user2,
  }
^user3 {
  ...
  /usr/bin/kdeinit4 Px -> kdeinit4_for_user3,
  }
...
}

viewizard ★★
()
Ответ на: комментарий от ctopmbi4

Что-то ты не ту задачу вообще решаешь. Запускай свою scada в качестве единственного приложения X-сессии и всё. Вместо *dm поставь nodm, *wm нафиг не нужен (хотя можно и с wm, если scada плодит кучу окон, что дурдом, конечно, но бывает), запускай scada на полный экран в качестве единственного приложения. Никаких DE вообще нафиг не нужно, Единственное что может сделать юзер - закрыть scada, если в ней есть такая фича, но это лишь приведёт к перезапуску x-овой сессии и повторному запуску scada. Переключение терминалов по Alt-F заблокируй. У юзера вообще никакого доступа к системе не будет. А если понадобится ковырнуть что-то, то по ssh залезешь и ковырнёшь что надо.

Блин, что за мода такая - придумывать несуществующую проблему и потом старательно пытаться её решить?

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от viewizard

Действительно это работает. Но возникла еще одна проблема. Если установить автологин через kdm то переключение hat не работает. Это как то можно обойти?

ctopmbi4
() автор топика
Ответ на: комментарий от ctopmbi4

Это как то можно обойти?

Если аутентификации нет (или она есть, но в целевом случае не отрабатывает), правила следует прописывать непосредственно в теле профиля (т.е. в вашем случае в теле профиля kdm), а не в hat. По факту, если аутентификация не задействована, аппармор рассматривает hat как обычный вложенный профиль.

viewizard ★★
()
Ответ на: комментарий от Stanson

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

Я совершенно не понимаю всех, кто отписался в этой ветке «ненужно». Подсистема оффтопика, которая выполняет эту функцию, актуальна, полезна, широко используется.

anonymous
()
Ответ на: комментарий от anonymous

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

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

Если в какой-то говённой ОС есть проблема со всякими шифровальщиками на терминалах со scada, это не значит, что она существует и в другой, более приличной ОС.

Я совершенно не понимаю всех, кто отписался в этой ветке «ненужно». Подсистема оффтопика, которая выполняет эту функцию, актуальна, полезна, широко используется.

Для линукса есть масса систем контроля приложений, от MSSF/Aegis до SELinux с Apparmour. Только ничего общего ни по задачам, ни по применению они с вендовыми костылями не имеют.

Для решения твоей задачи в линуксе никаких SELinuxов и пр. штуковин, которые для вендузятника как бы похожи на вендовые костыли - вообще не нужно. Если хочется применять свои вендовые навыки обращения с системой - то лучше оставаться на венде. Если хочется получить профит от использования линукса, то нужно отказаться от всех навыков и привычек полученных на венде, иначе получится сплошное неосиляторство и факапы.

Stanson ★★★★★
()
13 июля 2018 г.
Ответ на: комментарий от viewizard

Переехал на SLES 12

Установлен из коробки. В логи пишет

 audit: type=1400 audit(1531456538.295:2): apparmor="DENIED" operation="change_hat" info="unconfined" error=-1 pid=6367 comm="kdm"
причем логи пишет в messages. Не сталкивались?

ctopmbi4
() автор топика
Ответ на: комментарий от viewizard

профиль есть

версия pam старше. может повлиять? в логах больше ничего нет.

apparmor-parser-2.8.2-49.21.x86_64
libapparmor1-2.8.2-49.21.x86_64
libapparmor-devel-2.8.2-49.21.x86_64
apparmor-profiles-2.10.3-1.1.noarch
apparmor-abstractions-2.10.3-1.1.noarch
pam_apparmor-2.10.3-1.1.x86_64

ctopmbi4
() автор топика

Думаю, начать надо с ps -A. Вот всё это - в белый список

ZenitharChampion ★★★★★
()
Ответ на: комментарий от viewizard

профиль не подгружает. более конкретно ошибку не выдает.

июл 13 14:39:05 armpt1 apparmor.systemd[3841]: mkstemp: ??? ?????? ????? ??? ????????
июл 13 14:39:05 armpt1 apparmor.systemd[3841]: Error: /etc/apparmor.d/usr.bin.kdm failed to load
июл 13 14:39:05 armpt1 systemd[1]: Started Load AppArmor profiles.

ctopmbi4
() автор топика
Ответ на: профиль есть от ctopmbi4

apparmor-parser-2.8.2-49.21.x86_64

...

apparmor-profiles-2.10.3-1.1.noarch
apparmor-abstractions-2.10.3-1.1.noarch

Это очень плохо, фактически apparmor-parser может не поддерживать инструкции применяемые в профиле. Я не очень понимаю, что там у SUSE, но у них 100% косяки в зависимостях пакетов на apparmor-profiles и apparmor-abstractions. 2.10 профили должны автоматом тянуть парсер и либу на 2.10+ имхо.

Как вариант - откатить на использование профилей такой же версии, что и парсер руками, и не давать ему их обновлять до 2.10.3.

профиль не подгружает. более конкретно ошибку не выдает.

А если его руками загрузить через «apparmor_parser -r /etc/apparmor.d/usr.bin.kdm», что пишет?

viewizard ★★
()
Ответ на: комментарий от Stanson

SELinux с Apparmour

Которые что бы нормально настроить на полный контроль, нужно прочитать три книги и на курсы походить полгода. Нет, спасибо.

anonymous
()
Ответ на: комментарий от anonymous

grsec

Они уже отказались от своего огораживания и зажимания исходников? А так да, RBAC, без шуток, был самым приятным из всей этой MAC-братии.

anonymous
()
Ответ на: комментарий от anonymous

нет оно все так же unoffical для простых смертных.

anonymous
()
Ответ на: комментарий от ctopmbi4

Система управления крутиться в Scada системе из которой и нужно закрыть все выходы в ОС

запускай её в голых иксах, без DE

можешь еще засунуть в отдельный chroot, где доступ только к пустому хомяку, если там какой-нибудь диалог открытия файла есть

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 1)
Ответ на: комментарий от viewizard

Опять не может подгрузить профайл. Хотя работало до перезагрузки.

Установленные компоненты.

pam_apparmor-32bit-2.8.0-2.4.1.x86_64
apparmor-profiles-2.8.0-2.4.1.noarch
apparmor-docs-2.8.0-2.4.1.noarch
pam_apparmor-2.8.0-2.4.1.x86_64
patterns-openSUSE-apparmor-12.2-5.5.1.x86_64
apparmor-parser-2.8.0-2.4.1.x86_64
libapparmor1-32bit-2.8.0-2.4.1.x86_64
patterns-openSUSE-apparmor_opt-12.2-5.5.1.x86_64
libapparmor1-2.8.2-54.1.x86_64

● apparmor.service - LSB: AppArmor initialization
   Loaded: loaded (/etc/init.d/boot.apparmor; bad; vendor preset: disabled)
   Active: active (exited) since Mon 2018-07-16 06:38:15 UTC; 20min ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 0 (limit: 512)

Jul 16 06:38:15 aprol1 boot.apparmor[620]: Starting AppArmor
Jul 16 06:38:15 aprol1 boot.apparmor[620]: /etc/apparmor.d/usr.bin.kdm failed to load..failed
Jul 16 06:38:15 aprol1 boot.apparmor[620]: ..done
Jul 16 06:38:15 aprol1 systemd[1]: apparmor.service: Child 620 belongs to apparmor.service
Jul 16 06:38:15 aprol1 systemd[1]: apparmor.service: Control process exited, code=exited status=0
Jul 16 06:38:15 aprol1 systemd[1]: apparmor.service: Got final SIGCHLD for state start.
Jul 16 06:38:15 aprol1 systemd[1]: apparmor.service: Changed start -> exited
Jul 16 06:38:15 aprol1 systemd[1]: apparmor.service: Job apparmor.service/start finished, result=done
Jul 16 06:38:15 aprol1 systemd[1]: Started LSB: AppArmor initialization.
Jul 16 06:38:15 aprol1 systemd[1]: apparmor.service: cgroup is empty


в логах

type=AVC msg=audit(1531724221.619:507): apparmor="STATUS" operation="profile_replace" name="/usr/bin/kdm" pid=26222 comm="apparmor_parser"
type=AVC msg=audit(1531724221.619:507): apparmor="STATUS" operation="profile_replace" name="/usr/bin/kdm//DEFAULT" pid=26222 comm="apparmor_parser"
type=AVC msg=audit(1531724221.619:507): apparmor="STATUS" operation="profile_replace" name="/usr/bin/kdm//admin" pid=26222 comm="apparmor_parser"
type=AVC msg=audit(1531724221.619:507): apparmor="STATUS" operation="profile_replace" name="/usr/bin/kdm//kurator" pid=26222 comm="apparmor_parser"
type=AVC msg=audit(1531724221.619:507): apparmor="STATUS" operation="profile_replace" name="/usr/bin/kdm//oper" pid=26222 comm="apparmor_parser"
type=AVC msg=audit(1531724221.619:507): apparmor="STATUS" operation="profile_replace" name="/usr/bin/kdm//root" pid=26222 comm="apparmor_parser"
type=SYSCALL msg=audit(1531724221.619:507): arch=c000003e syscall=1 success=yes exit=21510 a0=4 a1=a8da70 a2=5406 a3=10a8b550 items=0 ppid=12555 pid=2                                                                                       6222 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=2 comm="apparmor_parser" exe="/sbin/apparmor_parser" key=(null)
type=AVC msg=audit(1531724221.635:508): apparmor="STATUS" operation="profile_replace" name="/usr/bin/kdm//DEFAULT" pid=26222 comm="apparmor_parser"
type=AVC msg=audit(1531724221.635:508): apparmor="STATUS" operation="profile_replace" name="/usr/bin/kdm//admin" pid=26222 comm="apparmor_parser"
type=AVC msg=audit(1531724221.635:508): apparmor="STATUS" operation="profile_replace" name="/usr/bin/kdm//kurator" pid=26222 comm="apparmor_parser"
type=AVC msg=audit(1531724221.635:508): apparmor="STATUS" operation="profile_replace" name="/usr/bin/kdm//oper" pid=26222 comm="apparmor_parser"
type=AVC msg=audit(1531724221.635:508): apparmor="STATUS" operation="profile_replace" name="/usr/bin/kdm//root" pid=26222 comm="apparmor_parser"
type=SYSCALL msg=audit(1531724221.635:508): arch=c000003e syscall=1 success=yes exit=13997 a0=4 a1=a8f7c9 a2=36ad a3=d827524 items=0 ppid=12555 pid=26          

ctopmbi4
() автор топика
Ответ на: комментарий от viewizard

попытался еще раз загрузить правила выдал

type=AVC msg=audit(1531724521.707:526): apparmor="STATUS" operation="profile_replace" info="profile can not be replaced" error=-17 name="/usr/bin/kdm//DEFAULT" pid=30621 comm="apparmor_parser"
type=AVC msg=audit(1531724521.707:526): apparmor="STATUS" operation="profile_replace" info="unchecked profile in failed atomic policy load" error=-17 name="/usr/bin/kdm//admin" pid=30621 comm="apparmor_parser"
type=AVC msg=audit(1531724521.707:526): apparmor="STATUS" operation="profile_replace" info="unchecked profile in failed atomic policy load" error=-17 name="/usr/bin/kdm//kurator" pid=30621 comm="apparmor_parser"
type=AVC msg=audit(1531724521.707:526): apparmor="STATUS" operation="profile_replace" info="unchecked profile in failed atomic policy load" error=-17 name="/usr/bin/kdm//oper" pid=30621 comm="apparmor_parser"
type=AVC msg=audit(1531724521.707:526): apparmor="STATUS" operation="profile_replace" info="unchecked profile in failed atomic policy load" error=-17 name="/usr/bin/kdm//root" pid=30621 comm="apparmor_parser"
type=SYSCALL msg=audit(1531724521.707:526): arch=c000003e syscall=1 success=no exit=-17 a0=4 a1=22ba419 a2=36ad a3=d827524 items=0 ppid=30588 pid=30621 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="apparmor_parser" exe="/sbin/apparmor_parser" key=(null)
type=AVC msg=audit(1531724521.707:527): apparmor="STATUS" operation="profile_replace" info="profile can not be replaced" error=-17 name="/usr/bin/kdm//admin" pid=30621 comm="apparmor_parser"
type=AVC msg=audit(1531724521.707:527): apparmor="STATUS" operation="profile_replace" info="unchecked profile in failed atomic policy load" error=-17 name="/usr/bin/kdm//kurator" pid=30621 comm="apparmor_parser"
type=AVC msg=audit(1531724521.707:527): apparmor="STATUS" operation="profile_replace" info="unchecked profile in failed atomic policy load" error=-17 name="/usr/bin/kdm//oper" pid=30621 comm="apparmor_parser"
type=AVC msg=audit(1531724521.707:527): apparmor="STATUS" operation="profile_replace" info="unchecked profile in failed atomic policy load" error=-17 name="/usr/bin/kdm//root" pid=30621 comm="apparmor_parser"
type=SYSCALL msg=audit(1531724521.707:527): arch=c000003e syscall=1 success=no exit=-17 a0=4 a1=22baa8a a2=303c a3=d827524 items=0 ppid=30588 pid=30621 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="apparmor_parser" exe="/sbin/apparmor_parser" key=(null)
type=AVC msg=audit(1531724521.707:528): apparmor="STATUS" operation="profile_replace" info="profile can not be replaced" error=-17 name="/usr/bin/kdm//kurator" pid=30621 comm="apparmor_parser"
type=AVC msg=audit(1531724521.707:528): apparmor="STATUS" operation="profile_replace" info="unchecked profile in failed atomic policy load" error=-17 name="/usr/bin/kdm//oper" pid=30621 comm="apparmor_parser"
type=AVC msg=audit(1531724521.707:528): apparmor="STATUS" operation="profile_replace" info="unchecked profile in failed atomic policy load" error=-17 name="/usr/bin/kdm//root" pid=30621 comm="apparmor_parser"
type=SYSCALL msg=audit(1531724521.707:528): arch=c000003e syscall=1 success=no exit=-17 a0=4 a1=22bb2b3 a2=2813 a3=d827524 items=0 ppid=30588 pid=30621 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="apparmor_parser" exe="/sbin/apparmor_parser" key=(null)
type=AVC msg=audit(1531724521.707:529): apparmor="STATUS" operation="profile_replace" info="profile can not be replaced" error=-17 name="/usr/bin/kdm//oper" pid=30621 comm="apparmor_parser"
type=AVC msg=audit(1531724521.707:529): apparmor="STATUS" operation="profile_replace" info="unchecked profile in failed atomic policy load" error=-17 name="/usr/bin/kdm//root" pid=30621 comm="apparmor_parser"
type=SYSCALL msg=audit(1531724521.707:529): arch=c000003e syscall=1 success=no exit=-17 a0=4 a1=22bbc2c a2=1e9a a3=d827524 items=0 ppid=30588 pid=30621 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="apparmor_parser" exe="/sbin/apparmor_parser" key=(null)
type=AVC msg=audit(1531724521.707:530): apparmor="STATUS" operation="profile_replace" info="profile can not be replaced" error=-17 name="/usr/bin/kdm//root" pid=30621 comm="apparmor_parser"
type=SYSCALL msg=audit(1531724521.707:530): arch=c000003e syscall=1 success=no exit=-17 a0=4 a1=22bd29d a2=829 a3=d827524 items=0 ppid=30588 pid=30621 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="apparmor_parser" exe="/sbin/apparmor_parser" key=(null)

ctopmbi4
() автор топика
Ответ на: комментарий от ctopmbi4

info=«unchecked profile in failed atomic policy load»

С таким не сталкивался.

Нужно разбираться, что именно и как загружает системд.

viewizard ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.