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 me@example.co.nz
    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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.