LINUX.ORG.RU

Как не дать пользователю запускать свои программы?

 ,


0

2

Я изучил соответствующий раздел FAQ, однако возникает ряд вопросов.

В частности, что делать, когда пользователь подключает флешку? У меня в RHEL 6 почему-то все файлы, находящиеся на флешке (FAТ), имеют бит на исполнение. Причем монтирование флешки осуществляется не в $HOME. Как монтировать внешние носители с noexec по умолчанию?

И таких тупиков проглядывается довольно много.

В идеале хотелось бы задать в ОС список разрешённых для пользователя программ (иксы, офис, браузер, м.б. что-то ещё), а всё остальное запретить по умолчанию. Возможно ли это? Например, средствами SELinux? Спасибо

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

проблема в том, что код злоумышленника, запущенный через дыру в ФФ ну НИКАК не отличается от кода самого ФФ. Т.е. если юзер имеет доступ к документу, то имеет и браузер, и всё дерьмо, что этот браузер перемалывает. Мало того, юзер может случайно нажать не на ту ссылку, зайти не на тот сайт. Но вряд-ли юзер станет СЛУЧАЙНО качать какую-то HEX, ЛИЧНО давать ей право выполнится, и её запускать. А если будет, то тут никакие права уже не помогут, надо устранять самого юзера-врага.

Замечание по поводу дырявого браузера принимается. Но эта проблема решается отсутствием Интернета.

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

Таково требование заказчика.

А почему заказчик обратился с заказом к ламеру?

Друг, разве ты когда-то не начинал?

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

Кстати да, даже если добавить в параметры монтирования по умолчанию noexec, на FAT32 почему-то не работает :-(

Тоже пока не догоняю, как это сделать

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

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

Все помнят бородатый прикол с chmod -x /bin/chmod

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

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

любопытно, не подскажешь где почитать как именно это реализовать?

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

Замечание по поводу дырявого браузера принимается. Но эта проблема решается отсутствием Интернета.

шёл 2014й год... В России использовались компьютеры без интернета...

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

Не поверите, но так оно и есть :) В основе это дебилизма очень простая логика:

Кантора государственная -> ЗП нищенская -> Берем IT-шника который пойдет на нищенскую ЗП -> Студент-IT-шник пытается обеспечить все те нормы и правила что прописаны в законе РФ/Укр/Белор и тд.

Все что он может сделать - отрубить сетку нафик, и поставить сертифицированный Linux. Иногда и на это мозгов не хватает.

Какой интернет? Электронная почта? Не, не слышали .... у нас есть факс!

любопытно, не подскажешь где почитать как именно это реализовать?

Читать нужно букварь по Linux/UNIX. Попробуй сделать у себя в системе chmod -x /bin/chmod, а потом верни бит «х» обратно. Есть много способов :)

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

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

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

Я про это и говорил.

emulek
()

всё остальное запретить по умолчанию

Жуть-то какая! И зачем так жить?

Тебя Мигалков покусал?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от black_13

Не поверите, но так оно и есть

я верю. Просто какой смысл в «безопасности от удалённых угроз», ежели у нас интернета нет? А от локальных мы начинаем сразу орать, топать ногами, и вспоминать про ТК. Пруфлинк: Как не дать пользователю запускать свои программы? (комментарий)

Спрашивается: зачем огород городить? Есть Win9x, там всё есть.

emulek
()

SELinux

Давай, давай. Потом такой SElinuX у тебя будет с компьютером, когда система даже грузиться не станет...

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от AndreyKl

любопытно, не подскажешь где почитать как именно это реализовать?

о... А ещё спорим...

Ну в двух словах: хозяин файла является ПОЛНОВЛАСТНЫМ ХОЗЯИНОМ файла.

На этом основана шутка по chmod -x $(which chmod). Сменив права на -x очевидно невозможно сменить права обратно, ибо chmod нельзя запустить.

Вопрос: как исправить эту гадость без переустановки системы?

(мне ответ известен конечно, можете его найти самостоятельно. Можете и нагуглить, вот только вряд-ли это вас чему-то научит)

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

Не поверите, но так оно и есть :) В основе это дебилизма очень простая логика:

Кантора государственная -> ЗП нищенская -> Берем IT-шника который пойдет на нищенскую ЗП -> Студент-IT-шник пытается обеспечить все те нормы и правила что прописаны в законе РФ/Укр/Белор и тд.

Все что он может сделать - отрубить сетку нафик, и поставить сертифицированный Linux. Иногда и на это мозгов не хватает.

Почти всё угадал, кроме того, что желание вырубить сетку не является плодом фантазии студента, а приходит в виде требования оттуда, откуда надо

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

всё остальное запретить по умолчанию

Жуть-то какая! И зачем так жить?

Ну уж поверь, не я выбираю правила игры.

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

Не поверите, но так оно и есть :) В основе это дебилизма очень простая логика:

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

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

а allow_user_exec_content не запрещает выполнять на флешке в том числе разве?

ещё не протестировал, скоро попробую

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

на определённом уровне интернет юзать нельзя, вот и всё.

Совершенно верно

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

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

Да, ещё Сеть можно секретному юзеру отрубить через iptables.

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

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

Хорошо! Но в этом как раз мой вопрос - каким инструментом сделать такой список

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

Хорошо! Но в этом как раз мой вопрос - каким инструментом сделать такой список

man sudo. Простите, вы читать умеете?

сам список в /etc/sudoers, редактировать его нужно утилитой visudo.

emulek
()

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

А политики, да и все пакеты в системе ещё и обновляются. В общем, если делать свой дистрибутив ислючительно для десктопа, где пакетов всего ничего, а из демонов udevd и crond, то можно самому состряпать политику. Перепиливать же существующий дистрибутив на такие ограничения это безумный объём работы, да ещё необходимо смотреть, чтобы обновления чего не сломали.

нельзя писать скрипты

Скрипт, это ведь просто текстовый файл, как его запретить писать то?

нельзя использовать интерпретаторы

Внутри firefox есть javascript, внутри oowriter есть OpenOffice Basic.

Бредовые у вас требования.

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

Скрипт, это ведь просто текстовый файл, как его запретить писать то?

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

внутри oowriter есть OpenOffice Basic.

Он будет специальным образом огорожен. Basic же не имеет отношения к стандартному функционалу офиса, это так, надстройки какие-то

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

man sudo. Простите, вы читать умеете?

сам список в /etc/sudoers, редактировать его нужно утилитой visudo.

Да нет, это совсем не то. Мне же не надо «execute a command as a superuser or another user». sudo - разрешительный инструмент. Мне же нужно совершенно противоположное

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

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

толку-то? Попробуйте выполнить sh любой_файл

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

Он будет специальным образом огорожен. Basic же не имеет отношения к стандартному функционалу офиса, это так, надстройки какие-то

нет, это часть программы.

Да нет, это совсем не то. Мне же не надо «execute a command as a superuser or another user». sudo - разрешительный инструмент. Мне же нужно совершенно противоположное

facepalm... Вот у вас есть юзер А, которому всё разрешено, но доступа у А к секретным документам нет. Т.е. вообще нет.

Есть юзер Б, но юзер А НЕ имеет права заходить в Б.

Однако, юзер А имеет право выполнять _некоторые_ программы под именем Б. И получать таким образом доступ к секретным документам. Но не любой доступ, а только лишь тот, который обеспечивают разрешённые в sudo программы.

К примеру юзеру Б можно использовать только такой браузер, который имеет выход только в локальную сеть предприятия.

Кроме того, юзер Б может монтировать флешку, но не любую, а только с определённым UUID.

Или вообще не может монтировать флешки и/или использовать интернет.

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

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

Кмк нужно создать собственную selinux-роль. И писать для неё ограничения/разрешения, тогда обновления не будут ломать ваших политик. Но поработать наверное придётся, да.

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

запретить запускать sh из sh

это очевидно должен делать автор скрипта. Тебе не кажется, что запрещать выполнять скрипт автору скрипта == деление на ноль?

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

запретить запускать sh из sh

вот это как вы понимаете?

в одну реку нельзя войти дважды, а если вы в реке, вам нельзя запретить входить в реку, т.к. вы УЖЕ в реке.

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

шёл 2014й год... В России использовались компьютеры без интернета...

Ну вообще если речь идет о безопасности, то отсутствие интернета - это норма.

sergej ★★★★★
()

В правилах udisk пропиши монтирование с noexec, хомяк, tmp тоже с noexec подмонтируй. Проверь, что пользователь не может другие папки писать.

ktulhu666 ☆☆☆
()
Ответ на: комментарий от AndreyKl

Может я чего не понимаю в SeLinux, но там ограничивается доступ к файлу на уровне контекстов файла, то есть если:

-rwxr-xr-x. root root system_u:object_r:shell_exec_t:s0 /bin/bash
-rwxr-xr-x. root root system_u:object_r:shell_exec_t:s0 /bin/dash
То нельзя создать роль, в которой можно было бы выполнять только /bin/bash.

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

а allow_user_exec_content не запрещает выполнять на флешке в том числе разве?

а со всем остальным - ограничением HOME, /tmp - порядок. Так что ещё раз спасибо!

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

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

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

спасибо что отписал, любопытно, буду знать.

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

В правилах udisk пропиши монтирование с noexec, хомяк

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

tmp тоже с noexec подмонтируй. Проверь, что пользователь не может другие папки писать.

нужен отдельный раздел для /tmp, а просто noexec маловато будет. Юзер ведь может хардлинк сделать. Для /var/tmp тоже. А ведь есть ещё разные /var/spool/mail и прочее... Только сидя на диване можно так рассуждать.

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

а allow_user_exec_content не запрещает выполнять на флешке в том числе разве?

Увы, не сработало с флешкой

на флешке noexec по умолчанию.

man mount

users Allow every user to mount and unmount the filesystem. This option implies the options noexec, nosuid, and nodev (unless overridden by subsequent options, as in the option line users,exec,dev,suid).

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

а со всем остальным - ограничением HOME, /tmp - порядок. Так что ещё раз спасибо!

теперь о плохом: скрипты всё равно будут запускаться.

эксплоиты — тоже будут. Т.к. эксплоит используется для внедрения кода в другое приложение. Грубо говоря, браузер вместо того, что-бы показать тебе скаченную страничку, отдаёт код процессору. А процессор его тупо выполняет.

От чего ты защищался — я не знаю. Ну можешь спать спокойно, защита 1% и защита неуловимого Джо всё равно работает, как-бы ты не извращался с правами и политиками ☺

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

да, на FAT такого права тупо нет, потому поставь там fmask=0177

Классный совет, спасибо

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

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

Как?

нужен отдельный раздел для /tmp

Ты откуда? /tmp в оперативной памяти хранится. Также можно просто через --bind перемонтировать директорию саму в себя с noexec.

А ведь есть ещё разные /var/spool/mail и прочее...

Ну тогда действительно нужен ещё SELinux или AppArmor, но и noexec на хомяке не помешает.

ktulhu666 ☆☆☆
()
Ответ на: комментарий от vitalyisaev2

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

Ваш пользователь работать не сможет.

/etc/X11/xinit/Xsession таки под пользователем из под bash выполняется.

Но таки да - правила SeLinux - это единственное решение, которое напрашивается.

https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6...

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