Итак, я изучал различия между использованием 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>
будет существенно снижен.