我正在根據調用者的姓名製作NSS模塊答案。例如,如果sshd調用getpwnam_r(...)
,pw_shell
將是/bin/bash;如果telnetd調用getpwnam_r(...)
,pw_shell
將是/bin/ksh。是否可以覆蓋/繞過nscd?
原型製作成功並且工作正常。但是,當nscd正在運行且緩存很熱時,模塊的功能將不會被調用。 nscd的緩存結果返回給每個調用者。 nscd假定結果的唯一變量是時間;它永遠不會想到進程名稱會影響結果。
假設我們可以讓一些守護進程或模塊覆蓋nscd,代碼應該檢查進程名是否在我的列表中。如果它在列表中,跳過nscd;否則,讓nscd回答getpwnam_r(...)
。
可能嗎?
編輯:不太優選,但行的替代方法是繞過NSCD當呼叫getpwnam_r(...)
。
我認爲,如果您真的需要這種行爲,最好的辦法就是禁用'nscd',看看您是否注意到性能下降。許多人在禁用nscd的情況下快樂地跑步;這一切都取決於你的環境的大小。 – larsks
我對此無法控制。環境各不相同。用戶很可能需要* nscd *。 –