เวอร์ชั่นย่อ: วิธีที่ปลอดภัยที่สุดในการอนุญาตให้ใช้ Java 7 บน (ด้วย?) คืออะไร SELinux?
รุ่นยาว:
ขออภัยล่วงหน้าหากฉันใช้คำศัพท์ที่ไม่ถูกต้อง ฉันเป็นเพียงนักพัฒนา Java ที่มีทักษะ Linux น้อยมาก
ฉันเพิ่งติดตั้ง Java 7 บน CentOS รีลีส 5.3 (Final) ที่เห็นได้ชัดว่ามี Security Enhanced Linux หลังจากการติดตั้งเสร็จสมบูรณ์ (ซึ่งฉัน "ติดตั้ง" โดยการคลายไฟล์ tar.gz จาก Oracle ใน/usr/java/jdk/jdk1.7.0_25
) ฉันก็พบjava -version
และได้รับข้อผิดพลาดนี้:
Error: dl failure on line 864
Error: failed /usr/java/jdk1.7.0_25/jre/lib/i386/server/libjvm.so,
because /usr/java/jdk1.7.0_25/jre/lib/i386/server/libjvm.so:
cannot restore segment prot after reloc: Permission denied`
ฉันพบบทความสองสามฉบับที่ระบุว่าอาจเกิดจาก SELinux และลองsetenforce 0
ดูว่าปัญหาหายไปหรือไม่ ฉันรันคำสั่งนั้นและ Java ทำงาน แต่บทความเดียวกันเหล่านี้บอกว่าการออกจากsetenforce 0
โฮสต์ที่เชื่อมต่อกับอินเทอร์เน็ตเป็นสิ่งที่อันตรายและโฮสต์ของฉันเชื่อมต่อกับอินเทอร์เน็ต
มีบทความอื่น ๆ ที่แนะนำวิธีการต่อไปนี้ แต่ก็บอกว่ามันอาจเป็นอันตรายดังนั้นฉันยังไม่ได้ลองเลย
chcon -t textrel_shlib_t /usr/jre1.7.0_10/lib/i386/client/libjvm.so
... ในคำสั่งข้างต้นเส้นทางที่ส่วนท้ายของคำสั่งจะถูกแทนที่ด้วยเส้นทางของ JDK ของฉัน
สิ่งที่ฉันไม่สามารถหาได้คือ "ทางการ" (ซึ่งอาจมีความหมายหลายอย่าง) ในการรัน Java 7 บน (ด้วย?) SELinux อย่างปลอดภัย ใครบ้างมีข้อมูลสำหรับฉัน
แก้ไข:/etc/selinux/config
ผมค้นพบบทความที่เรียกว่าการแก้ไข ฉันได้ตั้งค่าตามที่แสดงในตัวอย่างด้านล่าง สิ่งนี้ยอมให้ Java รัน แต่ฉันคิดว่าตอนนี้ฉันมีช่องโหว่ด้านความปลอดภัยแล้ว
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=permissive
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
chcon
แก้ปัญหาดูสมเหตุสมผล ทางออกสุดท้ายไม่แตกต่างกันsetenforce 0
มาก