我想:
- 对常驻内存设置一个 64GB 的软限制(因此,缺乏经验的用户会终止其失控的进程,但经验丰富的用户可以提高内存消耗大进程的限制)
- 提高 nofile 的硬限制,但将软限制保持在 1024(因此,如果某个程序需要更多文件句柄,用户可以授予它们,但失控的程序将无法获得它们)。
据我所知,我应该能够在/etc/security/limits.conf
(或在/etc/security/limits.d/*
)中做到这一点:
* soft rss 64000000
* hard nofile 50000
* soft nofile 1024
但是,我找不到无需重启即可重新加载这些值的方法。我读到过,这些值是在登录时重新加载的;当我这样做时它可以工作,su - user
但通过它不起作用ssh user@localhost
。
我在 /etc/pam.d 中有 pam_limits.so:
/etc/pam.d/login:session required pam_limits.so
/etc/pam.d/sshd:session required pam_limits.so
/etc/pam.d/su:session required pam_limits.so
我在 sshd_config 中有 PAM:
/etc/ssh/sshd_config:UsePAM yes
ulimit
我知道我可以使用和设置值sysctl
,但我想测试在/etc/security/limits.conf
无需重新启动的情况下是否执行了正确的操作。
我如何确保当人们使用 ssh 登录时无需重新启动就能设置这些值?
答案1
呼呼……
UseLogin
是不需要的。
UsePAM yes
是需要的。
仅当从否更改为是时才sshd
需要重新启动。UsePAM
~/.ssh/config
非常有必要禁用我自己的!
我的Control
* 语句中~/.ssh/config
重新使用了 ssh 通道,因此我不会发现变化。
感谢 Samed Beyribey 和 quanta,他们的帮助给了我运行的想法,ssh -vv
当你有Control
* 语句时它会产生非常不同的输出。
答案2
我读到过,登录时会重新加载值;当我这样做时它可以工作,
su - user
但无法通过ssh user@localhost
。
原因是:默认情况下,SSH 打开非登录 shell,因此不受限制。
为了使其使用登录 shell,请编辑sshd_config
文件并取消注释/更改#UseLogin no
为UseLogin yes
:
gentoo ~ # grep UseLogin /etc/ssh/sshd_config
#UseLogin no
gentoo ~ # sed -i.bak 's/#UseLogin no/UseLogin yes/' /etc/ssh/sshd_config
gentoo ~ # grep UseLogin /etc/ssh/sshd_config
UseLogin yes
重新加载sshd
并重试。