關於登入 shell,給定選項中哪一個是正確的?

關於登入 shell,給定選項中哪一個是正確的?

關於登入 shell,以下給定選項中哪一個是正確的?

  1. 每次使用者登入時,登入 shell 都會有所不同。
  2. 特定係統中所有使用者的登入 shell 都是固定的。無法配置。
  3. 管理員可以在 /etc/passwd 檔案中設定登入 shell。
  4. 以上都不是。

答案1

除了用戶的數位 ID 作為某些事物(進程、檔案)的標籤之外,核心不知道有關用戶的任何資訊。它沒有發生在使用者空間的「登入」概念。

處理登入程序的程序(login在文字模式控制台上,顯示管理器在圖形控制台上,守護程式(例如sshd用於telnetd遠端登入等)首先對使用者進行身份驗證並執行其他任務。聚丙烯醯胺經常使用;它有許多能力與身份驗證、日誌記錄、使用者資料庫等相關。

登入 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。所以從技術上來說(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. 若上述答案至少有一個為真,則該答案必定為假。

相關內容