關於登入 shell,以下給定選項中哪一個是正確的?
- 每次使用者登入時,登入 shell 都會有所不同。
- 特定係統中所有使用者的登入 shell 都是固定的。無法配置。
- 管理員可以在 /etc/passwd 檔案中設定登入 shell。
- 以上都不是。
答案1
除了用戶的數位 ID 作為某些事物(進程、檔案)的標籤之外,核心不知道有關用戶的任何資訊。它沒有發生在使用者空間的「登入」概念。
處理登入程序的程序(login
在文字模式控制台上,顯示管理器在圖形控制台上,守護程式(例如sshd
用於telnetd
遠端登入等)首先對使用者進行身份驗證並執行其他任務。聚丙烯醯胺經常使用;它有許多能力與身份驗證、日誌記錄、使用者資料庫等相關。
登入 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。所以從技術上來說(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若上述答案至少有一個為真,則該答案必定為假。