Почему sudo безопаснее прямого использования su, если пользователю предоставлен доступ ко всем командам?

Почему sudo безопаснее прямого использования su, если пользователю предоставлен доступ ко всем командам?

Итак, я изучал различия между использованием suи sudo, и, похоже, все согласны, что этот sudoподход безопаснее, чем предоставление доступа к самой учетной записи root. Они говорят, что с учетной записью root вы можете сломать всю свою систему всего одной командой. Это я понимаю. НО первоначальный пользователь, созданный в системе, также имеет доступ ко всем командам с помощью sudo. Это я могу выяснить, запустив su -l. Если это так, то я могу просто запустить , sudo <game-ending command>чтобы разрушить свою систему. Так чем же этот подход лучше или безопаснее, чем предоставление мне прямого доступа к учетной записи суперпользователя? Я могу выполнять все те же команды...

Это потому что используя sudoкомандную строку я явно говорю компьютеру, что я думаю, что я знаю, что я делаю? Они думают, что люди забудут, что они находятся под учетной записью суперпользователя, если они явно не скажут об этом?

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

решение1

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

Преимущества следующие (в произвольном порядке):

  • sudo имеет превосходное логирование. sudo регистрирует каждую команду.
  • sudo позволяет более тонкое управление. Можно настроить sudo так, чтобы предоставить root-доступ к некоторым, но не ко всем командам.
  • sudo использует пароль входа. Это избавляет от необходимости указывать пароль root (как это было бы с su) и связано с пунктом выше относительно более тонкого управления / доступа к root.
  • В Ubuntu по умолчанию учетная запись root заблокирована. Это отпугивает взломщиков, так как для входа в систему (удалённого, например, через ssh) им приходится угадывать и имя пользователя, и пароль. Если учетная запись root не заблокирована, как в случае с su, то им нужно взломать только пароль root.
  • sudo -iвероятно, лучший способ изолировать переменные окружения root от вашего пользователя. Это возникает время от времени, но является умеренно эзотерическим. Смотритеhttps://help.ubuntu.com/community/RootSudo#Special_notes_on_sudo_and_shells
  • некоторые людичувствуют, что необходимость вводить sudo перед каждой командой, которую они хотят запустить как root, или иметь тайм-аут sudo позволяет им остановиться и думать более ясно и уменьшает количество ошибок или запуск ошибочных команд. Если это вам поможет, то это тоже будет преимуществом.

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

Смотрите также -https://help.ubuntu.com/community/RootSudo

Чтобы попытаться ответить на некоторые другие ваши мысли:

  • Ни в su, ни в sudo нет ничего, что бы мешало вам запустить вредоносный код, пока вы знаете пароль. Ни один из них не безопаснее и не лучше.
  • Взломщики могут получить доступ к оболочке несколькими способами. Когда вы видите «запустить произвольный код» в уведомлении о безопасности -https://usn.ubuntu.com/usn/- это значит, что взломщик может запустить /bin/bash или любой другой код. Таким образом, взломщик, используя различные эксплойты, может получить доступ к оболочке, не зная вашего имени пользователя или пароля. Ни sudo, ни su не помогают в этом.
  • Если у взломщика есть доступ к оболочке, он может нанести большой вред без доступа root. Например, программа-вымогатель, которая шифрует все ваши персональные данные.
  • Если у взломщика есть доступ к оболочке учетной записи с правами root, через su или sudo, взломщик может получить права root с помощью ряда методов, выходящих за рамки этого обсуждения. Ни sudo, ни su не являются лучшими в этом отношении.

Итак, хотя вы и заметили проблемы или недостатки в sudo, su имеет точно такие же уязвимости, и su не превосходит sudo в этих аспектах, IMHO.

решение2

Представьте, что у вас есть 20 минут на что-то сложное. Вы немного с похмелья и вам нужно торопиться. «Давайте использовать su», — говорите вы. «Это сэкономит немного времени» — вот ваши доводы.

Случайно вы печатаете

rm -rf /*

вместо

rm -rf ./*

Ваша система сейчас зависает, и у вас осталось 10 минут до крайнего срока.

Если вы явно выбираете, когда вам нужен root, вы можете минимизировать вероятность этого. Root может быть не нужен, так rm -r ./*зачем его использовать? Зачем рисковать?

Вот что означает здесь «безопасность». Минимизация риска совершения пользователями (всеми пользователями, а не только новичками) фатальной ошибки.

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

С точки зрения безопасности, есть некоторые вещи, для которых sudo тоже лучше.@Пантера говорит- ведение журнала, ограничения, пароль root - SPOF и т. д.)

решение3

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

Некоторое время назад, в 1990-х, дистрибутивы упрощали установку Linux на собственное оборудование, даже при отсутствии особых компьютерных знаний.¹ Таким образом, Linux начал привлекать все больше и больше людей, которые, как ни странно, ранее не были обучены на системных администраторов на каком-нибудь диалекте UN*X. Вместо этого многие привыкли к (однопользовательским) системам, таким как Windows 95/98. И они узнали, что большинство задач по администрированию системы Linux требуют работы под этой странной учетной записью "root".

Таким образом, некоторые пользователи просто вошли в систему каккореньи использовали этот аккаунт для всей своей повседневной работы. Почему они должны были печатать suикореньпароль снова и снова или войти в новый tty только для некоторых команд администратора? Но использованиекореньfor everything, конечно, не очень хорошая идея, так как вы можете нанести гораздо больше вреда своей системе какой-нибудь невнимательной командой в неправильном месте. Это даже привело к тому, что некоторые дистрибутивы (это был SuSE?) изменили фон рабочего стола длякореньпользователю будет выведено большое предупреждение о том, что эту учетную запись следует использовать только для задач администратора.

Итак, способ Ubuntu sudoимеет некоторые преимущества (в дополнение к тем, которые уже есть)перечисленные Panther).

  • Вы не можете напрямую войти в системукореньсчет.² :-)
  • В процессе установки вам не потребуется вводить (дополнительный) пароль root, вам понадобится только один (пароль вашего пользователя).
  • sudoкэширует ваши учетные данные, поэтому для нескольких команд администратора в последовательности вам нужно ввести пароль только один раз (в отличие от su). Это уменьшает желание просто открыть оболочку или новый терминал скореньпривилегии.
  • И это облегчает информирование пользователей в Интернете и в документации о том, какие команды им следует вводить как администратору, а какие — нет.³

¹ А для тех, кто не решался сделать это самостоятельно, были установочные вечеринки.
² Но выможетиспользуйте команду типа sudo -iили , sudo su - rootчтобы получить root shell после того, как вы вошли в систему как обычный пользователь.
³ Но вы, конечно, знаете, что выне следует просто копировать и вставлять команды из Интернета, верно?

решение4

В зависимости от конфигурации, sudo <game ending command>не обязательно будет работать. Конечно, если конфигурация sudoersгласит "user ALL=(ALL) ALL", sudoто не будет никакой дополнительной защиты. Однако вы можете указать список привилегированных команд, которые вам нужно часто запускать, например, установку новых пакетов, и исключить опасные команды, такие как rm.

Таким образом, вы сможете запускать все команды, если войдете в систему как root, но поскольку вам это понадобится лишь изредка, риск запуска <game ending command>будет существенно снижен.

Связанный контент