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

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

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

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

starkers@ubuntu:~/Desktop$ mkdir foobsstarkers@ubuntu:~/Desktop$ sudo chmod 777 -R foobssudo: /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 foobsbash: cd: foobs: Permission denied

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

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

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

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

sudo apt-get dist-upgrade

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

suapt-get dist-upgradeexit

С помощью 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/, это предупреждающий знак о том, что вы делаете что-то не так.

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

$ sudo passwd root

Затем вы сможете войти в систему от имени пользователя root, выполнив su используя этот пароль.

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

$ chmod 777 -R foobs

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

$ sudo -i

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

Вы почти никогда не должны делать “chmod -R 777 whatever”, если только вы не хотите создать огромный риск для безопасности.

@BroSlow Спасибо за топ. Вне этого вопроса, но как можно было бы безопасно установить права на чтение и запись в каталог? 666?

Определенно лучше, но зависит от того, что вы пытаетесь сделать. например, вам действительно нужно, чтобы все пользователи имели r / w доступ ко всему. Если нет, вы могли бы сделать что-то вроде 644 (только для чтения для всех, кроме вас). И вообще, я был бы очень осторожен при выполнении рекурсивного chmod, чтобы он изменял только те файлы, которые вы намеревались.

@broslow Ты под кайфом? 666 1) по-прежнему доступен для записи во всем мире и, следовательно, имеет ту же степень риска для безопасности, и 2) удаляет исполняемый бит, что означает, что он больше не сможет chdir в этот каталог.

@Starkers Реальная проблема безопасности, которую я вижу здесь, заключается в том, что по какой-то безумной причине /var/lib/sudo имеет значение world writable. Этого * не должно было происходить*, и вы должны попытаться выяснить, почему это произошло.

@Shadur Забыл о битах выполнения каталога, которые, очевидно, могут быть тривиально исправлены с помощью find whatever / -type d -exec chmod + x {} \; И я не буду отвечать тем же, но я думаю, вы обнаружите, что я никогда не говорил, что он должен использовать 666, хотя это меньший риск для безопасности, чем глобальная безопасность.

@BroSlow Вам, вероятно, придется выполнить эту команду несколько раз, потому что find не может выполнить chdir в каталог, в котором не установлен +x.

@Shadur “find” обрабатывает родителей раньше, чем детей, так что это не должно быть проблемой.