Какой самый безопасный способ получить права root: sudo, su или login?


120

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

В Ubuntu по умолчанию вы можете использовать sudo только по соображениям безопасности. Однако я не уверен, что это безопаснее, чем просто использовать логин на консоли в текстовом режиме. Есть слишком много вещей, которые могут пойти не так, если злоумышленник может выполнить код как мой обычный пользователь. Например, добавление псевдонимов, добавление материала в мой PATH, настройка клавиатурных шпионов LD_PRELOAD и X11 - это лишь некоторые из них. Единственное преимущество, которое я вижу, это тайм-аут, поэтому я никогда не забываю выйти из системы.

У меня такие же сомнения в отношении su, но у него даже нет ограничения по времени. Некоторые операции (особенно перенаправление ввода-вывода) более удобны с su, но с точки зрения безопасности это кажется хуже.

Вход в консоль в текстовом режиме кажется наиболее безопасным. Поскольку он запускается init, если злоумышленник может контролировать PATH или LD_PRELOAD, он уже является пользователем root. События нажатия клавиш не могут быть перехвачены программами, работающими на X. Я не знаю, могут ли программы, работающие на X, перехватывать [ctrl] + [alt] + [f1] (и открывать полноэкранное окно, которое выглядит как консоль) или это безопасно, как [Ctrl] + [Alt] + [Del] в Windows. Кроме того, единственная проблема, которую я вижу, это отсутствие тайм-аута.

Так я что-то упустил? Почему ребята из Ubuntu решили разрешить только sudo? Что я могу сделать, чтобы улучшить безопасность любого из методов?

Как насчет SSH? Традиционно root не может войти через SSH. Но использование вышеупомянутой логики не будет самым безопасным:

  • разрешить рут через SSH
  • переключиться в текстовый режим
  • войдите как root
  • SSH к другой машине
  • войти в систему как root?

В своем решении ssh, вы имеете в виду, что вы хотите вставить ssh в потенциально загруженный блок из другого блока? 1 / Если да, то, чтобы следовать ходу ваших мыслей, вы должны убедиться, что ваша другая коробка не взломана, прежде чем вы ssh из нее. 2 / Если нет, то у вас та же проблема.
Asoundmove

@asoundmove: в моей ситуации с ssh есть 4 пользователя: root @ hosta, root @ hostb, stribika @ hosta, stribika @ hostb. Предполагая, что злоумышленник может выполнить произвольный код в качестве обеих стрибиков (в конце концов, они работают с flashplugin и еще много чего), я все еще хочу безопасный root-доступ. Таким образом, обе коробки могут быть частично скомпрометированы.
стрибика

Ответы:


104

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

Атаки LD_PRELOAD и PATH, подобные описанным вами, предполагают, что злоумышленник уже имеет доступ к вашей учетной записи или, по крайней мере, к вашим точечным файлам. Судо не очень хорошо защищает от этого - в конце концов, если у них есть ваш пароль, нет необходимости пытаться обмануть вас на потом ... их можно просто использовать sudo сейчас .

Важно учитывать, для чего изначально был разработан Sudo: делегирование определенных команд (например, тех, которые управляют принтерами) «субадминистраторам» (возможно, аспирантам в лаборатории), не отдавая root полностью. Использование sudo для выполнения всех задач является наиболее распространенным видом использования, которое я вижу сейчас, но это не обязательно та проблема, которую должна была решить программа (отсюда и до смешного сложный синтаксис файла конфигурации).

Но, Судо-для-неограниченный корень делает решение еще одной проблем безопасности: управляемости корневых паролей. Во многих организациях их, как правило, раздают как конфеты, пишут на досках и оставляют неизменными навсегда. Это оставляет большую уязвимость, так как отзыв или изменение доступа становится большим производственным числом. Даже отслеживание того, какой компьютер имеет какой пароль, является проблемой - не говоря уже о том, кто знает, какой именно.

Помните, что большинство «киберпреступлений» происходит изнутри. С описанной ситуацией с паролем root трудно отследить, кто что сделал - что-то sudo с удаленной регистрацией справляется довольно хорошо.

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

Использование паролей вообще для SSH опасно, так как троянец-демоны ssh с перехватом паролей используются в 90% реальных системных компромиссов, которые я видел. Гораздо лучше использовать ключи SSH, и это также может быть работоспособной системой для удаленного корневого доступа.

Но проблема в том, что теперь вы перешли от управления паролями к управлению ключами, а ключи ssh на самом деле не очень управляемы. Нет никакого способа ограничить копии, и если кто-то действительно делает копию, у него есть все попытки, которые он хочет взломать парольную фразу. Вы можете сделать политику, гласящую, что ключи должны храниться на съемных устройствах и монтироваться только при необходимости, но нет способа обеспечить это - и теперь вы представили возможность потери или кражи съемного устройства.

Наивысшая степень защиты достигается за счет одноразовых ключей или криптографических токенов на основе времени / счетчика. Это можно сделать с помощью программного обеспечения, но аппаратная защита от несанкционированного доступа еще лучше. В мире с открытым исходным кодом есть WiKiD , YubiKey или LinOTP , и, конечно же, есть проприетарный тяжеловесный RSA SecurID . Если вы работаете в организации среднего или большого размера или даже в небольшой, заботящейся о безопасности, я настоятельно рекомендую использовать один из этих подходов для административного доступа.

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


Я приму это как ответ, так как он многое прояснит о том, о чем думали разработчики Ubuntu, делая sudo методом по умолчанию. Удаленное ведение журнала также кажется хорошей идеей, и, учитывая, что я уже использую syslog-ng, его не должно быть слишком сложно настроить, чтобы все мои компьютеры регистрировали все остальные. Я собираюсь придерживаться своей текущей практики перехода в текстовый режим и входа в систему оттуда для полного корневого доступа. Передача подмножества прав - это, безусловно, хороший способ использования sudo, который я никогда не рассматривал.
стрибика

7
sudoочень похож на Контроль учетных записей пользователей в Windows Vista. Оба на самом деле предназначены не для повышения безопасности, а для того, чтобы облегчить ее контролируемое снижение . Но поскольку они облегчают временное повышение ваших привилегий с минимальным трением, вам не нужно работать с повышенными привилегиями в течение продолжительных периодов времени, что повышает безопасность. (Это не было большой проблемой в Unix, но в Windows я помню, как работал администратором целыми днями, просто потому, что переключение было таким болезненным.)
Jörg W Mittag

Троянский пароль ssh-демонов? Если они могут заменить демон ssh, у них уже есть root.
Псуси

@psusi: да, в этой системе; в среде, в которой пароли (службы каталогов) совместно используются несколькими системами, компромисс легко распространяется таким образом. Даже если это единая система, возникает проблема с повторной подготовкой пароля каждого пользователя после переустановки после обнаружения компрометации.
Mattdm

1
Потенциальные трудности, связанные с изменением всех rootпаролей вашей компании, также упоминаются в качестве последнего пункта в отчете Ops , который стоит прочитать.
Wildcard

30

Это очень сложный вопрос. Mattdm уже рассмотрел много вопросов .

Между su и sudo, когда вы рассматриваете одного пользователя, su немного более защищен тем, что злоумышленник, обнаруживший ваш пароль, не может сразу получить привилегии root. Но все, что нужно, это чтобы злоумышленник нашел локальную корневую дыру (относительно редко) или установил троян и ждал, пока вы запустите su.

У Sudo есть преимущества даже перед входом в консоль, когда есть несколько пользователей. Например, если система настроена с удаленными защищенными журналами, вы всегда можете узнать, кто последний запускал sudo (или чья учетная запись была взломана), но вы не знаете, кто набрал пароль root на консоли.

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

В Linux нет безопасного ключа внимания или другого безопасного пользовательского интерфейса для аутентификации. Насколько я знаю, даже в OpenBSD их нет. Если вас беспокоит доступ с правами root, вы можете полностью отключить доступ с правами root из работающей системы: если вы хотите быть пользователем root, вам нужно будет что-то набрать в приглашении загрузчика. Это явно не подходит для всех случаев использования. (* Уровень безопасности BSD работает следующим образом: на высоком уровне безопасности есть вещи, которые вы не можете сделать без перезагрузки, такие как снижение уровня безопасности или прямой доступ к подключенным необработанным устройствам.)

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


Если они могут найти ваш пароль, то они могут найти пароль root так же легко, если не проще. Также вы можете использовать sysrq-k в качестве безопасной последовательности внимания.
Псуси

У Linux есть ключи безопасности, посмотрите документацию ядра
btshengsheng

@btshengsheng Linux может иметь «безопасный ключ внимания», но, поскольку он может быть настроен, вы не можете быть уверены, что он работает на какой-либо конкретной машине. Он также зависит от раскладки клавиатуры, поэтому его можно обойти, переназначив одну из клавиш. Это называется «безопасный ключ внимания», но это не совсем соответствует требованиям.
Жиль

9

Разработчики защищенного дистрибутива OpenWall GNU / * / Linux также высказали критическое мнение о su(для того, чтобы стать пользователем root) и sudo. Вы можете быть заинтересованы в чтении этой темы:

... к сожалению, su и sudo тонко, но в корне ошибочны.

Помимо обсуждения недостатков suи прочего, Solar Designer также нацелен на одну конкретную причину использования su:

Да, это была обычная мудрость сисадмина для "su root", а не для входа в систему как root. Те немногие, кто, когда их спросят, действительно могут найти вескую причину такого предпочтения, будут ссылаться на лучшую подотчетность, достигнутую с помощью этого подхода. Да, это действительно хорошая причина в пользу такого подхода. Но это также единственный. ...(читать далее)

В своем дистрибутиве они «полностью избавились от корневых программ SUID при установке по умолчанию» (т. Е. Включая su; и они не используют возможности для этого):

Что касается серверов, я думаю, что люди должны пересмотреть и, в большинстве случаев, запретить пользователям запускать su и sudo. Не существует дополнительной защиты от старого «входа в систему как не-root, затем su или sudo для root« sysadmin «мудрость», по сравнению с входом в систему как не-root и напрямую как root (два отдельных сеанса). Напротив, последний подход является единственным правильным с точки зрения безопасности:

http://www.openwall.com/lists/owl-users/2004/10/20/6

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

(Для настольных компьютеров с X это становится сложнее.)

Вы также должны иметь дело с ...

Кстати, они должны были заменить suloginс , msuloginчтобы позволить установку с несколькими корневых счетами: msuloginпозволяют ввести имя пользователя и при переходе в однопользовательский режим (и сохранить «ответственность») (эта информация исходит от этой дискуссии на русском языке ) ,


1
Для системы, которая в основном должна быть брандмауэром и не намного, это нормально, но если вы собираетесь запустить, в качестве случайного примера, mysql / postgresql / bind / powerdns / apache и еще много чего в производственной системе, вы запускаете столкнуться с проблемами, как они описывают в X. По сути, они обменяли много юзабилити на степень безопасности; системный администратор должен решить, является ли это справедливым компромиссом. Лично я буду придерживаться Debian.
Шадур

4

Вы, кажется, предполагаете, что использование sudoвсегда сохраняет переменные окружения, но это не всегда так. Вот выдержка из справочной страницы sudo:

Есть два разных способа работы с переменными среды. По умолчанию опция env_reset sudoers включена. Это приводит к тому, что команды выполняются с минимальным окружением, содержащим TERM, PATH, HOME, SHELL, LOGNAME, USER и USERNAME в дополнение к переменным из процесса вызова, разрешенного опциями endo_check и env_keep sudoers. Фактически существует белый список для переменных среды.

Если, однако, опция env_reset отключена в sudoers, любые переменные, явно не запрещенные опциями env_check и env_delete, наследуются из вызывающего процесса. В этом случае env_check и env_delete ведут себя как черный список. Поскольку невозможно занести в черный список все потенциально опасные переменные среды, рекомендуется использовать поведение по умолчанию env_reset.

Во всех случаях переменные среды со значением, начинающимся с (), удаляются, так как они могут быть интерпретированы как функции bash. Список переменных среды, которые sudo разрешает или запрещает, содержится в выходных данных sudo -V при запуске от имени пользователя root.

Поэтому, если env_resetвключено (по умолчанию), злоумышленник не может переопределить ваши PATHили другие переменные среды (если вы специально не добавите их в белый список переменных, которые должны быть сохранены).


1
Я имел в виду, что если злоумышленник может контролировать мой путь, он может заставить меня запустить что-нибудь вместо реального / usr / bin / sudo. Например, / tmp / sudo, который печатает, Password: ничего не отображает, когда я печатаю, посылает ему то, что я набрал, говорит, что пароль неправильный, затем исполняет настоящее sudo.
стрибика

Хм, я думаю, в этом случае вы можете просто запустить / usr / bin / sudo напрямую, а не полагаться на оболочку, чтобы найти ее для вас. Но вы правы, это проблема, о которой я не думал.
Седрик

1
@ CedricStaub: Насколько я могу судить, никто не думает об этом. Я могу дать полный путь, но попробуйте это: alias /usr/bin/sudo="echo pwned"кроме того, что задействовано множество программ (X, xterm, оболочка), любая из которых может украсть пароль. Вот почему я сказал, что слишком много проблем с безопасным переключением.
стрибика

1
Вы пробовали это? Я сделал:bash: alias: `/usr/bin/sudo': invalid alias name
Maaartinus

@maaartinus: Интересно. Работает в ЗШ.
стрибика

4

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


1
Конечно, но root-to-root или unprivileged-to-unpriviliged затем переключиться на root? (Я на самом деле использую 4096-битные ключи, чтобы быть в безопасности. Большие ключи не поддерживаются везде.)
stribika

@stribika Ну, оба. Если машина взломана, вы все равно не потеряете свой ключ. Это предотвращает распространение (самая большая проблема с паролями).
Let_Me_Be

3

Я просто хочу добавить что-то немного не по теме. (для темы проверьте '/ bin / su -' здесь после)

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

Это будет и должно быть иначе, если мы хотим защитить: my_data, my_company_data, my_company_network.

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

Учитывая это, я думаю, что безопасность в целом - это равновесие между удобством использования, «безопасностью данных» и необходимыми усилиями по внедрению защищенной системы.

Цель Ubuntu была и остается главным конечным пользователем: по умолчанию используется Sudo.

Fedora - это бесплатная версия RedHat, которая, в свою очередь, больше ориентирована на серверы: раньше Sudo был отключен.

Для других дистрибутивов у меня нет прямой информации.

Я использую сейчас, в основном, Fedora. И как пользователь старого стиля я никогда не набирал 'su'. Но я могу набрать "/ bin / su -" в очень короткое время, даже если я не совсем машинистка. Переменная PATH .. не должна быть проблемой (я набираю путь). Также "-" (минус) в принципе должен удалить мои переменные окружения пользователя и загрузить только корневые. т.е. избегать некоторых дополнительных возможных проблем. Вероятно, также LS_PRELOAD.

В остальном, я думаю, что @mattdm был довольно точным.

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

На однопользовательском изображении две худшие ситуации: - Ребенок удаляет все мои данные: для забавы или по ошибке - Ребенок использует мою машину, чтобы создать дальнейшую атаку на какую-то другую сущность. Или похожие цели.

В первом случае, о котором я упоминал выше, лучше создавать резервные копии, чем защищать сеть. Да, вы спасены. Я имею в виду сбой оборудования не так уж и отличается.

Второй случай более тонкий. Но есть сигналы об этих действиях. В любом случае, вы можете сделать все возможное, но я бы не стал настраивать свой домашний ПК на защиту от террористических атак!

Я пропущу другие сценарии.

ура F


2

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

Вы можете принудительно использовать ключи для удаленных пользователей, но это может не пройти проверку на соответствие требованиям. Возможно, будет более эффективно настроить блок шлюза SSH, который требует двухфакторной аутентификации, а затем разрешить использование ключа оттуда. Вот документация по такой настройке: Защитите свое развертывание SSH с помощью двухфакторной аутентификации WiKID .


0

Вы также можете взглянуть на privacyIDEA , которое не только предоставляет вам возможность использовать OTP для входа в систему (или для выполнения su / sudo), но также может выполнять OTP в автономном режиме.

Кроме того, он способен управлять вашими ключами SSH. Т.е. если у вас много машин и несколько пользователей root, все ключи SSH хранятся централизованно. Таким образом, легко «отозвать» / удалить ключ SSH, если ключу больше нельзя доверять.

Конечно, есть организационные задачи и рабочие процессы, чтобы обезопасить систему.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.