关于登录 shell,以下给定选项中哪一个是正确的?
- 每次用户登录时,登录 shell 都会有所不同。内核决定登录期间 shell 的可用性。
- 特定系统中所有用户的登录 shell 都是固定的。无法配置。
- 管理员可以在 /etc/passwd 文件中配置登录 shell。
- 以上都不是。
答案1
除了用户的数字 ID 作为某些事物(进程、文件)的标签之外,内核不知道有关用户的任何信息。它没有发生在用户空间的“登录”概念。
处理登录过程的程序(login
在文本模式控制台上,显示管理器在图形控制台上,守护程序(例如sshd
用于telnetd
远程登录等)首先对用户进行身份验证并执行其他任务。聚丙烯酰胺经常使用;它有许多能力与身份验证、日志记录、用户数据库等相关。在程序从以 root 身份运行切换到以所需用户身份运行之后,登录过程的最后一步(成功时)是调用登录 shell。
登录 shell 由用户帐户数据库确定。用户数据库有多种类型;最常见的是/etc/passwd
(或者,很少,通过配置其他一些文件国家安全局),这是在本地计算机上找到的一个简单文本文件,以及NIS和LDAP它们是在网络上使用的网络数据库,可以在多台计算机上使用帐户。
用户可以使用以下命令更改他们的 shellchsh
本地帐户的命令,带有ypchsh
对于 NIS 帐户,或使用chsh.ldap
对于 LDAP 帐户。在某些地方,该chsh
命令设置为适用于正在使用的任何帐户数据库类型。仅允许用户在文件中列出的 shell 之间进行切换/etc/shells
;这既是一种安全措施(未列出 shell 的用户被假定为具有受限帐户且无法更改),也是一种安全措施(更改为不存在或受限 shell 可以有效锁定帐户)。管理员可以通过运行命令chsh
或直接编辑数据库来更改任何帐户的登录 shell。
在正常配置的系统上,有用的 shell 程序将被列出,/etc/shells
并且这些程序将运行。 (1) 从技术上讲是正确的,因为登录 shell 可以变化(用户或管理员可以chsh
随时调用),即使它通常不会变化,当然,启动任何程序都需要让内核加载程序文件,并且如果文件不存在或已损坏。
-
登录程序运行登录 shell,参数 0 设置为程序名称,名称前有破折号。例如,如果登录 shell 是/bin/bash
(需要完整路径,不执行查找$PATH
),则参数 0 将为-bash
。参数 0 通常是程序名称;额外的破折号告诉 shell 充当登录 shell。登录 shell 在启动时运行额外的文件,例如/etc/profile
和~/.profile
;看登录 Shell 和非登录 Shell 之间的区别?有关此部分的更多详细信息。
这项多项选择题考试的设计并不完善,因为每个选项都可以被解释为正确。
(1):确实是这样的,每次用户登录时都会确定登录shell。登录过程中内核也决定shell是否可用也是如此。所以从技术上来说(1)是正确的(技术正确性是正确性的最佳形式,对吧?)。但是(1)非常具有误导性,因为内核本身并没有决定登录shell是什么,它甚至没有登录或shell的概念。
(2) 一般而言并不正确,因为不同的用户可能有不同的登录 shell。然而,在某些设置中,由于某种原因,所有用户都具有相同的 shell - 例如,在异构网络中,帐户在计算机之间共享,并且保证在任何地方都可用的唯一 shell 是/bin/sh
。
(3) 可能是预期的答案,因为/etc/passwd
这是管理员可以配置登录 shell 的地方。但是/etc/passwd
不应直接编辑,而应通过命令vipw
或通过诸如 之类的命令进行编辑chsh
。此外,非本地帐户不存储在/etc/passwd
.
答案2
让我们检查一些事实:
测试一下。
echo $SHELL
。现在注销并再次登录。echo $SHELL
。冲洗,清洗,重复。每次都一样的答案。登录 shell 源自
/etc/passwd
所有用户的内容。该文件中设置的值将是系统上每个用户的登录 shell 的值。用户可以运行另一个 shell,但如果没有在 中设置值,它就不是他们的登录 shell/etc/passwd
。您可以通过尝试手动运行的各种 shell 中的命令来验证这一点:
bash -c "get-shell" sh -c "get-shell" zsh -c "get-shell"
无论您在哪个 shell 下运行,所有这些命令都会给您相同的输出,因为登录 shell 的值不是由用户选择运行的 shell 决定的,而是由
/etc/passwd
.请注意,如果您的系统没有,
get-shell
您可以替换getent passwd $(whoami) | cut -d: -f7
上面的命令来确定用户登录 shell。这在很大程度上取决于管理员的知识水平。编辑
/etc/passwd
文件需要了解如何以 root 身份启动文本编辑器,并且需要灵活地不弄乱文件中的单个字符。虽然忍者可能会成功,但管理员阅读后man chsh
会看到这是调整登录 shell 的程序:描述
chsh 用于更改您的登录 shell如果上述答案至少有一个为真,则该答案必定为假。