단일 포트를 관리할 수 있는 selinux 사용자로 시스템을 구성하는 서비스를 작성했습니다. 이 머신에 1000명의 사용자를 프로비저닝하려고 하는데 selinux가 약 450명의 사용자에서 천천히 멈춥니다(시간당 6명의 사용자만 처리하는데, 이는 제가 시작한 것의 절반입니다. 이 머신에는 2개의 2.5ghz CPU가 있고 4GB RAM이 있습니다). , 첫 번째 시도에서는 몇 시간 후에 RAM이 부족하여(1GB만) 결국 작동이 중단되었습니다.
그래서 내 질문은 사용자를 더 추가하면 왜 selinux가 느려지는가입니다(특히 semanage user 명령). 나는 selinux 메일링 리스트 아카이브에서 메모리 누수에 대한 언급을 본 적이 있지만 그것은 난해한 곳에서만 나타나는 것 같습니다.
요청한 대로 여기에 내가 호출한 모든 selinux 명령이 있습니다(문맥 없이는 의미가 없다는 것을 알고 있습니다). 그러나 전체 스크립트를 게시하는 데는 관련이 없다고 생각합니다.
subprocess.check_call(['make', '-f', '/usr/share/selinux/devel/Makefile'])
subprocess.check_call(['checkmodule', '-M', '-m', '-o', mod_file, te_file])
result = subprocess.check_output(['semodule_package', '-m', mod_file, '-o', pp_file])
subprocess.check_call(['semodule', '-r', mod_name])
return str(subprocess.check_output(['semanage', 'port', '-l', '-C', '-n'])).splitlines()
subprocess.check_call(["semanage", "port", "-a", "-t", selinux_portname, "-p", "tcp", str(port)])
subprocess.check_call(["chcon", "--reference", "%s/users/%s" % (selinux_context_dir, template_user), "%s/users/%s" % (selinux_context_dir, selinux_user) ])
subprocess.check_call(["semanage", "user", "-a", "-R", selinux_role, selinux_user ])
subprocess.check_call(["semanage", "login", "-a", "-s", selinux_user, user])
subprocess.check_call(["restorecon", "-RF", "/home/%s" % (user)])
약 40시간 실행 후, 사용자 수는 560명이 되었습니다. 하지만 가라앉거나 충돌하는 일 없이 시간당 6~7명의 사용자로 안정화되었으므로 그만큼 좋을 수도 있습니다.