เป็นวิธีที่ปลอดภัยที่อนุญาตให้ Java 7 ทำงานบน SELinux ได้อย่างไร


9

เวอร์ชั่นย่อ: วิธีที่ปลอดภัยที่สุดในการอนุญาตให้ใช้ 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มาก
jordanm

คุณสามารถติดตั้งลงในโฮมไดเร็กตอรี่แทนได้หรือไม่?
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen: ดีฉันคิดว่าฉันทำได้ แต่มันทำงานเป็น daemon เซิร์ฟเวอร์ Tomcat ให้เฉพาะเจาะจงมากขึ้นและบางครั้งก็รู้สึกว่าเลอะเทอะเล็กน้อยเพื่อให้เซิร์ฟเวอร์ Tomcat ทำงานจากไดเรกทอรีภายในบ้านของฉัน
John Fitzpatrick

โดยทั่วไปล่อของstackoverflow.com/q/14723474/560648
การแข่งขัน Lightness ใน Orbit

คำตอบ:


2
  1. ทำความสะอาดการติดตั้งปัจจุบัน

  2. ดาวน์โหลดไฟล์ RPM ( http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html )

    yum -y localinstall /path/to/downloaded-java.rpm
    

ส่วนที่เหลือจะได้รับการดูแล


ขอบคุณ คุณสามารถอธิบายรายละเอียดเกี่ยวกับ "ล้างการติดตั้งปัจจุบัน" ได้หรือไม่? คุณหมายถึงลบสิ่งที่ฉันติดตั้งหรือไม่
John Fitzpatrick

ใช่ถูกแล้ว! ลบการติดตั้ง Oracle Java ปัจจุบันของคุณ โปรดทำตาม "ถอนการติดตั้งไฟล์ที่แตกไฟล์แบบแยกเอง" java.com/th/download/help/linux_uninstall.xml#self
user44441

4
ทำไมนี่คือทางออก?
การแข่งขัน Lightness ใน Orbit

หาก @LightnessRacesinOrbit ไม่ทราบสาเหตุที่เป็นวิธีการแก้ไขที่เหมาะสมโปรดอ่านข้อมูลว่า SELinux คืออะไร โดยพื้นฐานแล้วสคริปต์ RPM จะกำหนดสิทธิ์ที่เหมาะสมของ ACL และอื่น ๆ
eyoung100

3
@ eyoung100: ไม่จุดของฉันคือคำตอบนี้ไม่ได้อธิบายอะไรเลย ควรอธิบายว่าทำไมการลบและเปลี่ยนการติดตั้งควรแก้ไขปัญหารวมถึงให้ขั้นตอนในการดำเนินการ นอกจากนี้ฉันถามเพราะฉันติดตั้งจาก RPM แต่ก็ยังมีปัญหา
การแข่งขัน Lightness ใน Orbit
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.