ulimit의 하드 제한과 소프트 제한의 차이점은 무엇입니까?
열린 파일 수에 대해 소프트 제한은 1024이고 하드 제한은 10240입니다. 1024개 이상의 파일을 여는 프로그램을 실행할 수 있습니다. 소프트 제한의 용도는 무엇입니까?
답변1
하드 제한은 루트에서만 높일 수 있습니다(모든 프로세스에서 이를 낮출 수 있음). 따라서 이는 보안에 유용합니다. 루트가 아닌 프로세스는 하드 제한을 초과할 수 없습니다. 그러나 루트가 아닌 프로세스는 자식 프로세스보다 낮은 제한을 가질 수 없기 때문에 불편합니다.
프로세스는 언제든지 소프트 한계를 변경할 수 있습니다. 따라서 프로세스가 협력하면 편리하지만 보안에는 도움이 되지 않습니다.
소프트 제한의 일반적인 사용 사례는 코어 덤프를 비활성화하고( ulimit -Sc 0
) 디버깅 중인 특정 프로세스에 대해 활성화하는 옵션( (ulimit -Sc unlimited; myprocess)
)을 남겨 두는 것입니다.
쉘 ulimit
명령은 래퍼입니다setrlimit
시스템 호출을 통해 최종 문서를 찾을 수 있습니다.
일부 시스템에서는 모든 제한 사항을 구현하지 못할 수도 있습니다. 특히 일부 시스템은 파일 설명자에 대한 프로세스별 제한을 지원하지 않습니다(Linux는 지원함). 그렇지 않은 경우 쉘 명령은 작동하지 않을 수 있습니다.
답변2
엄격한 제한은 보안 목적을 위한 것입니다. 루트가 아닌 사용자의 경우 현재 설정된 하드 제한을 줄일 수만 있고 늘릴 수는 없습니다. 하드 제한을 늘리는 것은 루트 사용자(또는 sudo 권한이 있을 수 있는지 확실하지 않음)만 수행할 수 있습니다. 루트가 아닌 사용자가 할 수 있는 작업은 프로세스에 대한 제한(소프트 제한이라고 함)을 선택하는 것입니다. 이 제한은 [0, 하드 제한] 범위에 있을 수 있습니다. 이는 프로세스에서 보고 고려하는 소프트 한도입니다.