paxd를 사용하여 grsec-hardend Arch Linux 커널에서 Java를 어떻게 실행할 수 있나요?

paxd를 사용하여 grsec-hardend Arch Linux 커널에서 Java를 어떻게 실행할 수 있나요?

나는 paxd가 설치된 최신 grsec-hardened 4.9.x Linux 커널을 갖춘 Arch Linux를 가지고 있습니다. 하지만 이로 인해 Java를 실행하려고 하면 다음 오류가 발생합니다.

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000035ea1000000, 2555904, 1) failed; error='Operation not permitted' (errno=1)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 2555904 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/[username]/hs_err_pid2813.log

과거에 이 오류가 발생하여 Java가 이 작업을 수행하도록 허용했지만 이를 수행하는 방법에 대한 리소스를 기억하거나 찾을 수 없습니다. 나는 보았다이 SO 답변paxctl, 하지만 아쉽게도 Arch 위키에 언급된 grsec 관련 유틸리티가 모두 설치되어 있음에도 불구하고 내 시스템에서 명령을 찾을 수 없다고 말합니다 .

그렇다면 Java를 허용하려면 어떻게 해야 할까요?

답변1

paxctl당신을 위해 일해야합니다,

root #paxctl -h
PaX control v0.7
Copyright 2004,2005,2006,2007,2009,2010,2011,2012 PaX Team <[email protected]>

usage: paxctl <options> <files>

options:
    -p: disable PAGEEXEC        -P: enable PAGEEXEC
    -e: disable EMUTRAMP        -E: enable EMUTRAMP
    -m: disable MPROTECT        -M: enable MPROTECT
    -r: disable RANDMMAP        -R: enable RANDMMAP
    -x: disable RANDEXEC        -X: enable RANDEXEC
    -s: disable SEGMEXEC        -S: enable SEGMEXEC

    -v: view flags          -z: restore default flags
    -q: suppress error messages -Q: report flags in short format
    -c: convert PT_GNU_STACK into PT_PAX_FLAGS (see manpage!)
    -C: create PT_PAX_FLAGS (see manpage!)

일반적으로 저는 이와 같은 모든 제한을 비활성화합니다.

paxctl -pemrxs `which java`

. paxctl​예를 들어, 비활성화하려는 경우 mr다음을 수행합니다.

sudo setfattr -n user.pax.flags -v "mr" `which java`

관련 정보