İzinler sorunu: Apache Ana dizine erişim dosyalarına nasıl erişebilir?


33

Dosya izinlerinin daha önce burada ele alındığını biliyorum, ancak senaryo için başa çıkmaya çalışıyorum.

  • Dosyaları eski bir ubuntu kurulumunda yarattım.
  • Dosyaları yeni ubuntu kurulumuma kopyaladım ve web köküme koydum.
  • Dosyaları çalıştırmayı denediğimde (PHP dosyaları) izinlerle ilgili bir hata alıyorum

Bunu düzeltmeye çalışırken, önceki sahibine ait olmaları gerektiğini varsaydım, bu nedenle chown -Rdizindeki tüm dosyaların sahipliğini almak için kullanıcı adımı argüman olarak kullandım. Yeni ve eski ubuntu kurulumları arasındaki kullanıcı adlarının aynı olduğu unutulmamalıdır.

Dosyaları yeniden çalıştırmayı denediğimde, aynı sorun: izin sorunları nedeniyle 500 hata. Birisi bana başka hangi adımları atmam gerektiğini söyleyebilir mi?

Apache kurulumum için webroot giriş klasörümün içinde. Webrootumda yeni dosyalar oluşturursam, beklendiği gibi çalışırlar, soruna neden olan sadece eski dosyalar.


Dosya izinleri dosya iken kopyalandığından emin değilim, birileri bunu onaylayabilir mi? Aksi takdirde, dosyaları başka bir kullanıcıya (veya kök) vermek ve sonra onları geri almak mümkün olabilir mi?
Tagger

Tamam, yürütülmeyen dosyalardaki sorunumu çözdüm, ancak sadece chmod -R 777 dirsöz konusu dizinde çalıştırarak yaptım .
Zaten

3
Bir dosyadaki 777 izinleri, herkesin sayfalarınıza zarar verebilecek veya bilgisayar korsanlığı ile sonuçlanabilecek dosyalarınızı yazmasına izin verir. Normalde php dosyaları için kullanılan 755 ile denemelisiniz. Bir dosya için "yürütmeye izin ver" i etkinleştirmeniz gerekmediğinden emin olun, bu durumda chmod [dosyaadı] -x komutunu çalıştırabilirsiniz. Chmod komutuyla ilgili bilgilere bir sonraki bağlantıyı tıklayarak ulaşabilirsiniz: catcode.com/teachmod/chmod_cmd.html
Geppettvs D'Constanzo

Apache hata günlüğü ne gösterir?
Kees Cook

Yanıtlar:


14

Web kökünüzün üstündeki dizinler, Apache'nin dizinlere girmesine izin verecek şekilde yürütme bitine sahip olmalıdır.

Eğer Webroot'un bulunan varsa /home/user/htdocs, /, /home, /home/userve /home/user/htdocsyürütmek bit kümesi olmalıdır.


Yukarıdaki çözüm "çalışır", ancak ideal değil. Bir klasör oluşturduysanız, Apache buna yazamaz. Tersi de olur.

Bu, 0007 umask değerini ayarlayıp ve Apache grubuna (yanılmıyorsam www-data) ekleyerek "düzeltilebilir", böylece yeni oluşturulan dosyalar ve klasörler grup tarafından yazılabilir.

Alternatif olarak, alternatif bir Apache MPM takabilirsiniz: Apache2 MPM ITK ( yapılandırma hakkında bilgi ) ve Apache'nin kullanıcı altında çalışması için konfigürasyonu ayarlayabilirsiniz.


Bu bkz Marco cevabı accmplish konusunda açık talimatlar için aşağıda
ocak

2
@ hobs Daha da iyisi, askubuntu.com/a/46371/6969
Lekensteyn

44

Sunucu belgeleriniz /home/$USER/public_htmldizindeyse, çalıştırmanız gerekir.

sudo chown -R www-data:www-data /home/$USER/public_html

DocumentRoot klasörünün kullanıcıya www-datave gruba sahipliğini vermek www-data.

O zaman kendinizi gruba ekleyebilirsiniz www-data

sudo adduser $USER www-data

Son olarak, DocumentRoot klasörünü sahibine (www-data kullanıcısı) ve kendi kendine ( www-datagrubun bir parçası olarak) yazabilir hale getirmelisin :

sudo chmod -R 775 /home/$USER/public_html

Kolaylık sağlamak için public_html_fix.shiçerikli bir komut dosyası yapabilirsiniz :

#!/bin/bash

sudo adduser $USER www-data
sudo chown -R www-data:www-data /home/$USER/public_html
sudo chmod -R 775 /home/$USER/public_html

İçeride saklayın /home/$USER/binve aşağıdakileri kullanarak çalıştırılabilir yapın:

sudo chmod +x /home/$USER/bin/public_html_fix.sh

Daha sonra, istediğiniz zaman, dosya sistemindeki her yerden kendinizi bu şekilde bulmanız için çağırırsınız:

public_html_fix.sh

1
benim için çalıştı ....
Emmanuel Okeke

Mükemmel cevap! - Örnekler ve hatta bir komut dosyası ve nasıl kullanılacağı / yükleneceği ile Mükemmel!
Andre

2
Bu paylaşılan bir ana bilgisayarda yapılırsa, www-datagruptaki diğer kullanıcıların dosyalarınızı okumasını veya bu konu için yazmasını nasıl önlersiniz?
jozxyqk

Gerçekten harika cevap ... sen benim hayatımı kurtardın
NullPoiиteя

1
chmod -R 775 /home/$USER/public_htmlgerçekten korkunç. find /home/$USER/public_html -type d -exec chmod 775 {} \;ve find /home/$USER/public_html -type f -exec chmod 664 {} \;çok daha iyi
iharob

1

Chmoding dosyalarının ve apache .conf dosyalarının düzenlenmesinin yanı sıra, dosyalarımın nautilus aracılığıyla otomatik olarak monte edildiğim bir bölümdeyken benim için hiçbir şeyin işe yaramadığını söylemek istiyorum. Bu, sadece kullanıcı bölümlerini sınırlar.

Dosyalarınızın görünür olup olmadığını www-rootveya kullanıcının apache'yi çalıştığını ( ps -aux | grep apache2kontrol etmek için çalıştırın) kontrol etmek için aşağıdaki komutu çalıştırın:

sudo su -l www-data -s /bin/bash

ve bir dosyayı belge kökünden okumayı deneyin.

Dosya okunamıyorsa, şunları kontrol edin:

1) diğer tüm dosya izinlerini ayarladınız

2) Eğer kullandık FollowSymlinkssizin de .confgerekirse dosyalar

3) DocumentRoot'u kurdunuz

3) bölümünüzü tüm kullanıcılar için bağlayın. /etc/fstabBölümümü UUID üzerinden düzenlemek ve belirtmek zorunda kaldım :

UUID=afdee1d3-5bb8-4652-892f-e83a9b5ff72e /mnt/4tb      ext4    rw,nosuid,nodev,errors=remount-ro

Ardından bölümünüzü nautilus ile ayırın ve a sudo mount -a. Her şey yolunda giderse, dosyalarınız şu anda altında /mnt. Sembolik bağlantılarınızı güncelleyin ve gitmeniz iyi olur.


1

Bunu her zaman ayarlamanın en iyi yolu, VirtualMin’in yaptığı yoldur.

kullanıcı oluştur ve "myhome" grubu oluştur

Apache kullanıcısını "myhome" grubunun üyesi yapın. Buradaki bazı açıklamaların açıkladığı gibi başka bir yol değil.

Böylece apache / home / myhome / www ile birlikte / home / myhome 'a erişimi okudu ve yürüttü.

"myhome" kullanıcısı yazma erişimine sahip


Bu konsepti sevdim, fakat benim için çalışıyor gibi görünmüyor. Kullanıcı www-datagruba aittir myhome. Tüm dosya ve dizinlerin grup yazma izinleri vardır ve aittir myhome:myhome. Apache'yi yeniden başlattım. Apache hala yeni dosya ve klasörler yazamıyor. (Www-data kullanarak PHP betiği: www-data user / grup)
squarecandy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.