Что такое логин и не-логин?

78

Говорят, что настройки для оболочки без входа в .bashrcфайл и настройки оболочки для входа в .profileфайл.

Что на самом деле подразумевается под логином и без логина?

Пожалуйста, объясните, не используя технический жаргон, насколько это возможно.

DUKE
источник

Ответы:

83

Проще говоря:

  • Если вы открываете оболочку или терминал (или переключаетесь на него), и он просит вас войти в систему (Имя пользователя? Пароль?), Прежде чем выдает подсказку, это оболочка для входа.
  • Если это не так (например, gnome-терминал ) и позволяет вам использовать его сразу, это оболочка без авторизации.

Если вы обычный пользователь Ubuntu Desktop, единственная оболочка для входа - это ... ваш рабочий стол (вы вводите пароль для входа, верно;)? Ну, технически это оболочка входа в систему, которая запускает графический интерфейс, но это входит в жаргон. И да, он будет читать настройки в.profile

Единственный раз , когда вы (обычный пользователь), вероятно , увидит оболочку входа в системе, которая выглядит как шелл, если у вас возникли какие - то проблемы с рабочим столом , и вы переключитесь на виртуальный терминал с Ctrl+ Alt+ F1ярлыком.


Другие общие случаи использования оболочки входа в систему:

  • удаленный доступ к вашему компьютеру через ssh(или локальное соединение с ssh localhost)
  • моделирование начальной оболочки входа с помощью bash -l(или sh -l)
  • моделирование начальной rootоболочки входа сsudo -i
    • или для другого не пользователяsudo -u username -iroot
  • аутентифицироваться как другой не rootпользователь с (и их паролем)su - username
  • используя sudo loginкоманду для переключения пользователя
иш
источник
Если я запускаю свою Eclipse IDE из терминала, она открывается, как и ожидалось, но если я пытаюсь открыть ее, щелкая значок Eclipse, она не может распознать местоположение Java (если в файле .profile не установлено PATH для Java). Это означает, что для щелчка по значку Eclipse требуется оболочка входа, почему?
Герцог
2
@DUKE, Нет, это означает, что переменные окружения должны быть установлены по- разному, когда вы используете рабочий стол / GUI, а не настоящую консольную систему только для командной строки. Поместите свой PATH и т. Д. В ~/.pam_environment(только переменные, никаких команд bash!), Выйдите из системы, войдите в систему и наблюдайте, как все волшебным образом появляется на рабочем столе и в gnome-терминале!
иш
1
Вход через ssh не вызывает оболочку входа. Это не загружается /etc/profile, /etc/profile.dили ~/.profile.
xuhdev
Смотрите этот вопрос .
xuhdev
@xuhdev Вход через ssh вызывает оболочку входа и загружает / etc / profile, /etc/profile.d и ~ / .bash_profile.
MichaelZ
9

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

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

  1. Запуск оболочки с аргументом -lили --loginаргументом в предположении, что он это знает (я не знаю оболочек, которые не знают -l, но --loginподдерживаются только несколькими оболочками).
  2. Запуск оболочки с argv[0]установленным на -{some_string}(то есть с HYPHEN-MINUS, добавленным к обычному argv[0]или к какой-либо другой строке). Это то, что делают ssh и su: su просто запускает исполняемый файл с -suas argv[0](привет всем, кто думает argv[0], что имеет какое-то отношение к исполняемому в настоящее время имени исполняемого файла), ssh запускает zsh, -zshкогда пользователь установил в /bin/zshкачестве своей оболочки.

Логичность оболочки не имеет абсолютно никакого отношения к тому, кто спрашивает у вас пароль или выполняет какую-либо другую процедуру аутентификации. Некоторые программы, такие как ssh или login (или некоторые терминальные эмуляторы, такие как urxvt), запускают оболочки как логин, используя argv[0]которые начинаются с HYPHEN-MINUS. Некоторые, такие как su или sudo (или zsh: смотрите -модификатор precommand, описанный в разделе PRECOMMAND MODIFIERS in man zshmisc), не делают этого по умолчанию, но это можно сказать. У некоторых есть единственная возможность указать shell, чтобы он входил в систему, используя свой аргумент (то есть bash -l): ssh с аргументом команды (который явно указывает ssh, что запускать на удаленном конце).

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

ZYX
источник
Меня интересует второй вариант: как я могу изменить argv [0] до (или после) вызова bash? Это можно сделать из командной строки?
VeryHardCoder
@VeryHardCoder Это зависит от приложения, которое вы используете для запуска команды. В коде C это делается путем непосредственного предоставления argv[0]одному из exec*функций, естественных и неизбежных: вы всегда поставляете как argv[0] и путь командовать фактически выполняемый при использовании exec*функции, даже если вы никогда не хотите , argv[0]чтобы отличаться от команды запуска. Другие языки предоставляют свои собственные способы. В частности, bash позволяет использовать exec -a new_argv0 bash, но это, конечно, заменит текущую оболочку на то, что вы execредактировали, поэтому вам может понадобиться использовать subshell ( (exec -a -zsh zsh))
ZyX
Хорошо понял! На самом деле, это можно сделать даже более простым способом: (exec -l bash) ...
VeryHardCoder
1
Какая функциональная разница между ними? Это просто логический флаг?
Алексей
@Alexey Основное функциональное отличие - это набор файлов конфигурации, используемых при запуске. $0и, может быть, что-то еще (переменная, настройка и т. д.) установлено так, что логичность оболочки может быть обнаружена в файле конфигурации, но кто на самом деле беспокоится, обнаружив это, так что это будет иметь какое-то значение? Это все, что я знаю.
ZyX