解決方法:
相關版本:紅帽企業Linux
現象:
如果你在文件/etc/security/limits.conf中設定了值。 可是如果用戶是通過ssh登錄到系統的話。 設置將不會生效。 如果用戶是通過telnet或者是本地登錄的話,那么設置是生效的。
解決方法:
這個問題因該歸結于SSH登錄采取的方式。 當一個用戶通過SSH登錄, SSH守護進程會創建一個新的進程去處理這個連接。這樣的話, 這個進程的上下文就會被這個用戶使用。 應為普通用戶無法增加他們的ulimit限制。所以即使在文件/etc/security/limits.conf中有較高的數值也不能被激活生效。 這是因為調用的程序,如sshd。限制了修改屬性的權限。
這個問題目前有兩個解決方法。第一步需要對SSHD服務器進行設置修改。另一步是用戶每一次登陸時都需要運行命令。
1. 修改SSH守護進程的配置文件/etc/ssh/sshd_config,關閉特權隔離。修改如下
#UsePrivilegeSeparation yes
把它改成。
UsePrivilegeSeparation no
并且修改
#PAMAuthenticationViaKbdInt no
修改之后如下
PAMAuthenticationViaKbdInt yes
關閉這些選項會帶來一些安全風險。但那也只是在SSH守護進程的漏洞被發現并且被利用的情況下才會出現。關閉之后就意味著sshd不會創建非特權子進程去處理進站連接。如果漏洞存在而且被利用,則有人可以控制sshd進程,而這個進程是以root身份運行的。到目前還沒有已知的弱點,如果你經常使用 up2date升級你的系統的話,那么任何漏洞都會在發現之后被迅速的修正。
要使改動生效,需要重新啟動SSHD.
# service sshd restart
設置改動之后,當用戶通過SSH登陸之后,這些會話的最大打開文件數參數會按照/etc/security/limits.conf文件被設置。不需要額外的操作。
2. 使用 “su - $USER”來設置最大打開文件數。在用戶通過ssh登陸之后,使用如下命令
su - $USER
用戶被要求再次輸入密碼,上述的操作將會使ulimit被正確的設定。用戶將需要在每次登陸時運行 su - $USER 。 才能正確設置文件限制。
注意: 這個問題已經在SSH 3.8版本中得到了解決。 并且紅帽企業Linux的后續產品將會采用這個版本