ฉันจะอนุญาตการเชื่อมต่อ MySQL ผ่าน SELinux ได้อย่างไร


21

ฉันต้องการปล่อยให้ SELinux ทำงานบนเซิร์ฟเวอร์เพื่อความปลอดภัยที่เพิ่มขึ้นที่ถูกกล่าวหา
ฉันมักจะปิดการใช้งาน SELinux เพื่อให้ทุกอย่างทำงาน
ฉันจะบอก SELinux ให้อนุญาตการเชื่อมต่อ MySQL ได้อย่างไร
สิ่งที่ฉันพบมากที่สุดในเอกสารคือบรรทัดนี้จาก mysql.com:

หากคุณใช้งานภายใต้ Linux และเปิดใช้งาน Security-Enhanced Linux (SELinux) ตรวจสอบให้แน่ใจว่าคุณได้ปิดใช้งานการป้องกัน SELinux สำหรับกระบวนการ mysqld

ว้าว ... มันมีประโยชน์จริงๆ


1
โปรดให้ข้อมูลทั้งหมดต่อไปนี้เพื่อให้เรามีโอกาสช่วยเหลือคุณ 1. Linux Distro และ Version, 2. เวอร์ชั่น MySQL และแหล่งการติดตั้ง, 3. รายการบันทึก AVC จากการเชื่อมต่อที่ถูกปฏิเสธ, 4. บันทึก MySQL ที่เกี่ยวข้อง, ถ้ามี 5. ผลลัพธ์ของgetsebool -a | grep mysql6. ขั้นตอนที่แน่นอนที่คุณได้ทำซ้ำ
hobodave

คำตอบ:


40

เพื่อตรวจสอบ SELinux

sestatus

หากต้องการดูว่ามีการตั้งค่าสถานะใดบ้างบนกระบวนการ httpd

getsebool -a | grep httpd

เพื่ออนุญาตให้ Apache เชื่อมต่อกับฐานข้อมูลระยะไกลผ่าน SELinux

setsebool httpd_can_network_connect_db 1

ใช้ตัวเลือก -P ทำให้การเปลี่ยนแปลงเป็นแบบถาวร หากไม่มีตัวเลือกนี้บูลีนจะถูกรีเซ็ตเป็น 0 เมื่อรีบูต

setsebool -P httpd_can_network_connect_db 1

3
ดูเหมือนว่าจำเป็นเมื่อเชื่อมต่อผ่านลูปแบ็ค 127.0.0.1 เช่นกัน?
Devin Ceartas

@ เดวินแน่นอน
e18r

2
หากคุณต้องการอนุญาตให้ผู้ใช้เชื่อมต่อกับเซิร์ฟเวอร์ mysql ในพื้นที่คุณต้องเปิดบูลีน selinuxuser_mysql_connect_enabled ด้วย
Anton Makovetsky

setsebool -P httpd_can_network_connect 1อาจจำเป็น สิ่งนี้แนะนำในบันทึกของฉันโดยเรียกใช้ausearch -m avc -ts today | audit2whyตามที่แนะนำในความคิดเห็นโดย vnix27
ไซต์

2

คุณได้รับข้อผิดพลาดหรือไม่? คุณใช้ลินุกซ์รสชาติแบบไหน? บริบทด้านความปลอดภัยเป็นจุดเริ่มต้นที่ดีหากคุณได้รับข้อผิดพลาด ls -Z จะให้บริบท ... แต่คำถามของคุณคลุมเครือมาก


ฉันกำลังเชื่อมต่อจากกล่องหน้าต่าง ไม่มีข้อผิดพลาด ... การเชื่อมต่อถูกปฏิเสธและหน้าหมดเวลา ฉันรู้ว่าถ้าฉันปิดทุกอย่าง selinux จะดี

เนื่องจากการเชื่อมต่อเข้ามาจากกล่องหน้าต่าง ls -Z ให้ข้อมูลเกี่ยวกับไฟล์ในไดเรกทอรีใดก็ตามที่ฉันอยู่ในกล่องลินุกซ์เท่านั้น

ในคำถามของฉันข้างต้นฉันอ้างถึง mysql อ้างอิง ... ซึ่งกล่าวว่าปิดการป้องกัน selinux สำหรับกระบวนการ mysqld ... แต่มันไม่ได้บอกว่าจะทำอย่างไร :( ฉันไม่สามารถหาวิธีได้

มีอะไรในบันทึกในกล่อง Linux หรือไม่ selinux สามารถหยุด httpd จากการเชื่อมต่อซ็อกเก็ต ...

ไม่มีข้อความใดในบันทึกหรือบันทึกที่ปลอดภัย ... มีบันทึกใดที่คุณนึกไว้หรือไม่

1

เห็นได้ชัดว่าการกำหนดค่า selinux นั้นไม่สำคัญ คุณอาจต้องการที่จะเริ่มต้นที่นี่

setenforce 0

ทำให้ selinux เข้าสู่โหมดอนุญาตซึ่งอนุญาตให้อะไรก็ได้ แต่บันทึกสิ่งที่อนุญาต รีบูตเครื่องหรือ

setenforce 1

กลับสู่การบล็อกสิ่งที่นโยบายไม่อนุญาต

ตรวจสอบเหล่านี้เอกสารนโยบาย SELinux สำหรับ MySQL ใน Fedora


1

คุณแน่ใจหรือว่าเป็น selinux การเชื่อมต่อปกติจากภายนอกควรได้รับอนุญาตจาก selinux ดังนั้นมันอาจเป็นไฟร์วอลล์ หากคุณมีบริการในท้องถิ่นที่พยายามเชื่อมต่อกับ mysqld นั่นคือสิ่งที่แตกต่าง: http://docs.fedoraproject.org/en-US/Fedora/13/html/Managing_Confined_Services/sect-Managing_Confined_Services-MySQL-Booleans.html


1

ausearchคำสั่งช่วยสามารถค้นหาบันทึกข้อผิดพลาด


1
ausearch -m avc -ts วันนี้ | audit2why คำสั่งสามารถแนะนำวิธีแก้ปัญหาได้
vnix27

1

คุณสามารถสร้างนโยบายท้องถิ่นได้เช่นกัน:

"คุณสามารถสร้างโมดูลนโยบายท้องถิ่นเพื่ออนุญาตการเข้าถึงนี้อนุญาตการเข้าถึงนี้ในตอนนี้โดยการเรียกใช้:"

grep httpd /var/log/audit/audit.log | audit2allow -M mypol

semodule -i mypol.pp

หรือเปิดใช้งานทั่วโลกสำหรับเซสชันจริง:

setsebool httpd_can_network_connect_db 1

หรือถาวร:

setsebool -P httpd_can_network_connect_db 1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.