Процесс легко запустить в фоновом режиме или сделать его systemd
службой.
Однако, если я хочу запустить процесс, который отслеживает действия на машине Linux, он становится целью атак. Если какой-либо пользователь захочет сделать что-то плохое, он сначала убьет этот процесс, даже если они всего лишь sudo
ers или wheel
пользователи, просто выполнив kill
или systemctl stop
.
Есть ли способ реализовать процесс, который root
может только убить?
Ребята, просто думая, что даже rsyslog
сервис может быть убит, вы должны признать, насколько уязвим Linux на самом деле. Это как пилот может отключить черный ящик. Разве какая-нибудь авиакомпания позволяет это делать? Или какая-нибудь дает пилоту список разрешений, чтобы помешать ему сделать что-либо, что он может сделать для спасения самолета? Конечно, пилот может разбить самолет, но черный ящик запишет это.
Мое предложение о бан-листе является законным с точки зрения безопасности, хотя это может вас напугать. Так что не пытайтесь винить парня, который поднял этот вопрос, хорошо?
решение1
Имея неограниченные привилегии sudo/wheel, любой сможет отменить все, что вы сделали. Даже если вам удастся добиться этого, убрав возможность убить процесс напрямую, например, с помощью sudo kill
, это все равно можно обойти с помощью других команд sudo, или вы также заблокируете себя от администрирования.
Спросите себя, почему ненадежные пользователи вообще имеют неограниченные привилегии sudo? Они не должны их иметь. Давайте такие привилегии только тем, кому вы полностью доверяете. Если есть некоторые привилегированные команды, которые все еще нужно выполнить, включите sudo только для этих команд:
+netmgr /usr/sbin/ifup, /usr/sbin/ifdown
(используйте visudo -f /etc/sudoers.d/netmgr
для помещения этого в файл дополнения sudoers).
Таким образом, вы можете разрешить пользователю запускать только sudo /usr/sbin/ifup
и sudo /usr/sbin/ifdown
, но не другие команды sudo. Множество других примеров, инструкций и соображений безопасности находятся в man sudoers
. Прочтите это!
Аудит обычно делается другим способом. В частности, вы настраиваетедругоймашина, настройте ее syslog для приема журналов с удаленных станций. На рассматриваемой машине вы настроили ведение журнала так, чтобы он отправлял все журналы на машину ведения журнала, в дополнение к локальному хранению. Даже если кто-то отключит эту отправку журнала, само действие отключения будет зарегистрировано, так что вы, по крайней мере, будете знать, кто является виновником.
решение2
Вы не можете дать кому-то силу, а затем помешать ему использовать ее. Вы должны сузить силу, которую вы им даете, чтобы она включала только то, что вы хотите, чтобы они имели.
В комментарии вы написали:
Мне приходится разрешать им использовать
kill
или,systemctl stop
потому что есть некоторые приложения, которым нужны эти привилегии для выполнения своей работы.
Это не значит, что тепользователинужен доступ к этим командам, только к нимПриложения. Пользователь имеет ограниченные права на запуск sudo ./someprogram
, и как только эта программа запускается как root, она может использовать kill
, и т. д. по мере необходимости. Однако у пользователя нет прямого доступа к этим внутренним командам.
По сути, пользователям не нужен доступ ккоманды, им нужен доступ кфункциональность. Если kill
это слишком рискованно, заблокируйте доступ к нему и предоставьте другой, более безопасный способ достижения того же результата. Возможно, вы создаете небольшую утилиту, safekill
которая действует как , kill
но отклоняет запросы на завершение определенных процессов. Дайте вашим пользователям доступ sudo к , safekill
но не к настоящему kill
. Если пользователи всегда используют эти команды для выполнения одного и того же действия, инкапсулируйте весь этот процесс в небольшую программу и заставьте их использовать ее вместо того, чтобы делать это вручную (например, они будут запускать sudo restart_webservers
вместо того, чтобы завершать и перезапускать все различные серверные процессы по отдельности). Ваши пользователи по-прежнему будут иметь доступ к необходимым им функциям, но они не смогут напрямую использовать опасное оружие.
Есть еще один, более экстремальный механизм принудительного исполнения, который может быть доступен в зависимости от вашей конкретной настройки. Некоторые процессоры имеютсторожевые таймерыдоступно. Измените программу мониторинга активности, чтобы запустить сторожевой таймер и сбрасывать его каждые пару секунд. Если кому-то удастся отключить ваш монитор, таймер сторожевого таймера истечет, и система перезагрузится, перезапустив программу монитора при запуске. Это не будет строго предотвращать отключение монитора, но это запретит кому-либо делать что-либо значимое после его отключения. Это также создаст большие красные флажки в ваших системных журналах. Большинство систем со сторожевыми таймерами будут сообщать, когда сторожевой таймер инициирует определенную перезагрузку. Перезагрузка, инициированная сторожевым таймером, которая происходит, когда пользователь вошел в оболочку, должна рассматриваться какоченьподозрительный.
решение3
Linux noob здесь. Не могли бы вы рассмотреть возможность написания программ или скриптов, которые делают только то, что должны делать эти ребята, затем сделать их владельцем root и добавить им бит setuid? Конечно, одна большая проблема в том, что вы можете не захотеть, чтобы другие люди запускали эти команды. Я не уверен, сможете ли вы получить исходную информацию о пользователе. И, конечно, всегда необходима особая осторожность с setuid/setgid.
решение4
Я придумал «Начать!»
root
можно установить DEFAULT SHELL для пользователя следующим образом:
useradd [someuser] -s [a certain executable]
Тогда, если определенный исполняемый файл = скрипт цензора, который:
Автоматически запрещает выполнение определенных команд. Нравится
stop
иrsyslog
комбинировано.запрещает команды, чтобы выйти из этой оболочки и использовать другую, даже оригинальную
bash
запрещает команды, чтобы помешать пользователю получить роль
root
, как это упомянул выше @user253751.Передайте остальные команды
/bin/bash
Затем просто установите его r+x
для любого пользователя.
Любое предложение приветствуется в этом ответе. Особенно для 2 и 3, кажется, есть различные средства.
Bash сначала загрузит настройки в /etc/profile
и /etc/bashrc
. Я заметил, что последний имеет дело с PROMPT_COMMAND
переменной. Можно перехватить это в последней строке, чтобы добавить в скрипт цензуры, но для некоторых систем требуется имя пользователя исключения, поскольку по умолчанию ни у кого нет привилегий root, чтобы изменить его обратно.
Полная цензура, удовлетворяющая вышеуказанным 4+1, будет отмечена как законный ответ.
Я никогда не отмечу ответ «ты должен от него отказаться» как обоснованный.
сопутствующие вопросы:
Как мне регистрировать команды bash пользователей?
Как заставить bash регистрировать команды оболочки в syslog?