Atur PHP dari sumber dan mod_fgcid di CentOS 6, dapatkan izin ditolak

1

Saya telah mengkompilasi PHP dari sumber dan menginstalnya ke /opt/php/5.5.15/

Saya juga telah menginstal (dengan yum) httpd, dan mod_fcgid.

Saya mencoba mengonfigurasi host virtual ke exec php seperti ini:

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/my-site.example.com/site/public
    ServerName my-site.example.com
    ErrorLog /var/www/my-site.example.com/logs/my-site.example.com-error_log
    CustomLog /var/www/my-site.example.com/logs/my-site.example.com-access_log common
    <Directory /var/www/my-site.example.com/site/public>
        Options +indexes
        AllowOverride all
        Order allow,deny
        Allow from all
        Action application/x-httpd-php /php-5.5.15-bin/php-cgi
    </Directory>
</VirtualHost>

<IfModule mod_fcgid.c>
    IdleTimeout 3600
    ProcessLifeTime 7200
    MaxProcessCount 64
    DefaultMaxClassProcessCount 8
    IPCConnectTimeout 300
    IPCCommTimeout 7200
    BusyTimeout 300

    <FilesMatch ".+\.ph(p[345]?|t|tml)$">
        SetHandler application/x-httpd-php
    </FilesMatch>

    ScriptAlias /php-5.5.15-bin/ /opt/php/5.5.15/bin/

    <Directory "/opt/php">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>
</IfModule>

Saya mendapatkan kesalahan ini:

[Thu Aug 14 17:36:20 2014] [error] [client 127.0.0.1] (13)Permission denied: exec of '/opt/php/5.5.15/bin/php-cgi' failed, referer: http://my-site.example.com:10080/
[Thu Aug 14 17:36:20 2014] [error] [client 127.0.0.1] Premature end of script headers: php-cgi, referer: http://my-site.example.com:10080/

Saya sudah mencoba chmod 777 php-cgidan chown apache:apache php-cgi, keduanya tidak membuat perbedaan.

Ada ide?

Catatan: pengaturan ini berfungsi dengan baik di Debian

Petah
sumber
Apakah Anda menjalankan SELinux? Coba atur dalam mode permisif, dengan mengubah / etc / selinux / config: SELINUX=permissiveSetelah itu, reboot server.
Jakov Sosic
CentOS 6 standar, mungkin begitu (saya harus memastikan besok). Apakah ada cara untuk menyiasatinya tanpa melakukan ini, karena ini tidak ideal.
Petah
Anda dapat mengaktifkan audit dan melihat aturan apa yang berlaku, dan kemudian menulis kebijakan Anda sendiri yang memungkinkan pengguna Apache untuk menjalankan binari dari /opt/php/5.5.15/bin. Itulah sebabnya mengapa selalu cerdas untuk menggunakan paket RPM dan tidak mengkompilasi sendiri barang. Untuk php 5.5, Anda dapat menggunakan pacakges php55 dari IUS repo: dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64 Instal epel-release dan ius-release secara manual, dan kemudian instal php55u-cli php55u- bcmath ... dan semua plugin php lain yang Anda butuhkan.
Jakov Sosic
@JakovSosic mencari di log audit saat ini sepertinya httpd tidak memiliki hak exec (di bawah kebijakan SELinux) pada bin php-cgi. Adakah yang tahu bagaimana memperbolehkannya? Juga alasan untuk pengaturan khusus ini dan kompilasi dari sumber adalah bahwa saya perlu menjalankan beberapa versi PHP berdampingan.
Petah

Jawaban:

1

Jadi ternyata SELinux menolak hak httpd exec di php-cgi bin.

Melihat /var/log/audit/audit.log menunjukkan ini.

Menjalankan yang berikut memungkinkan:

sudo chcon -t httpd_sys_script_exec_t /opt/php/5.5.15/bin/php-cgi
Petah
sumber