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

37

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

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

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

    
задан bmcentee148 21.02.2018 в 03:14
источник

6 ответов

40

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

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

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

Есть, вероятно, больше преимуществ, но это основные, IMHO.

См. также - Ссылка

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

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

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

    
ответ дан Panther 21.02.2018 в 03:38
источник
9

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

Вы случайно набираете

rm -rf /*

вместо

rm -rf ./*

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

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

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

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

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

    
ответ дан dijksterhuis 21.02.2018 в 13:03
9

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

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

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

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

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

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

    
ответ дан Dubu 21.02.2018 в 16:00
2

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

    
ответ дан P. Goetterup 21.02.2018 в 08:22
0

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

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

    
ответ дан Dmitry Grigoryev 21.02.2018 в 15:57
0

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

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

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

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

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

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

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

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

Судо не совершенен.

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

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

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

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

    
ответ дан Ben Aveling 22.02.2018 в 05:13