关于登录 shell,给定选项中哪一个是正确的?

关于登录 shell,给定选项中哪一个是正确的?

关于登录 shell,以下给定选项中哪一个是正确的?

  1. 每次用户登录时,登录 shell 都会有所不同。内核决定登录期间 shell 的可用性。
  2. 特定系统中所有用户的登录 shell 都是固定的。无法配置。
  3. 管理员可以在 /etc/passwd 文件中配置登录 shell。
  4. 以上都不是。

答案1

除了用户的数字 ID 作为某些事物(进程、文件)的标签之外,内核不知道有关用户的任何信息。它没有发生在用户空间的“登录”概念。

处理登录过程的程序(login在文本模式控制台上,显示管理器在图形控制台上,守护程序(例如sshd用于telnetd远程登录等)首先对用户进行身份验证并执行其他任务。聚丙烯酰胺经常使用;它有许多能力与身份验证、日志记录、用户数据库等相关。在程序从以 root 身份运行切换到以所需用户身份运行之后,登录过程的最后一步(成功时)是调用登录 shell。

登录 shell 由用户帐户数据库确定。用户数据库有多种类型;最常见的是/etc/passwd(或者,很少,通过配置其他一些文件国家安全局),这是在本地计算机上找到的一个简单文本文件,以及NISLDAP它们是在网络上使用的网络数据库,可以在多台计算机上使用帐户。

用户可以使用以下命令更改他们的 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

让我们检查一些事实:

  1. 测试一下。echo $SHELL。现在注销并再次登录。echo $SHELL。冲洗,清洗,重复。每次都一样的答案。

  2. 登录 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。

  3. 这在很大程度上取决于管理员的知识水平。编辑/etc/passwd文件需要了解如何以 root 身份启动文本编辑器,并且需要灵活地不弄乱文件中的单个字符。虽然忍者可能会成功,但管理员阅读后man chsh会看到这是调整登录 shell 的程序:

    描述
    chsh 用于更改您的登录 shell

  4. 如果上述答案至少有一个为真,则该答案必定为假。

相关内容