PHP betikleri / dizinleri için ne izinler?

4 Cevap php

I am trying to help a friend moving a web-site from one web-hotel to another. The old place is already closed, I have only a flat tar file of what was in it.

Bu temel soru ise özür dilerim. Ben bu yeni am ...

Web sitesi html belgeler içerdiği ve bir web sitesine veri göndermek için (cep telefonu yüklenecek) küçük bir java uygulamasını indirebilirsiniz.

The mobile java application sent a string to URL=/php/register.php This php script included another php script, "../inc/db_login.php" which connected to a SQL DB using "$link=mysql_connect().". register.php did the SQL insert for putting the new sent data in the DB.

Ben yeni bir web sitesinde bu 2 PHP dosyaları koymak gerekir ve dizinleri ve dosyaları olmalıdır ne izinleri nerede Benim sorum, basicaly olduğunu.

Eski web sunucusu belli bir / php ve / inc dizinleri vardı. Bunların hiçbiri yeni webserver var ... Ben bunları oluşturmak mı? Ne izni olmalıdır? Ben ayrı bir php dosyasında şifre olmasının nedeni / php ve / inc dizin muhtemelen farklı izinleri vardı ... güvenlik oldu sanırım ...

The new server has directories: /httpdos, /httpsdos, /cgi-bin, /conf (and some others probably irrelevant)

1) does the files-extension (.php) means something to the server: as PHP scripts are "included" in HTML code (between , does the server need to look at the file suffix or is it irrelevant? (I understand that the server reacts on the , of course)

2) "kamu" dosya benim durumumda (register.php) httpdocs dizinine konulmalıdır veya sunucu (bence apache) şeye tepki ve başka bir dizine alınır mı?

X veya R - 3) PHP komut dosyası izin RX, var mı -? OS perspektiften andan itibaren ben apache sadece onlar R olması gerektiğini, yani bu dosyaları okuyor sanırım - ama bu PHP hizmet "durdurulmuş" ise müşteri kendi tarayıcısında tüm PHP kodu almak anlamına gelecekti (?). Bu ikili, ne de bir # olduğu gibi X ama, ben bu olmalı sanırım - - Ben olmayı tercih ederim! ... R?

Kamu PHP komut dosyası başka dir (yerine / httpdocs örneğin / php) yerleştirilebilir Eğer 4) / php (ve script) izni için ne olmalıdır?. Ben sunucu bu / php dizinine hakkında bilmek zorunda Guess (veya her zamanki varsayılan vardır?)

5) PHP komut dosyası (.. / Inc / db_login.php, SQL şifrenizi içeren) / httpdocs sanırım altında olmamalıdır dahil. Bu benim register.php ... Bu işi / httpdocs alt ağaç altında olmayan bir dosyayı mı dahil olduğu anlamına gelir? Sunucu bilmek gerekiyor mu?

Ben Sadece cevap varsayılan varsayalım (ve eğer bu değişti nerede olduğunu söyleyebilirim) ... sunucu yapılandırmasını bilmeniz gerekebilir anlıyorum.

Ben bu yeni am (PHP / SQL / apache / Web sitesi) yani lütfen bu konuda açıklayıcı olabilir. Ben daha az açıklama :-) orada gerekli, oldukça iyi Perl, Python, C ve linux biliyorum

Çok teşekkürler.

/ Christophe.

4 Cevap

Dizinleri izinleri kullanılabilir olması için idam olmalı. Genellikle bu 0755. ; PHP betikleri mod_php idam değil, okumak değildir aracılığıyla çalıştırın 0644 Bunun için yeterli olacaktır. Web sunucusu olarak çalışan kullanıcı tarafından sahip olunan gerekir yazılmalıdır dizinleri. Izinleri ile ilgili ek endişeler, örneğin olabilir SELinux, ancak yukarıdaki temelleri üzerinden alırsınız.

Diğer kullanıcılar veya dış müşterileri tarafından erişilebilir olmamalıdır Belgeler 0600, web sunucusu kullanıcı tarafından sahip olunan ve DocumentRoot dışında yer olmalıdır. Güvenli Mod mod_php'yi çalışan hiç DocumentRoot dışında bir şey de dahil olmak üzere komut engelleyeceğini unutmayın; Bir ağlanacak kusur.

PHP / suPHP'ye ve benzeri hem de izinleri sorunları gidermek için bir işlev kodlu ettik:

function realChmod($path, $chmod = null)
{
    if (file_exists($path) === true)
    {
        if (is_null($chmod) === true)
        {
            $chmod = (is_file($path) === true) ? 644 : 755;

            if (in_array(get_current_user(), array('apache', 'httpd', 'nobody', 'system', 'webdaemon', 'www', 'www-data')) === true)
            {
                $chmod += 22;
            }
        }

        return chmod($path, octdec(intval($chmod)));
    }

    return false;
}

Belki sizin için yararlıdır.

1) a. Php uzantısı ile sona dosyalar Apache tarafından PHP derleyici kapalı teslim edilir. Uygun yapılandırma bunu kurmak değilse, PHP dosyaları sunucu tarafından metin dosyaları gibi servis olsun. Apache yapılandırma hattı "AddHandler php5-script php" httpd.conf dosyasında bu kurma PHP5 yöntemidir.

2) register.php Apache htdocs klasöründe, register.php dosyasında bir "php" klasörü olması gerekir, bu yüzden java uygulaması onu arıyor gibi, http://www.example.com/php/register.php erişilebilir olması gerekmektedir o.

3) PHP dosyaları Apache hizmetini çalışıyor kullanıcı tarafından okuma erişimi gerekir. Bir Apache modülü olarak PHP kullanarak bu PHP için ayrı bulunuyor konuşmak için hayır 'servis' vardır. Bir PHP dosyası için bir istek aldığında yerine Apache hizmeti, dosyayı ayrıştırmak ve Apache hizmeti müşteriye hizmet vermektedir sonucu, el PHP ile bir kabuk çağrı yapar. Eğer komut satırından (CLI setup) PHP'nin kullanılarak sadece sanki komut çalıştırma izni, ve bir #!/path/to/php-bin hattı ile başlamak gerekir.

4) İstenen dosya (register.php) Apache ile hizmet amacıyla htdocs içinde olması gerekir. PHP "Güvenli Mod" özürlü ile çalışıyorsa, register.php htdocs klasörü dışında bir dosya içerebilir.

5) yolu "../inc/db_login.php" register.php htdocs/php/register.php, bu db_login vereceğini içinde olduğu, (register.php) başlangıçta getirilen idi PHP script göredir, yani. htdocs/inc/db_login.php de php.

URL'ler üzerinden doğrudan ele alınması amaçlanan tüm PHP dosyaları mutlu (bu olağan bir uygulamadır) statik içerik olarak aynı dizinlerde bulunabilir.

Bu dosyaları dahil tutmak için web sunucusu görünür olanlar dışında en az bir dizin olması iyi bir uygulama olduğunu, ancak PHP yolu hala içermelidir içerir. '.

Ben kök dosya sistemi olmayan standart dizinlere çok koyarak değil tavsiye ederim - varsayılan Webroot dağılımı göre değişir, ama genellikle gibi bir şey ile gitmek:

/var/www/htdocs - as the document root /usr/local/php - for include files

Eğer web sunucusu chrrot çalışan niyetinde olmadığını Açıkçası, bu doğrultuda aktarılması gerektiğini.

Tüm dosyaları mümkün olduğunca bu uid tarafından yazılabilir ne kısıtlayabilirsiniz, ancak o zaman potansiyel bir saldırı vektörü kapatmak, web sunucusu altında çalıştığı uid tarafından okunabilir olmalıdır.

Webdev takım olarak grup sahipliği ile webdev grubunun bir üyesi tarafından sahip olunan drwxrwSr-x, (httpd uid webdev grubunda olmayan) olarak ben genellikle benim dirs kurma ile gitmek ve dosyaları bu sebeple-rw-rw-r - Yani webdex grubunda herkesin dosyaları değiştirebilir, ve httpd uid sadece dosyaları okuyabilir.

. 1) dosyaları-uzantısı (php) sunucuya bir şey anlamına gelmez:

Evet - PHP kurulum kılavuzunu okuyun gidin.

C.