Pesan **SELinux AVC denial** ini menunjukkan bahwa **PHP-FPM** (dengan konteks `httpd_t`) diblokir oleh SELinux saat mencoba terhubung ke socket MySQL (`/var/lib/mysql/mysql.sock`). Ini terjadi karena konteks keamanan SELinux tidak mengizinkan proses PHP-FPM untuk mengakses socket MySQL.
Berikut adalah langkah-langkah untuk memperbaiki masalah ini:
---
### 1. **Periksa Konteks SELinux**
Periksa konteks SELinux untuk socket MySQL:
```bash
ls -Z /var/lib/mysql/mysql.sock
```
Contoh output:
```
srwxrwxrwx. mysql mysql system_u:object_r:mysqld_var_run_t:s0 /var/lib/mysql/mysql.sock
```
Pastikan konteksnya adalah `mysqld_var_run_t`.
---
### 2. **Perbaiki Konteks Socket MySQL**
Jika konteks socket MySQL tidak sesuai, perbaiki dengan perintah berikut:
```bash
sudo chcon -t mysqld_var_run_t /var/lib/mysql/mysql.sock
```
---
### 3. **Izinkan PHP-FPM untuk Mengakses Socket MySQL**
Anda perlu mengizinkan proses PHP-FPM (dengan konteks `httpd_t`) untuk mengakses socket MySQL. Jalankan perintah berikut:
```bash
sudo setsebool -P httpd_can_network_connect_db 1
```
Boolean ini mengizinkan layanan web (termasuk PHP-FPM) untuk terhubung ke database.
---
### 4. **Buat Aturan SELinux Khusus (Opsional)**
Jika boolean di atas tidak cukup, Anda dapat membuat aturan SELinux khusus untuk mengizinkan akses:
```bash
sudo ausearch -c 'php-fpm' --raw | audit2allow -M my-phpfpm
sudo semodule -i my-phpfpm.pp
```
Perintah ini akan membuat modul SELinux khusus berdasarkan log AVC denial dan menerapkannya.
---
### 5. **Restart Layanan**
Setelah melakukan perubahan, restart layanan PHP-FPM dan MySQL:
```bash
sudo systemctl restart php-fpm
sudo systemctl restart mysqld
```
---
### 6. **Periksa Koneksi PHP ke MySQL**
Uji koneksi PHP ke MySQL dengan skrip sederhana:
```php
$host = 'localhost';
$user = 'root';
$pass = 'password';
$db = 'test';
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
```
Simpan file ini di direktori web Anda (misalnya `/var/www/html/test.php`) dan akses melalui browser.
---
### 7. **Periksa Log untuk Debugging**
Jika masih ada masalah, periksa log berikut:
- Log SELinux:
```bash
sudo tail -f /var/log/audit/audit.log
```
- Log PHP-FPM:
```bash
sudo tail -f /var/log/php-fpm/error.log
```
- Log MySQL:
```bash
sudo tail -f /var/log/mysql/error.log
```
---
### 8. **Nonaktifkan SELinux (Opsional)**
Jika Anda tidak ingin mengonfigurasi SELinux, Anda dapat menonaktifkannya sementara:
```bash
sudo setenforce 0
```
Untuk menonaktifkan SELinux secara permanen, edit file `/etc/selinux/config`:
```bash
sudo nano /etc/selinux/config
```
Ubah nilai `SELINUX` menjadi:
```ini
SELINUX=disabled
```
Setelah itu, reboot sistem:
```bash
sudo reboot
```
---
### Ringkasan Solusi
1. Periksa dan perbaiki konteks SELinux untuk socket MySQL.
2. Izinkan PHP-FPM untuk mengakses database dengan `httpd_can_network_connect_db`.
3. Buat aturan SELinux khusus jika diperlukan.
4. Restart layanan PHP-FPM dan MySQL.
5. Uji koneksi PHP ke MySQL.
6. Periksa log untuk debugging lebih lanjut.
Dengan mengikuti langkah-langkah di atas, masalah koneksi PHP-FPM ke MySQL karena SELinux seharusnya teratasi. Jika masih ada masalah, berikan detail error atau log untuk analisis lebih lanjut. ????