ulimit -n 변경하지 않음-values ​​limits.conf가 적용되지 않습니다 nofile

우분투 컴퓨터의 모든 사용자에 대해 열린 파일 설명자를 최대로 늘리려 고합니다.

이 질문은이 질문에 대한 후속 조치입니다.

pam_limits.so가 필요한 경우에도 열린 파일 설명자 limits.conf 설정을 ulimit에서 읽지 않습니다.

limits.conf에 필수 “루트”항목을 추가 한 것을 제외하고

여기에 항목이 있습니다

*               soft    nofile           100000
*               hard    nofile           100000
root            soft    nofile           100000
root            hard    nofile           100000

관련 라인하기 pam_limits.so취소 주석부터 /etc/pam.d/의 모든 관련 파일에 있었던 및 fs.file-max/etc/sysctl.conf에 올바르게 설정되어

그러나 여전히

abc@machine-2:/etc/pam.d$ ulimit -n
1024

재부팅 후.

무엇이 문제 일 수 있습니까?

내 기본 쉘은 / bin / sh이며 컴퓨터의 사용자가 일부 분산 인증 체계를 통해 인증되기 때문에 chsh를 사용하여 기본 쉘을 변경할 수 없습니다.



답변

비슷한 문제가 있었지만 SSH 로그인에서만 가능합니다. 콘솔을 통한 로컬 로그인은을 (를) 존중했습니다 /etc/security/limits.conf.

밝혀 졌을 때,

UsePrivilegeSeparation yes

에서 /etc/ssh/sshd_config파일, 다음 포크에게 계정의 ENV를 설정하는 권한이없는 아이를 sshd를. 이 자식은 권한이 없으므로 pam_limits.so 상한을 설정해도 아무런 영향이 없습니다.

내가 설정하자마자

UsePrivilegeSeparation no

에서 /etc/ssh/sshd_configSSH 서비스 및 반송, 다음 limits.conf 파일은 SSH 로그인으로 존경했다.


답변

ulimit가 / etc / profile 또는 ~ / .bashrc에 의해 적용되고 있다고 생각합니다. 귀하의 시스템에 복잡한 스팸이 있다는 점에서 무언가가 잘못되지 않음을 확인합니다.

또한 pam_limits (8)에 언급 된 것처럼 /etc/security/limits.d/에 구문 분석 파일이 잘못되었음을 확인했습니다.

세션 필수 pam_limits.conf 줄에 디버그 매개 변수를 추가 한 다음 로그인 할 때 /var/log/auth.log를 봅니다.

소프트 한계가 1024 인 경우 하드 한계는 무엇입니까?

su는 -l 인수를 사용하여 새롭고 새로운 로그인을해야합니다.

su -l -s / bin / bash

행운을 빕니다.


답변

Redhat 서버에서 루트로 기록

/etc/security/limits.conf

user01  -       nofile  2048

strace 명령은 루트로 기록

strace -o loglimit su - user01

다른 쉘 오픈 loglimit와 함께

grep "limit" loglimit
open("/lib64/security/pam_limits.so", O_RDONLY) = 6
 ..........
 ..........
 open("/etc/security/limits.conf", O_RDONLY) = 3
 read(3, "# /etc/security/limits.conf\n#\n#E"..., 4096) = 1823
 open("/etc/security/limits.d", O_RDONLY|O_NONBLOCK|O_DIRECTORY) = 3
 setrlimit(RLIMIT_NOFILE, {rlim_cur=2*1024, rlim_max=2*1024}) = 0

pam_limits 가로 드되었지만 ulimit -n을 사용하여 여전히 다른 값을 볼 수 있다면 @etherfish가 말한 것처럼 셸 프로파일을 확인하십시오.


답변

나는 여기에 내가 한 일과 같은 문제가있었습니다.

strace 명령은 프로세스가 외부 라이브러리와 수행하는 모든 상호 작용을 인쇄하므로 구성이로드되었는지 확인할 수 있습니다.

그래서 위의 제안처럼 :

root:/etc/pam.d$ strace -o ~/loglimit su - glaudiston
glaudiston:~$ exit
logout
root:/etc/pam.d$ cat ~/loglimit | grep limits.conf

내 문제에서 strace 로그 (strace -o log su-username)에는 제한 텍스트 인스턴스가 없으므로 limits.conf 파일이로드되지 않았습니다.

먼저 pam_limits.so가 /etc/security/limits.conf를 찾습니다.

root:/etc/pam.d$ strings /lib/security/pam_limits.so | grep limits.conf
/etc/security/limits.conf

따라서 pam_limits.so 모듈이 /etc/pam.d … (예 : /etc/pam.d/su)에있는 파일의 인증 작업에로드되었는지 확인합니다.

session   required    pam_limits.so

이제 사용자에게 “su”를 만들 수 있으며 제한이로드됩니다. strace 단계를 다시 실행하여 확인할 수 있습니다.

내 리눅스는 LFS이기 때문에 /etc/pam.d 파일에 pam_limits.so가없는 것입니다. 다른 배포판에서는이 정확한 문제라고 생각하지 않습니다.

그러나 이것이 도움이되기를 바랍니다.


답변

필자의 경우 (Centos 6.10) strace는 로그인 프로세스 후반에 /etc/security/limits.conf 에서 제한을 설정 한 후 /etc/security/limits.d/90-nproc.conf 에서 모두 루트 사용자 :

*          soft    nproc     1024
root       soft    nproc     unlimited


답변