Вопрос №55159 от пользователя Anna kra_ в уроке «Sudo», курс «Основы командной строки»

Anna kra_

Здравствуйте.

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

  1. На вопросы к уроку ответить не могу.

  2. Не понимаю эту формулировку:

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

Что означает «можно запустить новую сессию поверх текущей»?

  1. Не понимаю, о чём речь в этом кусочке кода:
$ sudo -i
$ id
uid=0(root) gid=0(root) groups=0(root)

Берём себе права суперпользователя и заранее объявляем, что в таком режиме введём несколько команд? Но вводим только одну: id
Потом получаем вывод
uid=0(root) gid=0(root) groups=0(root)

Пробую ввести ту же самую команду, но без -i

$ sudo   
$ id  

В выводе ничего не изменяется. Потом пишу exit и получаю неожиданный код:

comp:hexlet-hello-world anna$ exit
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
Deleting expired sessions...54 completed.

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

Если кашу в голове как-то можно структурировать, то я попыталась это сделать. Так по курсу вопросов вроде бы и не было, но здесь всё очень беспросветно. Чувствую себя не как пользователь «anna», а как Красная Шапочка после того, как её сожрал волк. Всё темно. Но, может, как и в сказке мимо пройдут охотники и смогут помочь?

И что бы мне ещё почитать кроме сказок Шарля Перро, чтобы больше не попадать в такие истории?

Спасибо.

9 3

Maksim Litvinov

Добрый день! Если вам нужно выполнить несколько действий от имени суперпользователя, то набирать перед каждой командой sudo не удобно. Можно запустить новую командную оболочку от имени суперпользователя внутри текущей (Вспомните урок про командную оболочку) и спокойно выполнять там нужные действия.

Этот фрагмент кода как раз демонстрирует, что идет работа от имени суперпользователя:

$ sudo -i
$ id
uid=0(root) gid=0(root) groups=0(root)

Сначала запускается новая сессия от имени суперпользователя. Затем команда id выводит информацию о текущем пользователе и мы убеждаемся, что работаем от лица суперпользователя (root). Дальше вы можете выполнять любые команды. Набрав затем команду exit, вы завершите работу командной облочки, запущенной поверх текущей и вернетесь в текущую, запущенную от вашего имени.

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

1

Anna kra_

Максим Литвинов, большое-большое спасибо!

Вот так, как Вы здесь объяснили, сделало всё простым и понятным. То есть дело не в моей тупости, а в подаче материала, хотя я очень ценю и этот курс и прочие материалы на Хекслете. Просто иногда ступени настолько высокие, что их не преодолеть и не только не поднимаешься, а наоборот, скатываешься чуть ли не в депрессию. А авторы курса не понимают, что это им кажется, что они разложили тему на атомарные кусочки понимания и больше дробить уже некуда.

Это всё лирика, а теперь к делу.

Вы могли бы вот этот кусочек, так как Вы объяснили, перенести в урок? А в конце приписать: Но это можно сформулировать и короче. И там тот текст, который сейчас прописан в уроке. И волки сыты, и овцы целы (в смысле, все Красные Шапочки). Спасибо Вам ещё раз огромное!

2

Anna kra_

Максим Литвинов, вот добавления.

1.

Попробовала после Ваших объяснений ещё раз пройти тест к уроку. Два вопроса теперь показались очень лёгкими. Затруднение вызывает ещё один вопрос, Вы могли бы и здесь помочь с пониманием? Спасибо!

Чей пароль запрашивает sudo при своем запуске?
– Пароль того пользователя, от имени которого запускается команда
– Она не запрашивает пароль
– Пароль текущего пользователя

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

Не понимаю, например, почему не требуется пароль суперпользователя – ведь мы же берём себе его права, хоть и временно?

2.

Команда sudo, выполненая без флага -i, не запускает новую оболочку от имени суперпользователя внутри текущей, поэтому в выводе id вы видите свое имя пользователя.

Оболочку не запускает. Но передаёт текущему пользователю права суперпользователя на исполнение одной команды (так ведь?).

То есть заменяет одноразово текущего пользователя на суперпользователя (так или не так?).
Моего имени я в этом случае уже не вижу. В случае как sudo так и sudo -i отображается суперпользователь. Вот вывод команд из моего терминала:

comp:~ anna$ id
uid=501(anna)

comp:~ anna$ sudo id
uid=0(root)

comp:~ anna$ sudo -i id
uid=0(root)

Я как-то неправильно истолковываю Ваши объяснения? :-(

0

Maksim Litvinov

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

  2. Да, команда sudo позволяет выполнить команду от имени суперпользователя:

    comp:~ anna$ sudo id
    uid=0(root)
    

    Здесь вы выполняете команду id от имени суперпользователя, поэтому её в выводе вы видите не свое имя, а root

1

Anna kra_

1.

Команда sudo как раз предназначена для того, чтобы давать пользователю делать некоторые действия от имени суперпользователя …

«некоторые действия» – понимаю так, что есть-таки различия между пользователем с sudo и суперпользователем. Правильно?

(Не ставлю пока зелёных кнопок только оттого, что Вы тогда возможно не увидите моих уточнений. А так класс! :-)

2.

Мне эти два утверждения кажутся противоречащими друг другу. Правильным мне кажется вариант 2.2.

2.1.

Команда sudo, выполненая без флага -i, не запускает новую оболочку от имени суперпользователя внутри текущей, поэтому в выводе id вы видите свое имя пользователя.

Нет, не вижу. Вижу и в этом случае суперпользователя.

2.2.

comp:~ anna$ sudo id
uid=0(root)

Здесь вы выполняете команду id от имени суперпользователя, поэтому её в выводе вы видите не свое имя, а root

0

Maksim Litvinov

  1. Да, есть различия. Можно даже настраивать, какие команды сможет выполнять пользователь с использованием sudo. 2.1 В своем первом сообщении вы привели такой код: $ sudo $ id Здесь sudo запускается без флага и без команды. Команда id, выполненная следом, запустится от имени текущего пользователя и выведет на экран ваше имя.

2.2 А здесь уже команда id запускается от имени суперпользователя и выводит root

comp:~ anna$ sudo id
uid=0(root)
0

Anna kra_

Максим Литвинов, увидела ошибку, из-за которой мы друг друга не понимали. Команды, написанные одна за другой в одну строку или те же команды, записанные в разных строках.

Всё, охотники убили волка! Или волк только притворяется? :-)

0

Maksim Litvinov

Если остались еще вопросы, пишите

0

Anna kra_

Столько зелёных кнопок за ответы в одном топике наверное никто ещё не получал :-)
Спасибо, Максим Литвинов!

0

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
18 мая 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
18 мая 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
18 мая 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
18 мая 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
18 мая 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
18 мая 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
18 мая 5 месяцев