Dosya ve dizinlerin izinlerini tekrar tekrar nasıl değiştirebilirim?


65

Yerel bilgisayarıma apache / php / mysql yüklü ubuntu kullanıyorum.

Şimdi / var / www - dizininde devam etmekte olan projelerimin birçoğuna sahibim. Ayrıca opensource (drupal, magento, sugarcrm) ile çalışıyorum.

Karşılaştığım sorun terminal ile dosya iznini değiştirmek. Bazen tüm klasörün ve sonraki alt klasörlerin ve dosyaların izinlerini değiştirmem gerekiyor. Kullanarak tek tek değiştirmem gerekiyor

sudo chmod 777 foldername

Bunu özyinelemeli nasıl yapabilirim.

Ayrıca neden her zaman bunu yapmak zorundayım 777 , klasörler için 755 , dosyalar için 644 denedim , ancak bu işe yaramayacak.

Yanıtlar:


90

-RDosyaların izinlerini tekrar tekrar değiştirme seçeneğini eklemeniz yeterli . Bir örnek, sahibi ve grubu için tekrar tekrar okuma ve yazma izinleri ekleyin foldername:

chmod -R ug+rw foldername

İzinler 664 veya 775 gibi olacak.

İzinlerin 777 olarak ayarlanması kesinlikle önerilmez . Apache'de veya editörünüzde izinlerle ilgili hatalar alıyorsunuz çünkü apache www-datasizden farklı bir kullanıcı ( ) altında çalışıyor .

Yazmak istiyorsanız /var/www, kendinizi www-datagruba ekleyin ve umask + izinlerini uygun şekilde ayarlayın.

  • Kendinizi www-datagruba ekleyin :sudo adduser $USER www-data
  • Dosyaların sahipliğini değiştir /var/www:sudo chown -R www-data:www-data /var/www
  • Umask'ı değiştirin, böylece Apache tarafından yeni oluşturulan dosyalar da gruba yazma izni verir. Ekle umask 007için /etc/apache2/envvars.
  • Kendini Grant (teknik olarak, grup www-data) yazma izinleri: sudo chmod -R g+w /var/www.

evet yanlış yere r bayrağı ekliyordum, chmod için o + w'den sonra ekliyordum.
JohnMerlino

Ayrıca, kullanmaya çalışırsanız chmod -r blablabla(-R yerine küçük -r) Herkesin okuma iznini kaldırmanız gerekebilir ...
Cyril Duchon-Doris

1
Bu talimatlardan sonra, .htaccessapache için yazma iznine sahip dosya olmadığını kontrol etmek iyi bir fikirdir . find /var/www/ | grep .htaccess | xargs ls -l.
reynoldsnlp

23

kaba kuvvet:

sudo find foldername -exec chmod a+rwx {} ";"

Ne çalışmıyor? Daha spesifik ol!

sudo find foldername -type d -exec chmod 755 {} ";"
sudo find foldername -type f -exec chmod 644 {} ";"

Klasörün içindeyken, "foldername" ifadesini kaldırın
Enrique

4
... ve ile değiştirin.
djjeck

4

Hiçbir şey için 777'ye ihtiyacınız yok. En kötü durumda, belirli dosya ve klasörlerin sahibini "www-data" kullanıcısı olarak değiştirmeniz gerekir.

sudo find /var/www -type d -print0 | xargs -0 chmod 755
sudo find /var/www -type f -print0 | xargs -0 chmod 644
sudo find /var/www/some/subset -print0 | xargs -0 chown www-data:www-data

Lekensteyn'in grup üyeliği yöntemini kullanıyorsanız, yukarıdaki 755'ten 775'e ve 644'den 664'e değiştirin ve ardından grubun yapışkanlığını zorlayın:

sudo find /var/www/some/subset -type d -print0 | xargs -0 chmod g+s

3

Nautilus'taki alt klasörleri ve dosyaları değiştirebilirsiniz. Aşağıdaki resimde gördüğünüz gibi. Düğmelerin üzerindeki izinlere sahip olmak için, Ubuntu Tweak'teki seçeneği etkinleştirebilirsiniz.

görüntü tanımını buraya girin


LANG=C [command]İngilizce çevirileri almak için kullanın .
Lekensteyn

1

Tüm dosyalarınızın dünyaya okunabilir olmasını istiyorsanız (yani, yalnızca statik bir HTML dosyaları / resimleri seti) istiyorsanız, şu komutu kullanın:

chmod -R a+r <base directory>

Bu, tüm dosya ve alt dizinleri tekrar tekrar gözden geçirecek ve okuma izni ekleyecektir.

UYARI : Çalıştırılabilir dosyalar için bunu yapmayın! Sadece herkes tarafından görülmesi gereken dosyalar.


" chmod -R a+xHiçbir şey yapma" ya da " chmod -R a+rçalıştırılabilir şeyler yapma " mı diyorsun ?
aleclarson

Onardım. Sonra doğrudur. Başkalarının oluşturduğunuz çalıştırılabilir dosyalara erişmesine izin verme konusunda dikkatli olun.
Ryan Shillington,
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.