Какой из приведенных вариантов является ПРАВДОЙ относительно оболочки входа?
- Оболочка входа меняется каждый раз, когда пользователь входит в систему. Ядро принимает решение о доступности оболочки во время входа в систему.
- Оболочка входа фиксирована для всех пользователей в конкретной системе. Ее нельзя настроить.
- Оболочку входа можно настроить администратором в файле /etc/passwd.
- Ни один из вышеперечисленных.
решение1
Ядро не знает ничего о пользователях, кроме их числового идентификатора как тега на определенных вещах (процессах, файлах). У него нет понятия «входа в систему», который происходит в пользовательской среде.
Программа, которая управляет процессом входа в систему ( login
в текстовом режиме консоли,Дисплейный менеджерна графической консоли, демон, такой как sshd
или telnetd
для удаленного входа в систему и т. д.) сначала аутентифицирует пользователя и выполняет другие задачи.ПАМчасто используется; он имеетмного возможностейсвязанные с аутентификацией, ведением журнала, базами данных пользователей и т. д. Последним шагом процесса входа в систему (в случае успешного входа), после того как программа переключилась с работы от имени root на работу от имени нужного пользователя, является вызов оболочки входа.
Оболочка входа определяется из базы данных учетных записей пользователей. Существует несколько типов баз данных пользователей; наиболее распространенными являются/etc/passwd
(или, реже, какой-либо другой файл, настроенный черезНСС), который представляет собой простой текстовый файл, найденный на локальном компьютере, иНИСиLDAPкоторые представляют собой сетевые базы данных, используемые в сетях, где учетные записи могут использоваться с нескольких машин.
Пользователи могут изменить свою оболочку с помощьюchsh
команда для локальных учетных записей, сypchsh
для счетов NIS или сchsh.ldap
для учетных записей LDAP. В некоторых местах chsh
команда настроена на работу с любым типом базы данных учетных записей, который используется. Пользователям разрешено переключаться только между оболочками, которые перечислены в файле /etc/shells
; это одновременно и мера безопасности (пользователи, чья оболочка не указана, считаются имеющими ограниченные учетные записи и не могут ее изменить), и мера безопасности (изменение на несуществующую или ограниченную оболочку может фактически заблокировать учетную запись). Администратор может изменить оболочку входа любой учетной записи, выполнив команду chsh
или напрямую отредактировав базу данных.
В нормально настроенной системе полезные программы оболочки будут перечислены в списке, /etc/shells
и эти программы будут работать. (1) технически верно, поскольку оболочка входа может меняться (пользователь или администратор могут вызвать ее chsh
в любое время), даже если обычно это не так, и, конечно, запуск любой программы подразумевает загрузку ядром файла программы и завершится ошибкой, если файл не существует или поврежден.
Программа входа запускает оболочку входа с аргументом 0, установленным на имя программы с дефисом -
перед именем. Например, если оболочка входа /bin/bash
(необходим полный путь, поиск не $PATH
выполняется), то аргумент 0 будет -bash
. Аргумент 0 обычно является именем программы; дополнительный дефис сообщает оболочке, что она должна действовать как оболочка входа. Оболочки входа запускают дополнительные файлы при запуске, например /etc/profile
и ~/.profile
; см.Разница между оболочкой входа и оболочкой без входа?для получения более подробной информации об этой части.
Этот экзамен с множественным выбором не очень хорошо продуман, поскольку каждый вариант может быть истолкован как истинный.
(1): действительно, оболочка входа определяется каждый раз, когда пользователь входит в систему. Также верно, что ядро решает, доступна ли оболочка во время процесса входа. Так что технически (1) верно (а техническая корректность — это лучшая форма корректности, не так ли?). Но (1) очень вводит в заблуждение, потому что ядро не решает, что такое оболочка входа как таковая, у него даже нет понятия входа или оболочки.
(2) в общем случае неверно, поскольку у разных пользователей могут быть разные оболочки входа. Однако существуют настройки, в которых по той или иной причине все пользователи имеют одну и ту же оболочку — например, гетерогенные сети, где учетные записи распределены между машинами, и единственная оболочка, которая гарантированно доступна везде, — это /bin/sh
.
(3) — это, вероятно, предполагаемый ответ, потому что /etc/passwd
это одно из мест, где администратор может настроить оболочку входа. Однако /etc/passwd
не следует редактировать напрямую, а через vipw
команду или через команду, такую как chsh
. Кроме того, нелокальные учетные записи не хранятся в /etc/passwd
.
решение2
Давайте проверим некоторые факты:
Проверьте это.
echo $SHELL
. Теперь выйдите из системы и войдите снова.echo $SHELL
. Промойте, постирайте, повторите. Один и тот же ответ каждый раз.Оболочка входа выводится из содержимого
/etc/passwd
для всех пользователей. Значение, заданное в этом файле, будет значением оболочки входа для каждого пользователя в системе. Пользователь может запустить другую оболочку, но она не будет его оболочкой входа, если значение не задано в/etc/passwd
.Вы можете убедиться в этом, попробовав выполнить команду из различных оболочек, которую вы запускаете вручную:
bash -c "get-shell" sh -c "get-shell" zsh -c "get-shell"
Все эти команды дадут вам одинаковый вывод, независимо от того, в какой оболочке вы их запустите, поскольку значение для оболочки входа определяется не тем, какую оболочку выбирает пользователь для запуска, а той, которая установлена для него в
/etc/passwd
.Обратите внимание, что если в вашей системе этого нет,
get-shell
вы можете подставитьgetent passwd $(whoami) | cut -d: -f7
команду выше, чтобы определить оболочку входа пользователя.Это будет сильно зависеть от уровня знаний администратора. Редактирование файла
/etc/passwd
требует знания того, как запустить текстовый редактор от имени root, и ловкости, чтобы не испортить ни одного символа в файле. Хотя ниндзя может справиться с этим, администратор, который прочитает,man chsh
увидит, что это программа для настройки оболочек входа:ОПИСАНИЕ
chsh используется для смены оболочки входаЕсли хотя бы один из приведенных выше ответов верен, то это должно быть ложно.