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

<p>я хотел бы иметь корневую учетную запись в безопасности, даже если мой непривилегированный пользователь скомпрометирован.</p><p>в ubuntu вы можете использовать sudo только из "соображений безопасности" по умолчанию. однако я не уверен, что это безопаснее, чем просто использовать логин на консоли в текстовом режиме. есть слишком много вещей, которые могут пойти не так, если злоумышленник может выполнить код как мой обычный пользователь. например, добавление псевдонимов, добавление материала в мой path, настройка клавиатурных шпионов ld\_preload и x11 - это лишь некоторые из них. единственное преимущество, которое я вижу, это тайм-аут, поэтому я никогда не забываю выйти из системы.</p><p>у меня такие же сомнения в отношении su, но у него даже нет ограничения по времени. некоторые операции (особенно io перенаправление) более удобны с su, но с точки зрения безопасности это кажется хуже.</p><p>вход в консоль в текстовом режиме кажется наиболее безопасным. поскольку он запускается init, если злоумышленник может контролировать path или ld\_preload, он уже является пользователем root. события нажатия клавиш не могут быть перехвачены программами, работающими на x. я не знаю, могут ли программы, работающие на x, перехватывать [ctrl] + [alt] + [f1] (и открывать полноэкранное окно, которое выглядит как консоль) или это безопасно, как [ctrl] + [alt] + [del] в windows. кроме того, единственная проблема, которую я вижу, это отсутствие тайм-аута.</p><p>так я что-то упустил? почему ребята из ubuntu решили разрешить только sudo? что я могу сделать, чтобы улучшить безопасность любого из методов?</p><p>как насчет ssh? традиционно root не может войти через ssh. но использование вышеупомянутой логики не будет самым безопасным:</p><ul> <li>разрешить рут через ssh</li> <li>переключиться в текстовый режим</li> <li>войдите как root</li> <li>ssh к другой машине</li> <li>войти в систему как root?</li> </ul>

<p>безопасность всегда сводится к компромиссу. как и общеизвестный сервер, который находится в безопасном, отключенном месте на дне океана, <code>root</code> будет <em> наиболее </em> безопасным, если не было никакого способа получить к нему доступ вообще.</p><p>атаки ld\_preload и path, подобные описанным вами, предполагают, что злоумышленник уже имеет доступ к вашей учетной записи или, по крайней мере, к вашим точечным файлам. судо не очень хорошо защищает от этого - в конце концов, если у них есть ваш пароль, вам не нужно пытаться обмануть вас на потом ... они могут просто использовать <code>sudo</code> <em> сейчас </em>.</p><p>важно учитывать, для чего изначально был разработан sudo: делегирование <em> определенных </em> команд (например, команд для управления принтерами) "субадминистраторам" (возможно, аспирантам). в лаборатории) не отдавая корня полностью. использование sudo для выполнения <em> всего </em> является наиболее распространенным видом использования, которое я вижу сейчас, но это не обязательно та проблема, которую должна была решить программа (отсюда нелепо сложная конфигурация синтаксис файла).</p><p>но sudo-for-unrestricted-root <em> </em> решает еще одну проблему безопасности: управляемость паролей root. во многих организациях их, как правило, раздают как конфеты, пишут на досках и оставляют неизменными навсегда. это оставляет большую уязвимость, так как отзыв или изменение доступа становится большим производственным числом. даже отслеживание того, какой компьютер имеет какой пароль, является проблемой - не говоря уже о том, кто <em> знает </em>, какой именно.</p><p>помните, что большинство "киберпреступлений" происходит изнутри. с описанной ситуацией с паролем root трудно отследить, кто что сделал, с чем-то, что sudo с удаленной регистрацией справляется довольно хорошо.</p><p>в вашей домашней системе, я думаю, это больше связано с тем, что вам не нужно запоминать два пароля. вполне вероятно, что многие люди просто устанавливали их одинаковыми - или, что еще хуже, изначально устанавливали их одинаковыми, а затем позволяли им потерять синхронизацию, оставляя пароль root для гниения.</p><p>использование паролей <em> вообще </em> для ssh опасно, поскольку троянские демоны ssh с перехватом паролей вводятся в действие примерно в 90% реальных компромиссов системы. я видел. гораздо лучше использовать ключи ssh, и это также может быть работоспособной системой для удаленного корневого доступа.</p><p>но проблема в том, что теперь вы перешли от управления паролями к управлению ключами, а ключи ssh на самом деле не очень управляемы. нет никакого способа ограничить копии, и если кто-то действительно делает копию, у него есть все попытки, которые он хочет взломать парольную фразу. вы можете сделать политику, гласящую, что ключи должны храниться на съемных устройствах и монтироваться только при необходимости, но нет способа обеспечить это - и теперь вы представили возможность потери или кражи съемного устройства.</p><p>наивысшая безопасность достигается за счет одноразовых ключей или криптографических токенов на основе времени/счетчика. это можно сделать с помощью программного обеспечения, но аппаратная защита от несанкционированного доступа еще лучше. в мире с открытым исходным кодом есть <a href="http://www.wikidsystems.com/">wikid</a> , <a href="http://www.yubico.com/yubikey">yubikey</a> или <a href="http://www.linotp.org/">linotp</a> , и, конечно же, есть проприетарный тяжеловес <a href="http://www.rsa.com/node.aspx?id=1156">rsa securid</a> . если вы работаете в организации среднего или большого размера или даже в небольшой, заботящейся о безопасности, я настоятельно рекомендую использовать один из этих подходов для административного доступа.</p><p>тем не менее, это, вероятно, излишне для дома, где у вас действительно нет проблем с управлением - если вы соблюдаете разумные меры безопасности.</p>

<p><em> это очень сложный вопрос. <a href="https://unix.stackexchange.com/users/2511/mattdm">mattdm</a> <a href="https://unix.stackexchange.com/questions/8581/which-is-the-safest-way-to-get-root-privileges-sudo-su-or-login/8588#8588">уже рассмотрел много пунктов</a> .</em></p><p>между su и sudo, когда вы рассматриваете одного пользователя, su немного более защищен тем, что злоумышленник, обнаруживший ваш пароль, не может сразу получить привилегии root. но все, что нужно, это чтобы злоумышленник нашел локальную корневую дыру (относительно редко) или установил троян и ждал, пока вы запустите su.</p><p>у sudo есть преимущества даже перед входом в консоль, когда есть несколько пользователей. например, если система настроена с удаленными защищенными журналами, вы всегда можете узнать, кто последний запускал sudo (или чья учетная запись была взломана), но вы не знаете, кто набрал пароль root на консоли.</p><p>я подозреваю, что решение ubuntu было частично в интересах простоты (запоминается только один пароль) и частично в интересах безопасности и простоты распространения учетных данных на общих компьютерах (бизнес или семейство).</p><p>в linux нет безопасного ключа внимания или другого безопасного пользовательского интерфейса для аутентификации. насколько я знаю, даже в openbsd их нет. если вас беспокоит доступ с правами root, вы можете полностью отключить доступ с правами root из работающей системы: если вы хотите быть пользователем root, вам нужно будет что-то набрать в приглашении загрузчика. это явно не подходит для всех случаев использования. (* bsd <a href="http://en.wikipedia.org/wiki/securelevel">securelevel</a> работает следующим образом: на высоком уровне защиты есть вещи, которые вы не можете сделать без перезагрузки, такие как понижение уровня защиты или прямой доступ к подключенным необработанным устройствам.)</p><p>ограничение способов получения прав root не всегда является преимуществом для безопасности. помните о третьем члене <a href="http://en.wikipedia.org/wiki/cia\_triad">триада безопасности</a> : <a href="http://en.wikipedia.org/wiki/confidentiality">конфиденциальность</a> , <a href="http://en.wikipedia.org/wiki/data\_integrity">целостность</a> , <a href="http://en.wikipedia.org/wiki/availability"><strong> доступности </strong></a> . блокировка себя от вашей системы может помешать вам реагировать на инцидент.</p>

<p>разработчики защищенного дистрибутива openwall gnu/*/linux также высказали критические мнения о <code>su</code> (для получения прав root) и <code>sudo</code>. вы можете быть заинтересованы в чтении этой темы:</p><p> <a href="http://www.openwall.com/lists/owl-users/2004/10/20/6">... к сожалению, и su, и sudo тонко, но принципиально несовершенны.</a> </p><p>помимо обсуждения недостатков <code>su</code> и других вещей, solar designer также нацелен на одну конкретную причину использования <code>su</code>:</p><blockquote> <p>да, это была обычная мудрость сисадмина для "su root", а не для входа в систему как root. те немногие, кто, когда их спросят, действительно могут найти вескую причину такого предпочтения, будут ссылаться на лучшую подотчетность, достигнутую с помощью этого подхода. да, это действительно хорошая причина в пользу такого подхода. но это также единственный. ...(читать далее)</p> </blockquote><p>в своем дистрибутиве они имеют <a href="http://www.openwall.com/lists/oss-security/2010/11/08/3">"полностью избавились от корневых программ suid при установке по умолчанию"</a> (то есть, включая <code>su</code>; и для этого они не используют возможности):</p><blockquote> <p>что касается серверов, я думаю, что люди должны пересмотреть и, в большинстве случаев, запретить пользователям запускать su и sudo. отсутствует дополнительная защита от старого "входа в систему как не-root, затем su или sudo для корневого" мудрости sysadmin ", по сравнению с входом в систему как не-root и напрямую как root (два отдельных сеанса). напротив, последний подход является единственным правильным с точки зрения безопасности:</p> <p> <a href="http://www.openwall.com/lists/owl-users/2004/10/20/6">http://www.openwall.com/lists/owl-users/2004/10/20/6</a> </p> <p>(для подотчетности нескольких системных администраторов система должна поддерживать наличие нескольких учетных записей с привилегированными правами root, как это делает owl).</p> <p>(для настольных компьютеров с x это становится сложнее.)</p> <p>вы также должны иметь дело с ...</p> </blockquote><p>кстати, они должны были заменить <code>sulogin</code> на <a href="http://www.ohloh.net/p/msulogin"><code>msulogin</code></a> , чтобы разрешить установку с несколькими корневыми учетными записями: <code>msulogin</code> позволяет также вводить имя пользователя при переходе в однопользовательский режим (и сохранении "подотчетности") (эта информация взята из <a href="http://www.opennet.ru/openforum/vsluhforumid3/73378.html#24">это обсуждение на русском языке</a> ).</p>

<p>похоже, вы предполагаете, что использование <code>sudo</code> всегда сохраняет переменные окружения, но это не всегда так. вот выдержка из справочной страницы судо:</p><blockquote> <p>есть два разных способа работы с переменными среды. по умолчанию опция env\_reset sudoers включена. это приводит к тому, что команды выполняются в минимальной среде, содержащей term, path, home, shell, logname, user и username в дополнение к переменным из процесса вызова, разрешенного опциями env\_check и env\_keep sudoers. существует фактически белый список для переменных среды.</p> <p>если, однако, опция env\_reset отключена в sudoers, любые переменные, явно не запрещенные опциями env\_check и env\_delete, наследуются из вызывающего процесса. в этом случае env\_check и env\_delete ведут себя как черный список. поскольку невозможно занести в черный список все потенциально опасные переменные среды, рекомендуется использовать поведение по умолчанию env\_reset.</p> <p>во всех случаях переменные окружения со значением, начинающимся с (), удаляются, так как их можно интерпретировать как функции bash. список переменных среды, которые sudo разрешает или запрещает, содержится в выходных данных sudo -v при запуске от имени пользователя root.</p> </blockquote><p>так что если <code>env\_reset</code> включен (по умолчанию), злоумышленник не может переопределить вашу <code>path</code> или другие переменные окружения (если вы специально не добавите их в белый список переменных, которые должны быть сохранены).</p>

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

<p>я просто хочу добавить что-то немного не по теме. (для темы проверьте '/ bin/su -' здесь после)</p><p>я думаю, что вышеупомянутая "безопасность" также должна быть связана с фактическими данными, которые мы хотим защитить.</p><p>это будет и должно быть иначе, если мы хотим защитить: my\_data, my\_company\_data, my\_company\_network.</p><p>обычно, если я говорю о безопасности, я также говорю о "безопасности данных" и резервном копировании. мы также можем добавить отказоустойчивые системы и тому подобное.</p><p>учитывая это, я думаю, что безопасность в целом - это равновесие между удобством использования, "безопасностью данных" и необходимыми усилиями по внедрению защищенной системы.</p><p>цель ubuntu была и остается главным конечным пользователем: по умолчанию используется sudo.</p><p>fedora - это бесплатная версия redhat, которая, в свою очередь, больше ориентирована на серверы: раньше sudo был отключен.</p><p>для других дистрибутивов у меня нет прямой информации.</p><p>я использую сейчас, в основном, fedora. и как пользователь старого стиля я никогда не набирал 'su'. но я могу набрать "/ bin/su -" в очень короткое время, даже если я не совсем машинистка. переменная path .. не должна быть проблемой (я набираю путь). также "-" (минус) в принципе должен удалить мои переменные окружения пользователя и загрузить только корневые. то есть избегать некоторых дополнительных возможных проблем. возможно также ls\_preload.</p><p>в остальном, я думаю, что @mattdm был довольно точным.</p><p>но давайте поместим это в правильную коробку. предположим, что умный набор скриптов получит доступ к моим данным. какого черта он думает, что он собирается с этим делать? - опубликовать мои фотографии? мой? - пытаясь выяснить мое имя подруги и сказать ей, что я посещаю порно-сайты?</p><p>на однопользовательском изображении две худшие ситуации: - ребенок удаляет все мои данные: для забавы или по ошибке - ребенок использует мою машину, чтобы создать дальнейшую атаку на какую-то другую сущность. или похожие цели.</p><p>в первом случае, о котором я упоминал выше, лучше создавать резервные копии, чем защищать сеть. да, вы спасены. я имею в виду сбой оборудования не так уж и отличается.</p><p>второй случай более тонкий. но есть сигналы об этих действиях. в любом случае, вы можете сделать все возможное, но я бы не стал настраивать свой домашний пк на защиту от террористических атак!</p><p>я пропущу другие сценарии.</p><p>ура f</p>

<p>если проблема заключается в том, что взломанная учетная запись пользователя может использоваться для определения пароля, используемого для <code>sudo</code> или <code>su</code>, то используйте одноразовый пароль для <code>sudo</code> и <code>su</code>.</p><p>вы можете принудительно использовать ключи для удаленных пользователей, но это может не пройти проверку на соответствие требованиям. возможно, будет более эффективно настроить блок шлюза ssh, который требует двухфакторной аутентификации, а затем разрешить использование ключа оттуда. вот документация по такой настройке: <a href="http://www.howtoforge.com/secure\_ssh\_with\_wikid\_two\_factor\_authentication">безопасное развертывание ssh с помощью двухфакторной аутентификации wikid</a> .</p>

<p>вы также можете взглянуть на <a href="http://privacyidea.org">privacyidea</a> , который не только дает вам возможность использовать otp для входа в систему на компьютере (или для выполнения su/sudo), но также может выполнять otp в автономном режиме.</p><p>кроме того, он способен управлять вашими ключами ssh. то есть если у вас много машин и несколько пользователей root, все ключи ssh хранятся централизованно. таким образом, легко "отозвать"/удалить ключ ssh, если ключу больше нельзя доверять.</p><p>конечно, есть организационные задачи и рабочие процессы, чтобы обезопасить систему.</p>