sudo 是否始终将进程限制设置为 /etc/security/limits.d 中的数字?

sudo 是否始终将进程限制设置为 /etc/security/limits.d 中的数字?

我观察到以下行为:

[ec2-user@ip-10-66-68-55 ~]$ uname -a
Linux ip-10-66-68-55 3.4.103-76.114.amzn1.x86_64 #1
SMP Fri Sep 12 00:57:39 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[ec2-user@ip-10-66-68-55 ~]$ ulimit -H -n; ulimit -S -n
1000
1000
[ec2-user@ip-10-66-68-55 ~]$ cat /etc/security/limits.d/80-nofile.conf
ec2-user hard nofile 123456
ec2-user soft nofile 123456
[ec2-user@ip-10-66-68-55 ~]$ bash -c 'ulimit -H -n; ulimit -S -n'
#I expect this limit to be 1000,  same as above. it is.
1000
1000
[ec2-user@ip-10-66-68-55 ~]$ sudo -u ec2-user bash -c 'ulimit -H -n; ulimit -S -n'
#I expected this limit to be 1000,  the same as if I had not called sudo -u ec2-user
#Instead, I get the one from limits.d/80-nofile.conf. 
123456 
123456

快速搜索 sudo 手册页没有显示任何对 /etc/security/limits 的直接引用。

我想依靠这种行为来确保我关心的守护进程在 80-nofile.conf 上设置的限制下运行,但我不知道这是否可靠。它记录在某处吗?

哪些类型的配置文件/变量会影响此行为?我可以告诉 sudo 不要覆盖当前限制吗?

答案1

您可能应该查看/etc/pam.d/sudo文件内部并检查pam_limits.so它或它包含的任何其他文件是否需要。

例如,/etc/pam.d/sudo我的系统中的文件如下所示。

#%PAM-1.0

auth       required   pam_env.so readenv=1 user_readenv=0
auth       required   pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
@include common-auth
@include common-account
@include common-session-noninteractive

现在,您可以使用以下命令查找pam_limits.so包含的其他文件@inlude范围。

答案2

感谢@hrv 的见解。经过快速实验后我确认:当 /etc/pam.d/sudo 包含 pam_limits.so 时,运行 sudo 确实设置了它们,当 /etc/pam.d/sudo 不包含它们时,运行 sudo没有设置它们。

我检查了几台不同的机器,其中一台确实在 /etc/pam.d/sudo 中包含 pam_limits.so,而另一台则没有。

相关内容