什麼是 libnss_dns.so 和 libnss_files.so 函式庫?他們對 openssh 有什麼依賴?

什麼是 libnss_dns.so 和 libnss_files.so 函式庫?他們對 openssh 有什麼依賴?

我正在嘗試使用 Putty 透過我的 PC ssh 到我的板( Imx6 Humming board)。替換根檔案系統中的這兩個庫即可解決問題。為什麼這些檔案會產生問題?任何有關這兩個庫文件的幫助將不勝感激。

答案1

libnss_files.so 是實際讀取 /etc/passwd、/etc/group、/etc/hosts 的函式庫。沒有它,程式將無法找到使用者名稱和使用者 ID – OpenSSH 不會知道您的 UID 和主目錄;事實上它不會知道你的存在。

同樣,libnss_dns.so 是進行 DNS 查詢的函式庫。它不是系統上唯一的 DNS 庫,但它是處理大多數程式使用的通用「解析網域到位址」功能的庫。


一般來說,它們是分別處理來自 DNS 和檔案的目錄資訊查找的 Glibc 模組。這裡的「目錄資訊」是指 1) 使用者帳戶,如 /etc/passwd 或 /etc/group 中,以及 2) 主機名,如 DNS 或 /etc/hosts 中。 (換句話說,是電話簿中的目錄,而不是資料夾中的目錄。)

標準庫由用 C 編寫的程式使用,具有用於查找目錄資訊(無論來源如何)的通用函數。也就是說,實際的程式不需要關心 DNS 或 /etc – 它們只是呼叫 libc 函數來尋找使用者名稱(或主機名稱、群組或 TCP 連接埠...),然後 libc 得到它來自任何適當的來源。

Glibc 是大多數 Linux 系統上使用的 libc模組化的資訊來源 – 系統管理員可以新增新的、重新排序等。的知識在“libnss_dns”模組中。

每當程式需要解析網域名稱時,libc 就會遍歷/etc/nsswitch.conf 中配置的每個模組- 首先它詢問「files」模組(檢查/etc/hosts),然後詢問「dns」模組(檢查/etc /hosts)檢查 DNS),直到得到答案。可能還有其他用於 mDNS(“.local”域)、NetBIOS 等的模組。

類似地,每當程式需要將使用者名稱解析為 UID,或將 UID 解析為使用者名稱時,libc 就會要求「檔案」模組從 /etc/passwd 取得使用者。 (同樣,可能還有其他模組,如“ldap”或“pgsql”或“nis”,可以從其他來源取得使用者帳戶資訊。)

相關內容