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

40

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

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

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

bmcentee148
источник
2
Спасибо за создание этого вопроса, так что теперь есть что показать людям, которые продолжают говорить, что sudo безопаснее, но не могут это оправдать.
user253751

Ответы:

40

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

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

  • У sudo превосходное ведение журнала. Судо регистрирует каждую команду.
  • sudo позволяет лучше контролировать зерно Можно настроить sudo для предоставления корневого доступа к некоторым, но не ко всем командам.
  • sudo использует пароль для входа. Это защищает от необходимости давать пароль root (как это было бы с su) и относится к пункту выше, касающемуся более тонкого контроля / доступа к root.
  • В Ubuntu по умолчанию корневая учетная запись заблокирована. Это удерживает взломщиков, так как для входа в систему (удаленно через, скажем, 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. Например, вымогатель, который шифрует все ваши личные данные.
  • Если взломщик имеет доступ к оболочке к учетной записи с правами суперпользователя через su или sudo, взломщик может получить root-доступ с помощью ряда методов, выходящих за рамки этого обсуждения. В этом отношении ни sudo, ни su не превосходят.

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

пантера
источник
Было бы хорошо иметь возможность разрешить всем пользователям управление питанием (poweroff и reboot) при удалении при удалении, а не записи sudoers или имя группы.
mckenzm
8
Я считаю, что самое большое преимущество заключается в том, что каждая команда должна иметь права суперпользователя. В своем раннем опыте работы с Linux я обнаружил, что, как правило, всегда работаю с правами root по крайней мере в одном терминале, работая с системой. К сожалению, очень легко подать деструктивную команду в терминале из-за неправильного понимания или опечатки. Если это было в «корневом терминале», это может привести к восстановлению из резервной копии или переустановке. Судо защищал меня от этого много раз!
Ролингер
14
Отсутствие компрометации пароля root является, пожалуй, единственным большим преимуществом sudo. Вы можете дать разрешение root, не раскрывая никаких секретов.
Турбьерн Равн Андерсен
Вы можете не только ограничивать команды, но и даже ограничивать указанные аргументы. Но я не согласен с тем, что блокировка root имеет к этому отношение; потому что вы можете настроить ssh, чтобы не разрешать root-вход в систему. Однако есть кое-что еще с su по сравнению с sudo: sudo вы используете свой пароль пользователя, который на один пароль должен быть скомпрометирован, и, как правило, это не очень хорошая вещь. Как и все в этом мире, существуют разные способы достижения чего-либо, и это не значит, что один из них более правильный, чем другие, в 100% случаев, если вообще когда-либо. Тогда есть предпочтения.
Прифтан
Но, о-о-о, если более чем одному пользователю нужен root-доступ (это не то, с чем я столкнусь, потому что это просто ... в лучшем случае это горячая дискуссия), тогда у sudo есть преимущество.
Прифтан
10

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

Случайно набираешь

rm -rf /*

вместо того

rm -rf ./*

Ваша система теперь работает само по себе, и у вас есть 10 минут до истечения срока.

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

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

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

В плане безопасности есть кое-что, для чего sudo тоже лучше. Как говорит @Panther - регистрация, ограничения, пароль root - SPOF и т. Д.)

dijksterhuis
источник
4
Черт, тебе не нужно ждать так долго, если ты просто это делаешь ... chown -R nobody:nobody /или даже chown -R nobody ../как root. chmodКонечно, в рекурсивном режиме есть похожие проблемы. Но самое лучшее, что вы делаете, это то, что вы должны быть root, только когда вам это нужно; чем меньше у вас прав доступа, тем лучше для обычного использования.
Прифтан
2
+1 для программирования, когда вы похмелье, хотя.
abhicantdraw
4
Итак, как это отличается от sudo? Вы пишете sudo rm -rf /*вместо того, чтобы sudo rm -rf ./*и бум снова.
ilkkachu
2
@ilkkachu с точки зрения фактической команды, это имеет минимальное значение для того, что происходит. Но вы должны были явно указать, что вы хотите сделать это как root. В этом-то и дело. Безопасность - это управление рисками. Конечно, вы все еще можете кирпич системы. Но чем меньше у вас корневых привилегий, тем меньше шансов совершить роковую ошибку. Безопасность - это минимизация вероятностей.
dijksterhuis
2
@ilkkachu Потому что ты не будешь печатать sudo rm -rf ./*. Предположительно, у вас есть доступ на запись к материалам в текущем каталоге, поэтому вам не нужен sudo для этой команды. Таким образом , в typoed команды заканчивает тем rm -rf /*, что дает длинную строку «Отказано в доступе» сообщения, давая вам знать , что вам нужно , ctrl-cпрежде чем он попадает в материал вы можете удалить, вместо того , чтобы просто удалить все в /bin, /boot, /dev, и половина /etcперед тем Вы даже понимаете, что что-то не так.
Рэй
9

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

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

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

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

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

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

Dubu
источник
Вы говорите в Ubuntu, что вы не можете сделать: sudo su -или sudo su - root? Потому что я видел подобные утверждения, например, что у MacOS X нет root, но это совершенно неверно, когда нужно только выполнить первую команду ...
Pryftan
2
Конечно, есть учетная запись root . Я сказал, что вы не можете «напрямую войти в систему», то есть вы не можете ввести пользователя rootи пароль в приглашении для входа в систему или в диалоге входа в систему X и начать сеанс от имени пользователя root. Но вы можете использовать одну из ваших команд (я предпочитаю, так sudo -iкак она короче и я ленива), чтобы получить корневую оболочку.
Дабу
1
Пожалуйста, прочитайте мой комментарий еще раз :) Я сказал, что некоторые говорят, что MacOS X не имеет учетной записи root, но на самом деле она есть, и это напомнило мне об этом (я не приравнивал это к отсутствию учетной записи root в Ubuntu). Но, насколько я знаю, разработчики в Ubuntu были достаточно сумасшедшими, чтобы исправить sudo, чтобы не допустить этого, поэтому мой вопрос.
Прифтан
1
@Pryftan Как я уже говорил в моем комментарии выше, обе ваши команды работают и получат вам корневую оболочку. Я добавлю это к моему ответу.
Дабу
Да. Я знаю это :) Я не говорил, что это было ложно или нет. Я говорил, что это напомнило мне кое-что, что некоторые люди говорят, но неправильно говорят. Следовательно, делая эту часть жирным шрифтом.
Прифтан
2

В течение десятилетий можно было отключить root-вход через ssh. Способ Ubuntu отключить корневую учетную запись и заставить людей sudo все - не более, чем трюк. Просто "sudo -s" и у вас есть корневая оболочка. Отключите root-вход через ssh и оставьте его там.

П. Геттеруп
источник
8
... на этом замечании, использование только ключей для ЛЮБОГО входа в систему через ssh, а не только для учетной записи root, - отличная практика.
сторожевик
Да. Я отметил это в комментарии всего несколько минут назад. Otoh быть наименее привилегированным лучше всего, поэтому повышайте его только тогда, когда вам нужно, и это касается того, вошли ли вы в систему с помощью ssh или локально. И то, что говорит @rackandboneman, конечно, тоже абсолютно правильно, хотя для меня я отключаю удаленную полную остановку root даже с помощью ключей ssh ​​независимо от системы.
Прифтан
0

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

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

Дмитрий Григорьев
источник
1
И конкретные аргументы к командам тоже.
Прифтан
1
И для группы, а не для пользователя. использование групп неоценимо в многопользовательских средах, где сотрудники могут приходить и уходить и где вам могут понадобиться определенные роли.
Пантера
0

То, что sudo позволяет вам разрешать только определенные команды, не единственное преимущество sudo перед su.

В большинстве магазинов это даже не самое главное преимущество.

С помощью sudo вы знаете, кто выполнял определенную команду.

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

Но множество хостов имеют более одного администратора.

Тогда sudo становится очень полезным, потому что если кто-то поступает неправильно, sudo сообщает, кто это сделал.

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

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

Судо не идеален.

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

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

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

Но это дает вам гораздо больше шансов предотвратить повторение.

Бен Авелинг
источник
1. Только если вы потратите время, чтобы правильно его настроить. Что не делает система Ubuntu по умолчанию (и не может делать). 2. Только если у пользователя нет возможности редактировать журналы постфактум, что они могут делать, если только команды, которые они могут выполнять, не ограничены. (Чего нет в
сценарии
@ilkkachu, хотя у вас есть хорошие моменты, ваш аргумент здесь не имеет смысла. Дело не в настройках по умолчанию, дело в том, что можно настроить и настроить sudo. Вы не можете настроить su, чтобы действовать этими способами вообще. su - это все или ничего, нет способа ограничить команды, и фактически sudo обеспечивает превосходное ведение журнала. Ни su, ни sudo не предлагают никакой защиты от того, что взломщик может или не может сделать в скомпрометированной системе, и никто не удержал sudo таким образом. Журналы sudo имеют большое значение в повседневной работе.
Пантера
@Panther, ну, в заголовке вопроса написано "... если пользователю предоставлен доступ ко всем командам?" поэтому я предположил, что они имели в виду обычную конфигурацию Ubuntu по умолчанию, где sudoвсе разрешено. Конечно, вы можете настроить его так, чтобы ограничить количество команд, разрешенных пользователю, но я не думаю, что это так в вопросе, который был задан.
ilkkachu
Ответ расширен.
Бен Авелинг
@ilkkachu - перечитайте мой ответ: «Лично я не обязательно считаю его более безопасным, и большинство преимуществ (sudo) в многопользовательской системе. В однопользовательской системе это, вероятно, стирка». Затем я объяснил другие преимущества sudo, одним из которых является то, что он настраивается.
Пантера