ulimit : 하드 한계와 소프트 한계의 차이


87

ulimit에서 하드 한계와 소프트 한계의 차이는 무엇입니까?

열린 파일 수에 대해서는 소프트 제한이 1024, 하드 제한이 10240입니다. 1024 개가 넘는 파일을 여는 프로그램을 실행할 수 있습니다. 소프트 한계는 무엇입니까?


4
무슨 소리 야 ulimit -n? 매우 낮은 값 ( bash -c 'ulimit -n 4; exec 3>a; exec 4>b; exec 5>c') 으로 쉘을 실행하십시오 . 출력은 무엇입니까?
Gilles 2012 년

답변:


77

하드 한계는 루트에 의해서만 증가 할 수 있습니다 (모든 프로세스에서 루트를 낮출 수 있음). 따라서 보안에 유용합니다. 루트가 아닌 프로세스는 하드 한계를 넘어 설 수 없습니다. 그러나 루트가 아닌 프로세스는 하위 프로세스보다 더 낮은 한계를 가질 수 없다는 점에서 불편합니다.

프로세스에 의해 언제든지 소프트 한계를 변경할 수 있습니다. 따라서 프로세스가 협력하는 한 편리하지만 보안에는 좋지 않습니다.

소프트 한계의 일반적인 사용 사례는 코어 덤프 ( ulimit -Sc 0) 를 비활성화 하고 디버깅중인 특정 프로세스 ( (ulimit -Sc unlimited; myprocess)) 에서 활성화 할 수있는 옵션을 유지하는 것입니다 .

ulimit쉘 명령은 래퍼입니다 setrlimit시스템 호출, 그래서 당신은 최종 문서를 찾을 곳이다.

일부 시스템은 모든 제한을 구현하지 않을 수 있습니다. 특히 일부 시스템은 파일 디스크립터에 대한 프로세스 별 제한을 지원하지 않습니다 (Linux에서는 수행). 그렇지 않으면 쉘 명령이 작동하지 않을 수 있습니다.


6
소프트 한계 사용 사례의 경우 +1 상주 세트 크기 제한 ( ulimit -m, RLIMIT_RSS)은 Linux에서 더 이상 유효하지 않은 제한의 예입니다. 그러나 가상 메모리 제한 ( ulimit -v, RLIMIT_AS)이 작동합니다.
Adam Zalcman

@Gilles, 프로세스를 다시 시작하지 않고 소프트 제한을 변경하면 즉시 영향을 줄 수 있습니까?
Ryan

1
@Ryan 예, 프로그램은 전화 setrlimit를 통해 언제든지 자체 소프트 제한을 변경할 수 있습니다 (물론 루트로 실행하지 않는 한 하드 제한이 허용하는 범위까지). 대부분의 프로그램에는 사용자가 그렇게 할 수있는 명령이 없지만 디버거를 사용하여 프로그램에 연결하여 setrlimit호출 을 시도 하거나 Linux에서 호출 할 수 있습니다 prlimit(쉘을 모르는 경우) 유용).
Gilles

1
편지가 prlimit너무 쉘 유틸리티.
telcoM

0

하드 제한은 보안을위한 것입니다. 루트가 아닌 사용자의 경우 현재 설정된 하드 한계에서 하드 한계 만 줄일 수 있습니다. 그는 그것을 증가시킬 수 없습니다. 하드 한계를 늘리는 것은 루트 사용자 만이 수행 할 수 있습니다 (또는 sudo 권한을 가지고있을 수도 있습니다). 루트가 아닌 사용자가 수행 할 수있는 작업은 프로세스에 대해 [0, 하드 제한] 범위에있는 제한 (소프트 제한이라고 함)을 선택하는 것입니다. 공정에서보고 고려되는 소프트 한계입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.