Почему у меня нет пароля для «su»? Проблемы с «sudo»

34

Я установил Ubuntu с помощью графического интерфейса, давая себе пароль и все. Я не запутанно запомнил процесс. Однако меня беспокоит то, что я не знаю следующий пароль:

$ su
Password: <the only password I've ever created on this machine>
su: Authentication failure

Я просто не знаю, что делать. У меня нет проблем, но я просто хочу знать, что здесь происходит. Я также могу заблокировать себя из каталогов:

starkers@ubuntu:~/Desktop$ mkdir foobs
starkers@ubuntu:~/Desktop$ sudo chmod 777 -R foobs
sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700
[sudo] password for starkers: <the only password I've ever created on this machine> 
starkers@ubuntu:~/Desktop$ cd foobs
bash: cd: foobs: Permission denied

Я просто немного смущен. Как я могу запереть себя таким образом? Я думаю, что sudoэто ключевая команда здесь. Но я делаю foobsфайл настолько открытым, насколько это возможно, через chmod, так почему он блокирует меня?

помешанный
источник
6
Вы почти никогда не должны этого делать chmod -R 777 whatever, если только вы не хотите создать огромный риск для безопасности.
1
@BroSlow Спасибо за вершину. Вне этого вопроса, но как безопасно установить права на чтение и запись в каталоге? 666?
Starkers
1
Определенно лучше, но зависит от того, что вы пытаетесь сделать. Например, вам действительно нужно, чтобы все пользователи имели доступ ко всему. Если нет, вы можете сделать что-то вроде 644 (читать только для всех, кроме вас). И вообще, при рекурсивном подходе я был бы очень осторожен, чтобы chmodизменить только те файлы, которые вы намеревались.
1
@broslow Ты высокий? 666 - это 1) все еще доступная для записи и, следовательно, та же степень угрозы безопасности, и 2) удаляет исполняемый бит, что означает, что он больше не сможет chdir в этот каталог.
Шадур
@Starkers Реальная проблема безопасности, с которой я сталкиваюсь, заключается в том, что по какой-то безумной причине /var/lib/sudoона доступна для записи. Этого не должно быть, и вы должны попытаться выяснить, почему это произошло.
Шадур

Ответы:

49

По умолчанию rootучетная запись superuser ( ) отключена и не имеет пароля. Вы можете создать его, запустив:

$ sudo passwd root

После этого вы сможете войти в систему как root, запустив suэтот пароль.

Что касается chmod, правильная команда будет:

$ chmod 777 -R foobs

Вы также можете использовать:

$ sudo -i

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

Oli
источник
4
@ Оли Может быть, вы можете отредактировать свой вопрос, чтобы добавить sudo su. Это также дает постоянные права su в терминале.
пробуждение
13
не используйте sudo su, поскольку это будет ввернуть в окружающую среду, и вещи сломаются. вместо этого используйте sudo -i.
Стружи
20
Не устанавливайте пароль root. Вы не установили пароль администратора.
wchargin
4
chmod 777 почти всегда плохой (sticky-бит освобожден; используется с / tmp). Этот ответ представляет угрозу безопасности. Плюс установка пароля root не является способом использования Ubuntu; снова приглашая угрозу безопасности. Пожалуйста, следуйте ответу neon_overload.
Rinzwind
4
@WChargin, почему вы предлагаете не иметь root-аккаунт / пароль? Мне искренне любопытно, как пользователю archlinux.
Роб
67

1. Почему у вас нет пароля root

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

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

sudo apt-get dist-upgrade

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

su
apt-get dist-upgrade
exit

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

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

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

sudo su

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

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

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

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


2. Проблемы с вашей командой chmod 777 -R

Ваш вопрос также имеет вторую часть: ваши проблемы с командой sudo chmod 777 -R foobs.

Во-первых, следующее предупреждение указывает на потенциально серьезную проблему безопасности на вашем компьютере:

sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700

Это означает, что на каком-то этапе вы настроены /var/lib/sudoна написание всего мира. Я полагаю, что вы сделали это на каком-то этапе с помощью команды вроде sudo chmod 777 -R /. К сожалению, сделав это, вы, вероятно, в значительной степени нарушили все права доступа к файлам в вашей системе. Маловероятно, что это будет единственный важный системный файл, права доступа которого были изменены, чтобы его можно было переписать. По сути, теперь у вас есть легко взломанная система, и единственный простой способ вернуть ее - это переустановить.

Во-вторых, команда, которую вы использовали:

sudo chmod 777 -R foobs

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

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

Почти наверняка chmod 777 -R [dir]это не подходящее решение для любой проблемы, которую вы пытались решить (и, как я уже упоминал выше, есть доказательства того, что вы сделали это и с системными файлами в / var / lib, и я предполагаю, что многие другие места).

Пара основных правил:

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

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

thomasrutter
источник
Потрясающее объяснение .. Недурно .. :)
Саурав Кумар
7
Я думаю, что «sudo -i» - это «официальный» способ получить корневую оболочку, а не «sudo su»
Макс
3
Да, вы должны использовать sudo -iболее sudo su.
Сет
sudo -i(или sudo su -) не всегда лучше, но просто разные - они запускают оболочку входа в систему, которая имитирует среду входа в систему пользователя root, которая выполняет, например, .profileфайл или .loginфайл пользователя root. Это лучше, если вы хотите, чтобы среда в оболочке была больше похожа на корневую оболочку входа в систему, чем на интерактивную оболочку с привилегиями суперпользователя. Это, вероятно , лучше использовать для входа на основе оболочек при использовании оболочки, но это тоо: точка ответа заключается в том, что Ubuntu в основном предназначен для использования sudoдля выполнения команд с привилегиями суперпользователя.
Томасруттер