Почему я должен использовать sudo почти для всего?

64

Если я правильно понимаю философию Linux, sudoее следует использовать экономно, и большинство операций следует выполнять как пользователь с ограниченными правами. Но это, кажется, не имеет смысла, так как мне всегда приходится вводить sudo, управляю ли я пакетами, редактирую ли файлы конфигурации, устанавливаю ли программу из исходного кода, или что у вас есть. Это даже не технические вещи, просто то, что делает обычный пользователь.

Это очень напоминает мне UAC Window, который люди либо отключают, либо настраивают так, чтобы пароль не требовался (просто щелчок). Кроме того, многие пользователи Windows также являются администраторами.

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

user139248
источник
25
Вы должны использовать sudoвсе, что связано с изменением системы, если вы просто работаете с собственными файлами / рабочим столом, вы ни на кого не влияете, поэтому вам не нужны повышенные привилегии. Если вы выполняете привилегированные команды без sudo, вы, вероятно, уже являетесь суперпользователем (то есть root), и это обычно менее целесообразно, чем использование sudo для конкретных общесистемных задач
Eric Renouf
75
«установка программы из исходного кода ... все, что делает обычный пользователь» - я думаю, вы переоценили технические навыки обычных пользователей.
Джонатан В ролях
7
Вы используете, sudoкогда вы не должны? Команды обычного пользователя Unix должны состоять в основном из cd: lsперемещения, копирования, удаления и редактирования файлов, к которым он имеет доступ. Если ваши обычные команды не состоят из этого, вы, вероятно, не обычный пользователь Unix.
user530873
20
Небольшой совет: если вы делаете что-то, для чего требуется sudo, но забыли добавить sudo в свою команду, вы можете использовать sudo !!для повторного запуска последней команды, набранной перед sudo.
asfallows
6
Вы не проводите большую часть своего времени, используя программное обеспечение, которое вы установили? Это не должно включать судо. Если нет, то почему вы его устанавливаете?
Стоп Harm Monica

Ответы:

75

Вы упомянули эти функции системного администрирования

управление пакетами, редактирование конфигурационных файлов, установка программы из исходного кода

как вещи, которые

все, что делает обычный пользователь

В типичной многопользовательской системе это не обычные действия пользователя; системный администратор будет беспокоиться об этом. Обычные пользователи (не «под привилегированным») могут затем использовать систему, не беспокоясь о ее обслуживании.

Да, в домашней системе вам приходится как администрировать систему, так и пользоваться ею.

Это действительно такие трудности в использовании sudo? Помните, что если это просто ваша система, то нет никаких причин, по которым вы не можете зайти в rootоболочку ( sudo -sсм. Этот пост для обзора различных способов получения корневой оболочки) и / или настроить, sudoчтобы не запрашивать пароль.

roaima
источник
47
нет никаких причин, по которым вы не можете [...] настроить sudo, чтобы не запрашивать пароль. Я бы не советовал, если вы запустите вредоносный скрипт, он сможет выступать в роли root в вашей системе.
AL
5
Если ввод пароля sudo раздражает вас настолько, что вы автоматически запускаете ввод пароля, то это тоже не поможет. Вы должны сбалансировать здравомыслие с безопасностью. Я с автопилотом sudo хотя бы раз удалил основные фрагменты ОС.
Нельсон
33
Лично я люблю sudo- это как проверка здравомыслия.
Макс Уильямс
6
@MaxWilliams, да, именно эта маленькая прозрачная пластиковая откидная крышка над большой красной кнопкой спрашивает, ты уверен, что знаешь, что делаешь?
KlaymenDK
15
@AL: Если я собираюсь запустить неизвестный скрипт, лучше не злонамеренно или я не уверен, что он запускает sudo. На моем персональном рабочем столе важны мои собственные (не root) данные, а не (root) конфигурация машины как таковой.
jrw32982 поддерживает Монику
31

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

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

Все это технически функции администратора, которые могут привести к серьезным повреждениям вашей системы, если что-то будет сделано неправильно. В корпоративной среде, как системный администратор, это вещи, которые я НЕ позволил бы своему пользователю делать без моего специального знания, следовательно, sudo.

Например, если файл пакета / конфигурации можно изменить без повышенных привилегий, для внешнего источника будет чрезвычайно просто выполнить удаленный код, который может сломать / поставить под угрозу вашу систему. Вынуждая эти действия требовать root-доступа, вы, как пользователь, принимаете решение о том, будут ли эти действия выполнены или нет.

Это очень похоже на работу UACс окнами, именно там у Windows появилась идея UAC.

Цитата, которую вы получаете при первом использовании sudo, очень уместна и очень важна:

Мы надеемся, что вы получили обычную лекцию от местного системного администратора. Обычно это сводится к этим трем вещам:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

Особенно # 2, подумайте, прежде чем печатать. Это важная причина существования sudo: когда вы набираете команду и она откатывается назад, «для выполнения этого действия нужно быть пользователем root», она заставляет вас остановиться и подумать о том, что вы на самом деле делаете.

подливка
источник
19

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

Вы должны выполнять эти команды как суперпользователь, но вам не нужно выполнять их с помощью sudo. Вы можете, например, вместо этого использовать suили doas(замена OpenBSD для sudo), или вы можете просто войти как root

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

Томас Вайнбреннер
источник
4
вы также можете использовать sudo -iили подобный, чтобы получить корневую оболочку, а затем начать запускать ваши корневые команды без необходимости предварять каждую из них сsudo
cas
2
Обычно шаги, которые необходимо выполнить как root, показываются с корневым приглашением, например, # vi /etc/hostsвместо непривилегированного приглашения $ vi /etc/hosts(Bash будет следовать соглашению, если вы используете \$в нем PS1)
Герт ван ден Берг
16

Одной из функций безопасности, предлагаемой компанией, sudoявляется то, что вы можете иметь систему без rootпароля , чтобы rootпользователь не мог войти напрямую. Это обеспечивает дополнительную защиту для пользователей, которые выбирают слабые пароли - злоумышленник, пытающийся взломать пароль (через SSH или иным способом), должен будет сначала определить действительное имя пользователя.

Другим аспектом является более детальное управление привилегиями. Подумайте о том, make; sudo make installчтобы делать make; make installкак root. Многие вещи могут пойти не так во время make. Плохо настроенный инструмент может попытаться перезаписать важный системный файл, «очистить» /libвместо текущего каталога, использовать всю доступную оперативную память и повесить систему и т. Д. make install- это небольшое простое действие с гораздо меньшей вероятностью фатальной ошибки.

Дмитрий Григорьев
источник
1
И даже если пароль root настроен, он позволяет вам предоставлять пользователю доступ к командам, требующим привилегий root, без предоставления им пароля root, а это означает, что если это сервер компании и они уволены, вам нужно только отключить его пользователя. , без необходимости менять пароль root.
Герт ван ден Берг
13

Дело в том, что исторически система действительно предназначена для совместного использования несколькими пользователями, которые просто входят в систему, выполняют некоторые действия и затем выходят из системы. Таким образом, различие между администратором и обычным пользователем. Такие системы все еще существуют в университетских лабораториях, и вы можете ощутить разницу, если будете использовать такие компьютеры. Домашний ПК, где вы являетесь единственным пользователем, а также вынужден выступать в роли администратора, действительно намного позже.

xji
источник
6
«По-прежнему существуют в университетских лабораториях» ... да, и каждая технологически ориентированная корпорация на планете, а также большинство нетехнических корпораций. Тем не менее, +1 за точное различие в том, что ОП явно отсутствует, и что большинство других опрошенных не смогли это подчеркнуть.
Wildcard
@ Wildcard Lol конечно. Просто поместите пример, который сразу же выскочил в моей голове, я думаю.
xji
10

Компьютер - это инструмент. Давайте попробуем провести аналогию с другим инструментом, скажем, сковородой. Иногда вам нужно позаботиться о вашей сковороде. Например, вы должны очистить его с мылом для посуды. Вы бы сказали, что мыло для посуды является обязательным ингредиентом любого рецепта, для которого вы используете сковороду? Вы никогда не увидите «мыло для посуды» в качестве ингредиента в кулинарных книгах. Это необходимо, но подготовка инструмента - это другое дело, поэтому в кулинарных книгах это не упоминается. Сковорода должна быть очищена, но это не то, для чего она сделана.

Это то же самое для вашего компьютера. Он должен быть настроен и заботиться, но это не то, для чего он сделан. Вы заботитесь об этом, вы настраиваете его, чтобы он мог работать должным образом. После этого вы можете использовать его не как системный администратор, а как пользователь. Вот для чего это сделано. Когда вы пользователь, вам больше не нужен sudo . Просто используйте инструмент, который вы подготовили заранее. Конечно, время от времени вам нужно будет использовать привилегии суперпользователя, так же, как вы должны чистить сковороду так же часто, как вы используете ее для приготовления пищи.

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

user2718996
источник
2
Отличная аналогия, но иногда вам нужно это мыло, чтобы вытащить какие-то неприятные обугленные остатки с вашей сковороды, прежде чем жарить яичницу, то есть обе вещи соединяются довольно легко. Имея компьютер, которым вы владеете, вы можете «мыть» / «жарить» его почти сразу же, sudoили вы просто идете шеф-поваром и делаете это su.
Armfoot
Похоже, вам нужен root-доступ для приготовления пищи, так как это более опасно.
deltaray
6

Бьюсь об заклад, это потому, что вы используете программное обеспечение с графическим интерфейсом для всего, кроме задач системного администрирования, или вы говорите о серверах Linux, и в этом случае большая часть доступа будет, естественно, системного администрирования. Поэтому может показаться, что делать что-либо вообще в оболочке требуется sudo.

Также возможно использовать оболочку для ваших повседневных задач. Управление вашими личными файлами ~, редактирование файлов, общение в IRC, компиляция кода, просмотр веб-страниц - все это выполнимо в оболочке. Я даже использую в bcкачестве калькулятора. Некоторые вещи легче сделать с помощью графического интерфейса, некоторые вещи легче сделать с помощью оболочки - даже если вы предпочитаете использовать графический интерфейс, оболочка будет часто превосходить в пакетных операциях и автоматизации (например, сценарии оболочки). Лично я использую то, что лучше для поставленной задачи.

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

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

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

Матти Вирккунен
источник
5

[...] Но это, кажется, не имеет смысла, так как мне всегда приходится вводить sudo, независимо от того, управляю ли я пакетами, редактирую ли файлы конфигурации, устанавливаю ли программу из исходного кода или что у вас есть. [...]

Подразумеваемое прилагательное, связанное со всем этим, состоит в том, что они являются общесистемными или глобальными изменениями. Вы должны рассматривать происхождение Unix как многопользовательскую систему 1, где несколько пользователей будут использовать одну и ту же установку удаленно. Один непрофессионал не имеет смысла разрешать изменять глобальные настройки для всех пользователей. Это был системный администратор, корень, привилегия и ответственность.

В многопользовательской настройке у вас есть предустановленное программное обеспечение и его общесистемная конфигурация под /usrи /etcсоответственно. Прикосновение к этим местам потребует root-прав. Но поскольку программное обеспечение Unix написано для многопользовательских пользователей, вы можете скомпилировать и установить программное обеспечение в $HOME каталоге 2 и иметь собственные файлы конфигурации в своем доме, где вы можете свободно редактировать файлы, не будучи суперпользователем.

В дополнение к установке собственного программного обеспечения в домашних условиях, большинство системного программного обеспечения будет считывать пользовательскую конфигурацию $HOMEсразу после первого чтения конфигурации из /etc. Это позволяет настраивать практически все что угодно, даже не заходя root.

На домашнем ПК в одной основной настройке пользователя вы можете использовать sudoи получать доступ к тем вещам, которые вам нравятся. Но обычно не трогать конфигурацию приложения, /etcа вместо этого всегда предоставлять пользовательскую конфигурацию в домашних условиях. Таким образом, вы можете позволить вашему менеджеру пакетов сбросить общесистемные настройки при обновлении. Установка нового программного обеспечения в масштабе всей системы вполне подходит для однопользовательской настройки; Пакеты дистрибутивов не предполагают альтернативы, поэтому это простой выход.

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

Если у вас есть файлы с данными, хранилище вне вашего $HOME, вы можете свободно chownили chgrpкаталоги на ваше имя, чтобы вы могли получить доступ к файлам без sudo.

[1] (немного иронично, так как Unix должен был быть «однопользовательской» версией операционной системы Multics)

[2] (если система позволяет это, не монтируя домашние разделы как noexec)

unperson325680
источник
2

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

Но даже в однопользовательских домашних системах это не обычные действия пользователя . Обычно это может понадобиться при первоначальной настройке системы, но как только она будет завершена, обычному пользователю не придется делать это очень часто . Большинство обычных пользователей просто работают с файлами внутри своего домашнего каталога (или его подкаталогов), используя программы / пакеты, которые уже установлены, и вам это не нужно sudo. Или они могут работать в специальном каталоге где-то еще в системе, который был выделен для этой цели, и вам нужно sudoнастроить это, но обычно вам нужно сделать это только один раз.

Почему это имеет значение? Поскольку «однопользовательский» является неправильным: вы не единственный пользователь вашего компьютера, даже если вы могли бы быть его единственным человеком пользователя . Даже при обычной домашней установке Linux многие программы настроены на использование компьютера различными способами, зачастую имитируя то, что может сделать человек, если у него есть время и внимание: резервные копии, обновления, сканирование на наличие вредоносных программ и любить. В большинстве случаев такое использование совершенно безобидно, но даже для некоторых из них все же разумно убедиться, что пользователь действительно хочет это сделать. И когда эти случаи возникают, это то sudo, для чего. Компьютер просто регистрируется, чтобы убедиться, что вы действительно хотите сделать то, что кто-то (может быть, вы, может быть, программа) сказал, что вы сделали, И это даже не касается возможности вредоносных программ, которые вы, конечно, не хотите маскировать под себя.

Ложка
источник
1

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

  • Размонтировать и унести флешку. umountэто серьезная команда, так как вы можете размонтировать множество вещей с ее помощью.
  • Подключитесь к локальной беспроводной сети. Ничего необычного, но конфигурация сети ( ifupи т. Д.) Предназначена только для суперпользователя.
  • Самообновляющиеся приложения, которые не запускаются, если не обновляются. Обновление = установка, и это может установить много вещей, включая вещи, которые вы не хотите.

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

h22
источник
0

Предположение: это ваша система и ваши данные.

Вам просто нужно взвесить риск случайного стирания данных или перегрузки вашей ОС в сравнении с простотой выполнения операций без необходимости sudoкаждый раз печатать .

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

Вам скажут, что вы можете запустить ядерное оружие, если вы не пойдете, хотя святой, sudoно реальность такова, что сегодня люди имеют rootполномочия (*) на множество устройств (ваш телевизор, ваш телефон, ваш тостер, ваш Windows (как ты упомянул)). Linux здесь ничем не отличается, хотя многим нравится думать иначе.

BTW UACне был смоделирован после того, sudoкак его роль человека (помимо того, чтобы сделать вашу жизнь несчастной), чтобы убедиться, что вы увидите, когда вредоносные программы хотят делать что-то от вашего имени.

(*) rootполномочия определяются как способность уничтожать важные данные. Применяется поговорка «с великой силой возникают большие проблемы» (или что бы то ни было)

Если мое предположение неверно, тогда вам все равно нужно взвесить вышеупомянутый риск, но есть и другие переменные (ваша работа, фотографии, сделанные вашим супругом и сохраненные на том же ноутбуке, ...)

WOJ
источник
1
корневые полномочия - это не способность уничтожать важные данные. Вы всегда можете rm -rf ~/без каких-либо специальных разрешений. С другой стороны, вы не можете заблокировать свой мобильный телефон или телевизор без предварительной рутирования.
Дмитрий Григорьев
Устройство так же полезно, как и данные, которые оно хранит, и услуги, которые оно предоставляет. Аппаратное обеспечение и ОС, представленные ниже, являются простым товаром. Таким образом, сила - это то, где вы можете влиять на услуги или данные. На телевизоре вы можете стереть все свои настройки - телевизор не работает (до восстановления данных). Вы можете стереть все свои данные на мобильном телефоне, который затем становится частью аппаратного обеспечения без какого-либо использования. Это то, что я имел в виду под «корневой силой»
WoJ
1
На самом деле, называть это «корневой силой» неправильно. Слово «root» уже перегружено, чтобы обозначать как минимум три разные вещи (пользователь root, каталог / и каталог / root), и добавление другого бесполезно. На однопользовательском компьютере, даже если непривилегированный пользователь уже может удалять свои собственные файлы, его неспособность выполнять определенные административные задачи без использования sudo по-прежнему защищает его от различных плохих вещей.
Монти Хардер
1
Ваша телевизионная аналогия не очень хорошая. Стирание настроек на вашем телевизоре похоже на стирание пользовательских конфигурационных файлов в Linux - обычно это просто заставляет систему работать в соответствии с определенным набором параметров по умолчанию для этого пользователя и обычно не наносит никакого вреда системе. Root позволяет вам модифицировать саму систему - на телевизоре это будет похоже на изменение прошивки, и в этом случае вы можете лишить ее возможности работать.
JBentley
1
Вот почему существует оценка риска. Вы оцениваете риски совершения чего-либо (что имеет свои плюсы и минусы) и принимаете, смягчаете или страхуете. Восстановление может быть простым (докер, снимки виртуальной машины) или сложным (установка с нуля) - это вопрос планирования и, опять же, оценки. Но, как вы упомянули, я не понимаю, что означает root-доступ, пусть так и будет.
WoJ
0

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

Большинство ответов здесь можно просто воспроизвести в цикле, потому что все они подчеркивают одно и то же в отношении sudo и root. Позвольте мне добавить другую точку зрения к этой теме:

Я выучил Unix и Linux наизнанку, используя один из моих компьютеров как «морскую свинку». Я бы установил SCO Linux и, в конечном итоге, Solaris, а затем и Linux, гораздо позже, все время радостно экспериментируя как root, чтобы я мог читать и / или исследовать иерархию каталогов и все файлы с неограниченным доступом, а также создавать учетные записи «обычных пользователей» в моем доме. - выросла многопользовательская коробка, хотя я был единственным пользователем. И я рад, что сделал это таким образом. Я так много узнал о «философии Unix» и о том, как Unix должен был использоваться в моих экспериментах.

Я получил удовольствие, узнав о безопасности, а также выполнил опасные команды, набрав в терминале rm -rf / * в качестве пользователя root. (НЕ ДЕЛАЙТЕ ЭТОГО! В ЭТОЙ СИСТЕМЕ БУДЕТ !!) Я делал такие вещи и многие другие команды, просто чтобы посмотреть, что произойдет в режиме реального времени. Я делал подобные вещи заранее, зная последствия, но все же многому научился, делая это. Я использовал SCO Unix LONG еще до того, как появился Интернет (да, я такой старый!), И эксперименты таким образом были неоценимы для моего обучения.

Так что я хочу сказать, что если вы не возражаете против переустановки, когда что-то идет не так, используйте su или войдите в систему как root, как хотите, и настройте / взломайте! Таким образом, вы многому научитесь.

Просто помните, что совет, который много раз повторялся здесь, был повторен по уважительной причине: протоколы передового опыта развивались в течение десятилетий по мере развития compsec, и вы ДОЛЖНЫ обратить на них внимание, даже как домашний / одиночный пользователь вашей системы. , Таким образом, хорошая гигиена / привычки сисадмина станут для вас второй натурой.

Просто пища для размышлений на тему su и sudo. Удачного взлома!

мем
источник