Миф или реальность: SELinux может ограничивать пользователя root?


20

Я где-то читал или слышал (возможно, в курсе SELinux от LinuxCBT ; но я не уверен), что существуют онлайн-серверы Linux, для которых также указан пароль пользователя root. Сервер Linux защищен с использованием правил SELinux, так что каждый может войти в систему с привилегированным пользователем, но не может причинить какой-либо вред ОС.

Это кажется мне мифом, но я хотел убедиться: можно ли укрепить Linux-систему (возможно, с помощью SELinux), чтобы даже пользователь root не мог выполнять с ней определенные вредоносные действия? (Примеры: удаление системных файлов, очистка файлов журнала, остановка критически важных служб и т. Д.)

Такая коробка Linux будет отличной отправной точкой для создания honeypot .

Редактировать: Основываясь на ответе (теперь удаленном) и небольшом поиске, я получил по крайней мере две ссылки, которые указывали на такие усиленные серверы Linux. К сожалению, оба сервера не работают. Для записи я скопирую и вставлю описания здесь:

1) С http://www.coker.com.au/selinux/play.html :

Бесплатный root-доступ на машине SE Linux!

Чтобы получить доступ к моей игровой машине Debian ssh по адресу play.coker.com.au от имени root, введите пароль ...

Обратите внимание, что такие машины требуют больших навыков, если вы хотите их успешно запустить. Если вам нужно спросить, следует ли вам запустить один из них, ответ будет «нет».

Цель этого состоит в том, чтобы продемонстрировать, что SE Linux может обеспечить всю необходимую безопасность без каких-либо разрешений Unix (однако все же рекомендуется использовать разрешения Unix также для реальных серверов). Также это дает вам возможность войти в систему SE и посмотреть, что это такое.

Перед входом в игровой автомат SE Linux убедитесь, что вы используете опцию -x, чтобы отключить переадресацию X11, или установите ForwardX11 no в файле / etc / ssh / ssh_config перед входом в систему. Также убедитесь, что вы используете опцию -a, чтобы отключить переадресацию агента ssh, или установите ForwardAgent no в файле / etc / ssh / ssh_config перед входом в систему. Если вы неправильно отключите эти настройки, то вход на игровой автомат подвергнет вас риску атаки через ваш SSH-клиент.

Существует канал IRC для обсуждения этого, это #selinux на irc.freenode.net .

Вот быстрый FAQ

2) С http://www.osnews.com/comments/3731

Цель усиленной Gentoo - сделать Gentoo жизнеспособной для высоконадежных и высокостабильных сред производственных серверов. Этот проект не является отдельным проектом, отделенным от собственно Gentoo; Предполагается, что это будет команда разработчиков Gentoo, которые сосредоточены на предоставлении решений для Gentoo, которые обеспечивают высокую безопасность и стабильность. Эта машина является демонстрационной машиной SELinux от Hardened Gentoo . Основное использование - тестирование и аудит интеграции и политики SELinux.


2
Это было заявлено и здесь . Хотя это, безусловно, теоретически возможно, мне это кажется трудным (если вы не ограничите этого пользователя root настолько, что он не сможет сделать ничего полезного). Написание правил SELinux, которые действительно делают то, что вы намеревались сделать, сложно в лучшем случае.
Жиль "ТАК - перестань быть злым"

4
В последних версиях ядра пользователи без полномочий root могут создавать пространства имен, в которых они имеют UID 0. Поскольку они не имеют UID 0 в пространстве имен верхнего уровня, они не могут нанести вред системе. По сути, они не получают никакой возможности причинить вред, в отличие от подхода SELinux, где все такие возможности должны быть отброшены. См. Ядро: поддержка пространств имен и полностью разделить две учетные записи без установки отдельных операционных систем?
Жиль "ТАК - перестань быть злым"

Зависит от вашего графического драйвера, действительно ли он безопасен или нет.
Джошуа

Ответы:


17

Реальность: да, SELinux может ограничивать пользователя root.

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

То, что обычно подразумевается как пользователь root, будет отображаться в SELinux как пользователь root Unix, работающий с доменами SELinux unconfined_tили sysadm_t. Это классический всемогущий всемогущий пользователь root.

Тем не менее, можно идеально настроить его систему для запуска корневой оболочки (я имею в виду корневую пользовательскую оболочку Unix), на которой работает user_tдомен SELinux с ограниченными правами . Согласно политикам SELinux, такая оболочка не будет отличаться от любых других оболочек для пользователей с ограниченными правами и не будет иметь особых привилегий в системе, таким образом, эффективно ограничивая пользователя root.

Appart с экспериментальной точки зрения, делать такие вещи буквально бесполезно, однако подобная практика находит свое применение в реальном мире. Классическим примером может быть администратор базы данных, которому нужно иметь возможность останавливать / запускать демоны базы данных, редактировать файлы конфигурации и т. Д. Без SELinux все эти действия потребуют от пользователя перехода к привилегиям root (даже если это обычно для одного пользователя). sudoнапример, через командную строку через инструмент, но даже это может привести к утечкам).

Благодаря SELinux мы могли бы предоставить этому пользователю подлинную корневую оболочку, но вместо запуска unconfined_tили sysadm_tдоменов он будет запускать dbadm_tдомен. Это означает, что он будет иметь больше привилегий, чем пользователь с ограниченными правами, но эти новые привилегии будут ограничены тем, что необходимо для администрирования сервера базы данных: этот пользователь не сможет вмешиваться в другие службы, файлы или выполнять другие административные команды, чем те, что строго обязан делать свою работу.

Таким же образом, администраторы веб-сервера и других служб могут также иметь другие корневые оболочки, работающие параллельно в одной и той же системе, каждый из которых увидит, что их текущий пользователь Unix является пользователем root , но благодаря SELinux у каждого будут фактически разные привилегии, ограниченные нужен для своих целей .


1

Да, это возможно. Но не очень полезно.

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


Во-первых, я был таким же пессимистичным, как и вы. Но, приобретая больше знаний, кажется, что нет необходимости «запрещать пользователю root выполнять какие-либо действия вообще». Проверьте мой отредактированный ответ, который включает ссылки и информацию для проверки концепции. К сожалению, они больше не доступны; но кажется, что реализации не были строго ограничительными.
MS Dousti

-5

Можно ли укрепить коробку Linux (возможно, с помощью SELinux), чтобы даже пользователь root не мог выполнять с ней определенные вредоносные действия?

Это может звучать дешево, но это просто: измените uid пользователя root на ненулевой. Просто перейдите в / etc / passwd и / etc / shadow, измените существующие записи uid = 0 из «root» на что-то другое, а затем добавьте учетную запись с именем «root», чей uid не равен нулю и не используется.

Это достигает цели без. Это также способ заявить, что любой может иметь «root-доступ» без фактического предоставления расширенных привилегий.


3
Ну да, но тогда rootпользователь просто не является пользователем root. Вопрос заключается в том, можно ли таким образом ограничить действительного суперпользователя.
Тердон

Звучит опасно - за исключением того, что вы, конечно, создаете другую учетную запись с uid 0. Но это было бы то же самое, что переименование корня и повторное использование имени «корень».
Фолькер Сигел

Вопрос касается только «root», который не обязательно эквивалентен суперпользователю, т. Е. Uid = 0. В редких случаях это полезное различие.
Отей

2
Тем не менее, контекст проясняет, что OP спрашивает, rootможет ли таким способом быть ограничен суперпользователь, а не какой-то случайный пользователь, чье имя пользователя .
Terdon

1
ХОРОШО. По крайней мере, отредактируйте свой ответ и покажите, как можно достичь того, что вы предлагаете. Это продолжает отмечаться как низкое качество из-за его длины. Вот почему он получает отрицательные отзывы.
Terdon
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.