www-veri izinleri?


108

Bu yüzden / var / www (kek olarak adlandırılır) içinde bir dizinim var ve www-data'nın ona yazmasına izin vermem gerekiyor, ama aynı zamanda ona da yazmak istiyorum (sudo kullanmak zorunda kalmadan). Makinemdeki başka bir kullanıcının (veya bir bilgisayar korsanının) bu dizindeki dosyaları değiştirmeye çalışması durumunda izinleri 777 olarak değiştirmekten korkuyorum. Yalnızca kendime ve Apache'nin www verilerine erişime nasıl izin veririm?

Yanıtlar:


168
sudo chown -R yourname:www-data cake

sonra

sudo chmod -R g+s cake

İlk komut sahibi ve grubu değiştirir.

İkinci komut, aynı grup izinlerine sahip pasta içinde yeni dosya ve dizinleri tutacak s özniteliğini ekler.


3
Chmod g + s neden yinelemeli?
Ben Rogmans

g + s hakkında bilgim yoktu. çok çok kullanışlı!
FRAGA

1
Kullanıcı, www-data'nın kendi içinde oluşturduğu dosyalarla ve www-data ile oluşturulan bir dizinde www-data tarafından oluşturulan dosyalarla ne yapabilir? örneğin, düzenleme, yeniden adlandırma, silme işlemleri hakkında? anladığım kadarıyla, yeniden adlandırmak ve silmek www-data ile oluşturulan dizin içinde mümkün değildir ve www-data ile oluşturulan dosyaların düzenlenmesi kullanıcı için kesinlikle mümkün değildir.
qdinar

49

Slicehost'un bir makalesinde belirtildiği gibi :

Kullanıcı kurulumu

Öyleyse ana kullanıcıyı Apache kullanıcı grubuna ekleyerek başlayalım:

sudo usermod -a -G www-data demo

Bu, kullanıcı "demosunu" "www-data" grubuna ekler. Yukarıda gösterilen usermod komutu ile hem -a hem de -G seçeneklerini kullandığınızdan emin olun.

Grup değişikliğini etkinleştirmek için oturumu kapatmanız ve tekrar oturum açmanız gerekecektir.

Grupları şimdi kontrol edin:

groups
...
# demo www-data

Şimdi iki grubun üyesiyim: Benim (demo) ve Apache grubu (www-data).

Klasör kurulumu

Şimdi public_html klasörünün ana kullanıcıya (demo) ait olduğundan ve Apache grubunun (www-data) bir parçası olduğundan emin olmamız gerekiyor.

Bunu ayarlayalım:

sudo chgrp -R www-data /home/demo/public_html

İzinlerden bahsederken, sudo komutuyla ilgili hızlı bir not ekleyeceğim: Yukarıda gösterildiği gibi, göreli yollar (~ / public_html) yerine mutlak yolları (/ home / demo / public_html) kullanmak iyi bir alışkanlıktır. Sudo'nun doğru yerde kullanılmasını sağlar.

Sembolik bağları olan bir public_html klasörünüz varsa, sembolik bağları izleyeceği için bu komuta dikkat edin. Çalışan bir public_html klasörü söz konusu olduğunda, her klasörü elle değiştirin.

Setgid

Şimdiye kadar iyi, ancak az önce verdiğimiz komutun yalnızca mevcut klasörleri etkilediğini unutmayın. Yeni bir şey ne olacak?

Sahipliği, yeni her şeyin 'www-data' grubunda olması için ayarlayabiliriz.

İlk komut public_html dizininin izinlerini "setgid" bitini içerecek şekilde değiştirecektir:

sudo chmod 2750 /home/demo/public_html

Bu, tüm yeni dosyalara 'www-data' grubuna verilmesini sağlayacaktır. Alt dizinleriniz varsa, bu komutu her alt dizin için çalıştırmak isteyeceksiniz (bu tür izinler '-R' ile çalışmaz). Neyse ki, otomatik olarak ayarlanmış 'setgid' bitiyle yeni alt dizinler oluşturulacaktır.

Örneğin Apache'ye, örneğin bir yükleme dizinine yazma erişimine izin vermemiz gerekirse, o dizin için izinleri şu şekilde ayarlayın:

sudo chmod 2770 /home/demo/public_html/domain1.com/public/uploads

Yeni dosyalara otomatik olarak doğru sahiplik atanacağından izinlerin yalnızca bir kez ayarlanması gerekir.


Bu çözüm benim için çalışıyor. Bundan önce, sunucuyu her zaman kök kullanıcı kullanarak terminalden çalıştırıyorum. Bu çözümle 770 iznine sahip dizine dosya yükleyebilirim. Bu harika, çünkü ondan önce yalnızca 777 iznini kullanarak dosya yükleyebiliyorum.
Ifan Iqbal
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.