Почему плохо войти в систему как root?


192

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

Это может быть широко известно специалистам по Linux, но я действительно не знаю почему. Я помню, как всегда запускал как root, когда впервые попробовал Linux много лет назад (Redhat и Mandrake), и не помню, чтобы из-за этого возникали какие-либо проблемы.

На самом деле есть некоторые дистрибутивы, которые имеют ярко-красный фон с предупреждающими надписями в качестве обоев для пользователя root (SuSe?). Я все еще использую учетную запись «Администратор» для регулярного использования в моей установке Windows и никогда не сталкивался с какими-либо проблемами там.


15
Я думаю, что нет проблем с запуском программы от имени пользователя root. Просто вы можете навредить ядру своей ОС (даже sudoers может это сделать), если вы не слишком мудры в Linux. кроме этого я не думаю, что есть какие-либо проблемы. Но это только моя точка зрения.
Гаурав Бутола

1
Связанный вопрос здесь .
loevborg

Сложность перехода в режим root зависит от дистрибутива. Лично меня раздражает, что Fedora не позволяет вам «sudo» прямо из коробки. OpenSUSE и Ubunto имеют предварительно сконфигурированные sudo, хотя ... и поэтому, если вы выберете правильный дистрибутив, вы можете минимизировать раздражение от невозможности получить доступ к файлам.
Джангофан

4
@GauravButola, даже если вы эксперт, это все равно плохая идея, если приложение будет взломано.
стружка

2
@DaboRoss ОП комментирует, что он работает в Windows как администратор; из-за моего (небольшого) опыта работы в этой ОС мне кажется, что это больше похоже на Ubuntu: это привилегированная учетная запись в том смысле, что она может делать все, что вы хотите, но она запрашивает разрешение, например, перед установкой нового программного обеспечения. Так что, вероятно, эквивалентом использования пользователя «administrator» в окнах, переведенных на Ubuntu, будет запуск основного пользователя с настроенным sudo, чтобы он не запрашивал pass - прямой запуск от имени root намного более опасен.
Rmano

Ответы:


154

Это побеждает модель безопасности, которая существовала годами. Приложения должны запускаться с неадминистративной безопасностью (или как простые смертные), поэтому вам необходимо повысить их привилегии, чтобы изменить базовую систему. Например, вы не хотели бы, чтобы недавний сбой Rhythmbox уничтожил весь /usrкаталог из-за ошибки. Или ту уязвимость, которая была только что опубликована в ProFTPD, чтобы позволить злоумышленнику получить оболочку ROOT.

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


5
... и он защищает вас от превращения тривиальных ошибок в бедствиях. Я пользователь Unix / adm с 1990 года, но, тем не менее, я точно могу проскочить пробел в совершенно неправильном месте, делая rm -rf tmp/tests/*...
Rmano

9
1.) Большинство людей считают свой домашний каталог более важным, чем корневые каталоги, поскольку первый не может быть переустановлен. Так что я не вижу твоей точки зрения. 2.) В плане безопасности вы правы. Но из окон (где ПУТЬ больше вредоносного ПО), где я использовал учетную запись администратора с тех пор (как это делают многие), мне трудно считать это реальной опасностью. Мне просто лень вводить sudoи вводить пароль для каждой второй команды в Linux. Разве пользователи Linux не должны быть ленивыми ?????
phil294

не согласен -_-: ~: |
Edgy1

@LazyPower спасибо за редактирование вашего ответа, но теперь я его больше не понимаю. Для изменения моей личной папки Ubuntu ~ программы не нуждаются в правах sudo. Rhythmbox МОЖЕТ уничтожить весь каталог $ HOME / Music! И это все, что меня волнует! Как это связано с правами root?
phil294

1
Это хороший призыв @Blauhirn. Я только что отправил последующее редактирование, чтобы отразить, что мы не хотим, чтобы оно полностью удаляло / usr. С точки зрения защиты ваших папок $ HOME ничто, кроме хорошей резервной копии, не может вам помочь. Я не думаю, что этот конкретный сценарий будет связан с безопасностью так же хорошо, как с хорошей практикой. Еще раз спасибо за выноску.
lazyPower

79

Одно слово: безопасность.

  1. Вы вошли в систему как root = все приложения работают с привилегиями root - каждая уязвимость в Firefox, Flash, OpenOffice и т. Д. Теперь может разрушить вашу систему, потому что возможные вирусы теперь имеют доступ повсюду. Да, вирусов для Ubuntu / Linux очень мало, но это также из-за хорошей безопасности и непривилегированного пользователя по умолчанию.
  2. Речь идет не только о вирусах - небольшая ошибка в приложении может стереть некоторые системные файлы или ...
  3. Когда вы вошли в систему как root, вы можете делать все - система не спросит! Вы хотите отформатировать этот диск? Хорошо, всего один клик, и все готово, потому что вы root и знаете, что делаете ...

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

5
@kbeta вы предполагаете, что работаете на компьютере, где единственными ценностями являются ваши данные и системные файлы. На самом деле linux часто используется в системе, где множество пользователей используют систему одновременно. В этом случае стабильность системы (и, следовательно, системных файлов) является гораздо более ценной, и другие пользовательские файлы также важны.
Эрик Поли

2
@kbeta Справедливо, но поврежденная конфигурация системы также может представлять риск для ваших данных ... и, конечно, наличие резервных копий было бы хорошей идеей, если ваша система в настоящее время подвергается риску или нет. Работать с текущим резервным копированием с планом аварийного восстановления было бы еще лучше.
Прифтан

47

Запуск от имени root плох, потому что:

  1. Глупость. Ничто не мешает тебе делать глупости. Если вы попытаетесь изменить систему в любом случае, что может быть вредным, вам нужно сделать sudo, что в значительной степени гарантирует паузу, пока вы вводите пароль, чтобы вы поняли, что собираетесь сделать возможное большое / дорогостоящее изменение.
  2. Безопасность: это уже упоминалось несколько раз в этом вопросе, но в основном это одно и то же, сложнее взломать, если вы не знаете учетную запись администратора. root означает, что у вас уже есть половина рабочего набора учетных данных администратора.
  3. Вам это действительно не нужно: если вам нужно запустить несколько команд от имени пользователя root, и вас раздражает необходимость вводить пароль несколько раз, когда срок действия sudo истек, все, что вам нужно сделать, - sudo -iи вы теперь являетесь пользователем root. Хотите выполнить некоторые команды, используя каналы? Тогда используйте sudo sh -c "comand1 | command2".
  4. Вы всегда можете использовать его в консоли восстановления: консоль восстановления позволяет вам попытаться восстановиться после глупых действий или устранения проблемы, вызванной приложением (которое вам все равно приходилось запускать как sudo :)). В Ubuntu нет пароля. для корневой учетной записи в этом случае, но вы можете искать в Интернете, чтобы изменить это, это усложнит для любого, кто имеет физический доступ к вашему ящику, возможность причинить вред.

Причина, по которой вы не смогли найти информацию о том, почему это плохо, заключается в том, что в Интернете слишком много данных :) и многие люди, которые давно используют Linux, думают так же, как и вы. Такой подход к учетной записи root довольно новый (может быть, десятилетие?), И многие люди все еще раздражаются, что им приходится использовать sudo. Особенно, если они работают на сервере, что означает, что они вошли с намерением внести системные изменения. Вероятно, это связано с прошлым плохим опытом и стандартами безопасности, которые большинство сисадминов знают лучше, но им все равно это не нравится :).


'Может быть, десятилетие?' Гораздо дольше, чем когда вы написали это. Даже без sudo есть su, не говоря уже, например, о группе колес (например). Разделение привилегий всегда важно, всегда было важно и всегда будет важно. Ото не так много людей использовали ОС на основе Unix, что много лет назад, и многие из них привыкли всегда быть администратором.
Прифтан

36

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

На рабочем столе редко используется rootучетная запись. На самом деле Ubuntu поставляется с отключенным доступом root. Все изменения, требующие привилегий суперпользователя, выполняются через sudoи его графические родственные gksudoи kdesudo. Однако, учитывая, что установить rootпароль легко , почему люди этого не делают?

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

Более допустимым моментом в однопользовательской системе является то, что пользователь не может случайно сделать систему непригодной для использования. Если пользователь непреднамеренно выполнит команду, удаляющую все файлы, он все равно сможет загрузить систему, даже если данные будут потеряны.

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

В многопользовательской системе только с неграфическим доступом к оболочке многие из этих причин не применимы. Тем не менее, Ubuntu по умолчанию разумно использует недоступный rootаккаунт. С одной стороны, существует реальная разница между получением доступа к учетной записи пользователя (с sudoправами) через дыру в безопасности и получением доступа root, поскольку в первом случае нарушение работы других пользователей потребует запуска sudoи все равно будет запрашивать пароль учетной записи как дополнительный шаг безопасности. С другой стороны, полезно выполнять множество административных задач из учетной записи пользователя и вызывать только sudoтогда, когда права суперпользователя абсолютно необходимы. Таким образом, при установке программы из исходного кода желательно создать исходный код - работающий configureиmake- внутри каталога пользователя и используется только sudo make installна последнем этапе. Опять же, это делает более трудным выстрелить себе (и другим пользователям многопользовательской системы) в ногу, и это уменьшает вероятность создания сценариев сборки, наносящих ущерб системе. Таким образом, даже на сервере рекомендуется придерживаться администрирования Ubuntu на базе sudo .


2
he will still be able to boot the system, even if the data will be lost.- Какой в ​​этом смысл? Если мои данные будут потеряны, мои данные будут потеряны и все. Системное программное обеспечение Linux можно переустановить, если оно будет удалено. Почему я должен заботиться о потере данных в таких каталогах? С другой стороны, потеря данных в ~это плохо. И sudoне защищает меня от этого.
phil294

2
Еще одна хорошая практика - создавать резервные копии важных данных. Если вы уничтожите домашний каталог, вы все равно сможете загрузиться и просто скопировать файлы из резервной копии. Или, скажем, у вас есть маленький ноутбук для путешествий. Там могут быть какие-то фотографии, путевые заметки, расписание поездов - но ничего особо важного. Если вы сотрете пользовательские файлы, вы все равно можете загрузить систему и зарегистрироваться на рейс или узнать, какой автобус взять.
Richlv

@Blauhirn Резервные копии. И есть шанс на выздоровление, даже если это выглядит мрачно.
Прифтан

34

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

В противном случае основными причинами отсутствия прав root являются:

  • Минимизировать риск повреждения от несчастных случаев. Если вы запускаете rm -fr / home/me/my-subdirс правами root, то вы просто радикально удалили все важные с вашей машины из-за этого места после (первого) слеша - потому что то, что идет первым, это то, что было добавлено первым - мелочи вроде ядра, /binи /etcкаталог. Unix расстраивается, если вы их потеряете.

  • Минимизируйте риск ущерба от вредоносных внешних сайтов. Если вы просматриваете как root, вы более уязвимы для загрузки вредоносного материала.

Я использую MacOS X чаще, чем Ubuntu, но там root по умолчанию отключен, и он все еще находится на моей машине. Я регулярно обновляю ядро ​​и другие подобные операции - используя sudo(за кадром). Подобные методы применимы к Linux в целом.

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


1
Речь идет не о том, чтобы обвинять кого-то, а о том, чтобы понять, почему кто-то внес изменения.
Джиппи

2
@jippie: Я имею в виду «обвинять» так же, как VCS отслеживает, кто что сделал, так что правильный человек получает ответственность за изменение, хорошее или плохое, и одно из названий команды, которая выполняет это отслеживание. это «вина». Это дает вам возможность поговорить, чтобы узнать, почему что-то произошло. Это не всегда «ошибка» (хотя удручающе часто, причина необходимости знать это потому, что что-то работает не совсем так, как ожидалось, и нужно знать, почему нет). Таким образом, речь идет об ответственности и отслеживаемости, а не обвинив человека в том, что он сделал.
Джонатан Леффлер

В Ubuntu такие команды, как rm -fr / home/me/my-subdirфактически, не пытаются рекурсивно удалять /, потому что они /обрабатываются специально для защиты от таких ошибок. Подробности смотрите в документации по опциям --preserve-rootи . Но принцип здравый: существуют односимвольные опечатки , которые приводят к удалению всего. Например, если вы хотите удалить все в текущем каталоге, запустив , но случайно вставили ранее , это было бы плохо. --no-preserve-rootman rmrmrm -r */*
Элия ​​Каган

@EliahKagan Но все же, если бы вы сделали ... chown -R nobody:nobody ../скажем / etc, это защитило бы вас? Если вы сделаете это в / etc, это причинит вам боль. Точно так же, .*когда рекурсивно выполняется команда.
Прифтан

21

TL; DR: Делайте вещи как root только тогда, когда вам нужно. sudoделает это довольно легко Если вы включаете root-логины, вы все равно можете следовать этому правилу, вам просто нужно соблюдать осторожность. Хотя включение корневых учетных записей на самом деле небезопасно, если все сделано правильно, вам не нужно включать корневые учетные записи, потому что у вас есть sudo.

Здесь действительно два связанных вопроса.

  • Почему плохо входить в систему как пользователь root для повседневного использования компьютера (просмотр веб-страниц, электронная почта, обработка текстов, игры и т. Д.)?
  • Почему Ubuntu по умолчанию вообще отключает входы в систему root и использует sudoи polkit, чтобы позволить администраторам запускать определенные команды от имени пользователя root?

Почему бы не запустить все как root, все время?

Большинство других ответов покрывают это. Это сводится к:

  1. Если вы используете полномочия root для задач, которые не требуют их, и в конечном итоге вы делаете то, что не хотели делать, вы можете изменить или повредить свою систему так, как вам не нужно.
  2. Если вы запускаете программу с правами root, когда вам это не нужно, и она в конечном итоге делает что-то, чего вы не хотели делать - например, из-за уязвимости в системе безопасности или другой ошибки - она ​​может измениться или нанести вред ваша система так, как вы не хотите.

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

Конечно, у пользователя root есть дополнительные способы случайно уничтожить те же данные. Например, вы можете указать неверный of=аргумент для ddкоманды и записать необработанные данные поверх ваших файлов (что делает их более трудными для восстановления, чем если бы вы просто удалили их).

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

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

Почему бы не сделать возможным вход в систему как root?

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

  • Например, OpenBSD , которая широко и разумно считается самой безопасной ОС общего назначения в мире, поставляется с корневой учетной записью, включенной для локального входа на основе пароля.
  • Другие уважаемые ОС, которые делают это, включают RHEL , CentOS и Fedora .
  • Debian (из которого происходит Ubuntu ) предлагает пользователю решить, какой подход будет настроен во время установки системы.

Это не объективно неправильно иметь систему, в которой включена корневая учетная запись, при условии, что

  1. вы все еще используете его только тогда, когда вам действительно нужно, и
  2. вы ограничиваете доступ к нему соответствующим образом.

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

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

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

  • Локально, из неграфической виртуальной консоли .
  • С помощью suкоманды при входе в систему с другой учетной записи.

Однако существенные дополнительные риски безопасности возникают, если вы входите в систему как root следующими способами:

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

    Кроме того, есть причина, не связанная с безопасностью, чтобы избежать этого. Графический вход в систему как root не поддерживается - как отмечает loevborg , разработчики настольных сред и графических приложений не часто тестируют их как root. Даже если они это сделают, вход в графическую среду рабочего стола в качестве пользователя root не будет проходить реальное альфа- и бета-тестирование пользователями, поскольку почти никто не пытается это сделать (из соображений безопасности, описанных выше).

    Если вам нужно запустить определенное графическое приложение от имени пользователя root, вы можете использоватьgksudo или sudo -H. Это запускает гораздо меньше программ с правами суперпользователя, чем при графическом входе с учетной записью root.

  • Дистанционно. По rootсути, учетная запись может делать что угодно, и она имеет одинаковое имя практически во всех Unix-подобных системах. Войдя в систему как root с помощью sshили с помощью других удаленных механизмов, или даже настроив удаленные службы, чтобы позволить это , вы значительно упростите для злоумышленников, включая автоматизированные сценарии и вредоносные программы, работающие в бот-сетях, доступ через грубую силу, атаки по словарю (и, возможно, некоторые ошибки безопасности).

    Возможно, риск не очень высок, если вы разрешаете только основанные на ключе , а не основанные на пароле корневые учетные записи.

По умолчанию в Ubuntu не разрешены ни графические входы в систему root, ни удаленные входы через SSH, даже если вы включаете вход в систему как root . То есть, даже если вы включите root-вход, он по-прежнему будет активен только в достаточно безопасных режимах.

  • Если вы запускаете ssh-сервер в Ubuntu и не изменились /etc/sshd/ssh_config, он будет содержать строку PermitRootLogin without-password. Это отключает основанный на пароле вход в систему root, но разрешает вход на основе ключа. Однако по умолчанию ни один ключ не настроен, поэтому, если вы его не настроите, он тоже не будет работать. Кроме того, удаленный вход в систему на основе ключей гораздо менее опасен, чем удаленный вход в систему на основе пароля, отчасти потому, что он не создает риск атак методом перебора и словарных атак.
  • Несмотря на то, что настройки по умолчанию должны защищать вас, я думаю, что все же будет хорошей идеей проверить вашу конфигурацию ssh, если вы собираетесь включить учетную запись root. И если вы используете другие сервисы, которые предоставляют удаленный вход в систему, например, ftp, вы должны также проверить их.

В заключение:

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

Для получения дополнительной информации о root и sudo, в том числе о некоторых дополнительных преимуществах, sudoкоторые я здесь не освещал, я настоятельно рекомендую RootSudo в справочной вики Ubuntu.


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

13

Корневая учетная запись по умолчанию отключена - это означает, что она существует, но ее нельзя использовать (кроме как в режиме восстановления). Это означает, что злоумышленник знает о вашей учетной записи root, но не может использовать ее, даже если у него / нее был пароль root. Таким образом, злоумышленник должен угадать как имя пользователя с правами администратора, так и пароль этого пользователя (что гораздо сложнее, чем просто попытка определить пароль root). В XP, если у вас установлена ​​консоль восстановления, любой, кто имеет физический доступ к вашему ящику, может загружаться в него (RC) - пароль не требуется. То же, что и режим восстановления в Ubuntu.

В Ubuntu, когда говорят, что рут отключен, на самом деле подразумевается, что учетная запись заблокирована. Учетная запись блокируется путем изменения пароля на значение, которое не соответствует ни одному из возможных зашифрованных значений. Это фактически препятствует тому, чтобы кто-либо мог войти в систему как пользователь root, поскольку не было бы никакого способа, которым они могли бы ввести пароль. Поскольку по-прежнему требуются права доступа root, ядро ​​Ubuntu было изменено, чтобы разрешить локальный вход в систему root только в однопользовательском режиме.

Также смотрите эту страницу


Um. Без обид, но вы можете прочитать заголовок вопроса, а затем снова прочитать детали.
Mussnoon

3
Это очень полезно - и это действительно относится к этому вопросу. Он связан с последствиями безопасности для включения учетной записи, что является обязательным условием для запуска от имени пользователя root.
Стефано Палаццо

1
@ Стефано Палаццо: Хотя предоставленная информация может быть полезной, я искренне не вижу, в какой части находится ответ на то, что мне нужно было знать. Я прочитал это несколько раз.
Mussnoon

Не мешает людям войти в систему под root.
Чад

12

Это все равно, что вооружить маленького ребенка с АК-47, в то время как он может счастливо играть со своим пейнтбольным пистолетом. ;)

Я имею в виду, что это неправильно, потому что у вас и ваших приложений будет больше привилегий, чем им нужно, и именно тогда все может и иногда пойдет не так :(


5
более умная аналогия. (^_^)
kit.yang

2
Это совершенно неуместная аналогия. Ребенок с AK47 может убить себя и других людей. Unix-пользователь с доступом с правами root может сделать систему временно неработоспособной. (Всегда можно переустановить ОС и восстановить работу).
Кбета

@kbeta Вы правы, моя аналогия немного преувеличена и преувеличена. пожалуйста, продолжайте.
omeid

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

11

Очень хороший вопрос ... Позвольте мне ответить на него с практической точки зрения:

Когда я начал использовать Linux, который более 10 лет назад, основные дистрибутивы не рекламировали с использованием учетных записей без полномочий root, как сегодня. Поскольку я привык к Windows, я также не видел смысла в использовании ограниченной учетной записи пользователя. В частности, потому что мне приходилось часто вводить «su» - тогда sudo не было так популярно. ;-) Так что я всегда входил в систему как root, потому что мне нужно было много обслуживания, чтобы правильно настроить мою систему. Но угадайте, что любая свежая установленная система стала очень нестабильной.

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

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

Но хорошо: современные дистрибутивы выполняют большинство административных задач за вас, поэтому вам редко приходится вмешиваться в вашу систему Linux с учетной записью root. Время от времени достаточно вводить пароль, остальное - скрипты дистрибьютора.

Но я сомневаюсь, что у вас не было проблем в вашей системе Windows с этим, если вы использовали 95 или 98. (По крайней мере, у меня были проблемы с этим ...) Из-за отсутствия четкого разделения между администратором и обычным пользователем "традиционный «Приложения для Windows предполагают, что они могут делать все, например, устанавливать шпионское ПО, если им так хочется, даже не говоря вам об этом. Microsoft занималась этим вопросом при выпуске Vista. (Эффективно реализуя механизм sudo.) Таким образом, люди получили очень раздражающие диалоги, говорящие: «Вы не можете этого сделать». Для некоторых не-Vista-совместимых программ вам потребовалось несколько грязных хаков, даже если вы были администратором ...


«Возможно, я не совсем точен, потому что я не знаю точного механизма, но когда вы заполняете диск учетной записью без полномочий root, всегда остается несколько килобайт». Возможно, вы ссылаетесь на каталог lost + found? Если это так, вы можете как администратор указать, сколько резервировать. Я хочу сказать, что типичное значение по умолчанию составляет 5%, но я могу ошибаться и его можно изменить. Это довольно полезно, хотя даже редко требуется. Видимо есть больше на этом здесь (я помню из моих лет использования): unix.stackexchange.com/questions/18154/...
Pryftan

Очевидно, это не ограничивается файловыми системами ext: unix.stackexchange.com/questions/7950/…
Филипп

Ага. Я знал это :) Но спасибо, что добавил это тоже.
Прифтан

10

У этого подхода много аспектов. Некоторые из них:

  • Рут это все мощно.
  • В Unix и Unix-подобных системах привилегии системного администратора - все или ничего. Пользователь либо имеет root-доступ, либо нет, а root-доступ подразумевает полный контроль над машиной. Если рассматриваемая машина используется более чем одним человеком, или root имеет доступ к другим системам или пользовательским файлам, более приемлемо предоставить некоторым пользователям частичные привилегии root.

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

  • Пароль root дает вам доступ к любой команде в системе.
  • С помощью своего конфигурационного файла sudo может предоставить пользователю root-доступ для определенного набора команд. Это также позволяет избежать эффекта «все или ничего», что позволяет нам предоставлять отдельным пользователям больший контроль над своими машинами и избавлять себя от общих проблем.

    вот хорошая статья: http://cf.stanford.edu/policy/root


    Но когда у вас полный sudo, вы можете sudo su и скрыть свои действия.
    Вильгельм Эразмус

    8
    rm /*
    

    Допустим, вы убирали административный район. Вы устали от пароля, так что вы sudo su. Ты отвлекаешься только на секунду и забываешь, что можешь /. Тогда ты rm *. Я сделал это. Вы можете получить все это обратно, но это ПИТА. О, и это тоже сошло /media!


    10
    Мы всегда жалуемся на то, что наш компьютер работает слишком медленно, но похоже, что они оптимизированы для максимально быстрой работы rm.
    Джиппи

    1
    @jippie Потому что RM просто уничтожает ссылку на файл inode. Не занимает много времени, чтобы удалить ссылку и пометить пробел как "свободный".
    Каз Вулф

    @jippie, он должен иметь сборку за 10 секунд
    HopefullyHelpful

    7

    Почему бы не иметь root-логин?

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

    Sudo - это альтернатива предоставлению людям пароля root для выполнения обязанностей суперпользователя. При установке Ubuntu по умолчанию человеку, который установил ОС, по умолчанию предоставляется разрешение «sudo».

    Любой, имеющий разрешение «sudo», может выполнить что-то «как суперпользователь», предварительно ожидая sudoкоманды. Например, чтобы работать apt-get dist-upgradeот имени суперпользователя, вы можете использовать:

    sudo apt-get dist-upgrade
    

    Преимущества подхода sudo

    • С помощью sudo вы заранее выбираете, какие пользователи имеют доступ к sudo. Им не нужно запоминать пароль root, так как они используют свой собственный пароль.

    • Если у вас несколько пользователей, вы можете отозвать права суперпользователя, просто удалив их разрешение sudo, без необходимости изменять пароль root и уведомлять всех о новом пароле.

    • Вы даже можете выбрать, какие команды пользователю разрешено выполнять с помощью sudo, а какие команды запрещены для этого пользователя.

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

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

    С помощью sudo у вас все еще есть возможность открыть постоянную (интерактивную) оболочку суперпользователя с помощью команды:

    sudo su
    

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

    И аналогично, вместо su -оболочки входа в систему вы можете использовать sudo su -или даже sudo -i.

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

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

    Почему бы не разрешить root-вход через SSH?

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

    Потенциальные выгоды для этого в основном связаны с безопасностью:

    • Это уменьшает вектор атаки, устраняя возможность грубого взлома пароля root. Обычно сервер в Интернете постоянно подвергается попыткам взломать пароль root через SSH.

    • Это создает более аудита , так что даже в случае нарушения , когда злоумышленник делает получить привилегии суперпользователя позже, вы можете увидеть , чья учетная запись пользователя была использована для получения доступа.


    6

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


    5

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


    5

    Я могу добавить, что есть разница между Администратором в Windows и root в Unix. Администратор все еще имеет некоторые ограничения в системах, где root не имеет никаких ограничений. Правильный аналог root в Windows - системный пользователь.

    Плохая вещь для использования ПК под root / System состоит в том, что вы можете случайно уничтожить что угодно без предупреждения от ОС.


    3

    Причины использования root:

    • Может случайно уничтожить системные файлы
    • Может заразиться
    • Не регистрирует действия

    Причины использования root:

    • Доступ ко всему, без ввода паролей
    • GUI, нет необходимости использовать терминалы для управления системными файлами / каталогами

    Мне кажется, что учетная запись без полномочий root по-прежнему может стать жертвой этих причин против использования root. Самое большее, что она добавляет, - это подтверждение ваших действий. Я думаю, что до тех пор, пока вы знаете, что делаете, вы совершенно безопасны, используя root. Там я это сказал.


    Хотя технически есть способ регистрировать действия, включая каждую отдельную команду. Это касается каждого пользователя. См. Учет процессов, например, здесь: linuxjournal.com/article/6144 И это действительно безопасно, только если вам нужен root; иначе это не совсем безопасно (эксплойт и т. д.), даже если команда должна быть безопасной.
    Прифтан

    3

    Если приложения запускаются как root, нет гарантии, что ни одно из них не выполнится

    rm -rf /
    

    (Это пример команды , которая должна не быть запущена.)


    @StefanoPalazzo Этот пост не имеет смысла с удаленной командой, поэтому я откатил ваши правки - вы могли бы также удалить пост. Обратите внимание, что вопреки распространенному заблуждению, эта команда, как написано, на самом деле не удаляет файлы при запуске в системе Ubuntu, но она похожа на команды, которые делают. Так что, если вы обеспокоены тем, что кто-то может бездумно скопировать команду и уничтожить ее систему, это маловероятно. Подробности смотрите в документации по опциям --preserve-rootи . --no-preserve-rootman rm
    Элия ​​Каган

    Solaris рассматривает эту команду как неопределенное поведение согласно широкой интерпретации POSIX (и Брайана Кэнтрила) и выдает ошибку
    Джереми Хайек

    3

    Учитывая осведомленный и внимательный пользователь, я не уверен, что правильный ответ существует. Я не видел этот ответ, поэтому я подумал, что должен войти.

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


    3

    Нет никакой опасности при входе в систему как root, если использовать его осторожно.

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

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

    Следовательно, злоумышленник должен угадать не только пароль этого администратора, но и его логин. Что не очевидно, если пользователь, использующий sudo, имеет логин вроде kittyили gamerили что-то подобное.


    2

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


    1

    Это двуличная проблема с более чем одним ответом.

    Для некоторой проверки реальности на все те же, но о, такие ужасные ответы на это:

    desktop installations:

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

    server installations:

    • существует огромная разница между выполнением ваших коротких рабочих сессий в качестве пользователя root (при условии, что у вас есть логин без пароля, правильное управление ключами ssh для всех серверов - и fail2ban, настроенный для всех входов в систему с паролями, пока вы на нем все равно) и наличием каждого демона / службы работает со своим собственным пользователем (что является обязательным) - большинство людей, кажется, не осознают разницу
    • для удовольствия: попробуйте использовать инструменты управления конфигурацией с управлением версиями (ansible / puppet / salt / что угодно с файлами с git-сервера) только без root-доступа. (у вас есть какая-то форма AAA для этих специальных систем, а также для ваших систем мониторинга и резервного копирования, не так ли?)
    • также: по умолчанию rm -rf / не работает в большинстве основных дистрибутивов IIRC
    • на любом серьезном рабочем месте есть хост-хост / бастион для доступа к флоту серверов, который регистрирует все, что вы делаете в любом случае, что, вероятно, дополнительно защищено 2FA
    • если у вас есть sudo и нет jumphost, вы можете исправить журналы хостов так, чтобы они заканчивались тем, что вы хотите в любом случае, если они не отражаются в реальном времени, то есть.
    • когда журналы ssh также «очищаются», вы даже не можете доказать, что они были на хосте, если больше нет системы сетевого мониторинга.

    Для любого размера компании (читай: скорее всего, SOHO со статическим ip) между этими двумя крайностями, в которых отсутствуют надлежащие меры мониторинга / резервного копирования / автоматизации / ведения журнала, может оказаться полезным принудительное использование sudo на серверах. (Который обходится людьми, делающимиsudo su - ASAP после подключения, позволяя всем вашим намерениям регистрировать произошедшее и впадать в заблуждение даже без злонамеренных намерений, как только в систему войдет более одного пользователя root. меры для несоблюдения правил. Жизнь всегда находит способ.)

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

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


    Наконец, реальный и дифференцированный ответ вместо обычных мантр «никогда не делай этого». +1 и спасибо за это.
    Андреас Х.

    0

    В конечном счете, нет никакого вреда при запуске от имени root. Это просто параноидальные люди, которые думают, что переустановка ОС невозможна. Аргумент "Кто-то может поставить под угрозу программу ...", и что? если они это сделают, то они уже могут ввести ваш пароль в кейлог или просто отобразить запрос пароля root, и вы дадите им пароль. Снеси свою систему, потому что ты выбрал все в / и удалил? да ладно, выйди из установщика и переустанови. Это займет не более 20 минут, возьмите кофе и охладите. Root в порядке, я запускаю root столько, сколько себя помню, и вы знаете, что он делает? Это делает установку пакетов меньше головной боли. Вам не нужно вводить пароль root каждые 5 минут, как обычно. Вы не столкнетесь с проблемами при попытке сохранить / отредактировать системные конфигурационные файлы, потому что они только права root. Намного проще и лучше запускать с правами root.

    Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
    Licensed under cc by-sa 3.0 with attribution required.