在CentOS 6.4 / 64位 – 如何find用户“无人”的限制?
因为我不能只是su - nobody打电话ulimit -a :
# id nobody uid=99(nobody) gid=99(nobody) groups=99(nobody) # su - nobody This account is currently not available.
更新:
我在问:如何为CentOS用户nobody调用ulimit -a ,这样我就可以调整/etc/security/limits.conf关于该用户打开文件的最大数量。
更多的细节:
我有一个由init (我为它创build了一个文件: /etc/init/my_card_game.conf )启动的perl脚本(一个基于非基于TCP-sockets的纸牌游戏守护进程),但是然后丢弃超级用户privilleges和nobody运行:
sub drop_privs { my ($uid, $gid) = (getpwnam('nobody'))[2, 3]; die "User nobody not found\n" unless $uid && $gid; umask(0); chdir('/tmp') or die "Can not chdir to /tmp: $!\n"; #chroot('/tmp') or die "Can not chroot to /tmp: $!\n"; # try to set the real, effective and save uid setgid($gid) or die "Can not set gid to $gid: $!\n"; setuid($uid) or die "Can not set uid to $uid: $!\n"; # try to regain privileges - this should fail die "Not able to drop privileges\n" if setuid(0) || setgid(0); }
我想确保它具有足够大的nofiles数量,以便它可以为所有连接的客户端提供服务。
在权限被删除之前必须提高限制,因为需要特权来提高硬资源限制。 您可以将代码添加到您的脚本来执行此操作。 但最简单的方法是制作一个启动你的Perl脚本的shell脚本。 shell脚本可以使用ulimit因为它仍然有权限。 (用户与此无关,资源限制是进程的属性。)
-u标志ulimit,从ulimit手册页:
-u单个用户可以使用的最大进程数
在RedHat / CentOS中,文件/etc/security/limits.conf描述了每个用户的限制。 所以如果你的文件描述符用完了(比如你的apache“nobody”用户),你可以在这个文件的末尾添加一行(默认情况下它是空的)。 将这个从4096增加到32768解决了我们在ColdFusion 10 / apache 2.2 / RedHat服务器上的一个问题。