Neden / var / www chmod 777'ye sahip olmamalı


67

Bir yerel ana bilgisayarda bir sayfa geliştirirken, bazen çalıştırarak çözebileceğim bir "İzin reddedildi" hatası alıyorum chmod -R 777 /var/www. Ancak, insanlar bana bunun güvenlik nedeniyle kötü bir fikir olduğunu söylüyorlar.

Neden /var/www777 bir chmod olmamalı ?


@ Serverfault.com adresinde bu konuyu tavsiye etmek istiyorum. Apache2 ve izinler için örnek bir kurulum yapmak harika bir iş çıkarır. serverfault.com/q/6895/57036 PS Yorum yapamam, bu yüzden cevap olarak eklemek zorundayım.
MystaMax

Yanıtlar:


80

777 genel olarak kötü bir izin ve nedenini size göstereyim.

Bir Casino'da veya Las Vegas'ta nasıl görünmesine rağmen, 777 sizin için bir jackpot anlamına gelmiyor. Aksine, dosyalarınızı değiştirmek isteyen herkes için jackpot. 777 (ve çirkin kuzeni 666) diğerlerine Okuma ve Yazma izinlerine (ve 777 durumunda, Yürütme) izin verir . Dosya izinlerinin nasıl çalıştığı hakkında daha fazla bilgi edinebilirsiniz , ancak kısacası üç izin grubu vardır: sahip, grup ve diğer . İzni, diğer kullanıcılar için 6 veya 7 ( rw-veya rwx) olarak ayarlayarak, herhangi bir kullanıcıya, bu dosyaları ve klasörleri düzenleme ve düzenleme yeteneği verir. Genellikle, tahmin edebileceğiniz gibi, bu güvenlik açısından kötüdür.

İşte benim örneğim:

marco@desktop:~/Projects/AskUbuntu/20105$ cd ..
marco@desktop:~/Projects/AskUbuntu$ chmod 0777 20105
marco@desktop:~/Projects/AskUbuntu$ cd 20105/
marco@desktop:~/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:32 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
marco@desktop:~/Projects/AskUbuntu/20105$ touch test
marco@desktop:~/Projects/AskUbuntu/20105$ chmod 0666 test 

Şimdiye kadar bir klasör oluşturdum ve "kötü" izinlerine sahip bir dosya yaptım (777 ve 666). Şimdi başka bir kullanıcıya geçeceğim ve bu dosyaları değiştirmeye çalışacağım.

marco@desktop:~/Projects/AskUbuntu/20105$ sudo su - malicious
malicious@desktop:~$ cd /home/marco/Projects/AskUbuntu/20105
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls
test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:33 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
-rw-rw-rw- 1 marco marco    0 2011-01-04 20:33 test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ touch bad
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ echo "OVERWRITE" > test 
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cat test 
OVERWRITE

Bu "kötü niyetli" kullanıcı olarak dosyaları dizine yerleştirebildim ve mevcut dosyalara metin enjekte ettim. Aşağıda 755 bulunan ve 644 olan bir dizinde, içerideki dosyaları ve dizinleri görebiliyorum ancak dosyaları düzenleyemiyorum ya da yenilerini oluşturamıyorum:

malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cd /home/marco/Projects
malicious@desktop:/home/marco/Projects$ touch hey
touch: cannot touch `hey': Permission denied

Apache izinlerinde, umask 022klasörler ve dosyalar için sırasıyla 0755 ve 0644'e (AKA ) bağlı kalmak isteyeceksiniz . Bu, dosyaların sahibi olarak, Apache'ye çalışması için gereken minimum erişim düzeyini verirken, onları düzenlemenizi ve değiştirmenizi sağlar.


13
Dil için üzgünüm ama bu tekme bir cevap. Teşekkürler Marco.
Luis Alvarado

Yalnızca / var / www klasörünü özgürce yönetmesine izin verilen kişiler için kullanıcılar oluşturduysanız ne olur? Çalıştığım her web sunucusu için özel Sanal Makineler kullanıyorum ve merak ettim ki hala çok dikkatli olmanız gerekiyor.
UrkoM

1
@ UrkoM Asla çok dikkatli olamazsınız. İnsanların aynı dosyalara erişmesini istiyorsanız, grup izinlerini 6/7 (0664/0775) olarak ayarlayabilir ve her kullanıcıyı bu gruba ekleyebilirsiniz. Bu kurulum (ve cevabımda tanımladığım) tüm kriterleri karşılamıyor olsa da, 0755/0644 tarihinin% 90'ının iyi kullanmak isteyeceğiniz izinler olduğunu söyleyebilirim. Yalnızca "bir kullanıcı" sistemler varsa o riski var diğer yazma izinlerine sahip olmadığı kadar çok risk.
Marco Ceppi

4
Dikkat Edilmesi Gereken Diğer Hususlar, gerçek insanları temsil etmeyen ancak bazı hizmetlerin azaltılmış yeteneklerle çalışabilmesi için (çoğunlukla güvenlik nedenleriyle, aynı zamanda oluşabilecek zararı azaltmak için) varolan birçok "kullanıcının" olmasıdır. bir kararlılık hatasından). İçeriklerini görüntüleme /etc/passwdve benzeri kullanıcıları göreceksiniz mail, newsve nobody. Sisteminizin tüm gerçek kullanıcı kullanıcılarının içeriğini değiştirebilmesi iyi olsa bile /var/www, bu "yapay" kullanıcıların yapabildiği gibi tüm işlemlerin yürütülmesini istediğiniz anlamına gelmez.
Eliah Kagan,

1) Olabildiğince basit cevap olarak. Apache veya Nginx'in klasörleri veya dosyaları nasıl işleyebileceğini açıklamıyor. Apache veya Nginx, sunuculardır, böylece uygulamalar, sizin "kötü niyetli" kullanıcınız değildir ls -lah, touch badyazamazlar veya diğer komutları kullanırlar. Klasörleri ve dosyaları nasıl değiştirebilirler? 2) Kalıtım. Klasörler ve içindeki dosyalar arasındaki herhangi bir mirası kapsamazsınız. Bir dosya önce en az 2-3 adım vardır: /var, /var/www, /var/www/project. Hangi kullanıcı / grup izinlerine sahip olmalı /var? Hangi kullanıcı / grup izinlerine sahip olmalı /var/www? Ve bunun gibi. Nasıl işbirliği yapıyorlar?
Green,

15

Temel olarak, 777'nin izinlerine sahip olmak sizi kendi başınıza hacklemeyecek, ancak birisi herhangi bir yerde bir yere dokunursa, izinleri yükseltmek ve bilgisayarınız üzerinde tam kontrol sağlamak için kullanılabilir. En kötü yanı, izinlerinizin "7" kullanılması - bu da izinleri okumak, yazmak ve yürütmek anlamına gelir .

Bir bilgisayar korsanının bilgisayarınızı ele geçirmek istediğini varsayalım. Bilgisayarınıza bir web tarayıcısı kullanarak bağlanabilir, http://yourcomputer.example.com:80/. Resimleri yüklemesine izin veren herhangi bir sayfanız varsa, ".jpg" ile bitecek bir dosyayı yeniden adlandırıp sunucunuza yükleyebilir. Artık web tarayıcısındaki o dosyaya göz atıyor ve çalışıyor, çünkü linux eklentiyi önemsemiyor, sadece çalıştırılabilir bir dosya olduğunu görüyor. Bu onu pek elde etmeyebilir, ancak hiç çalıştığı için apache kullanıcısı olarak çalıştığını biliyor. Daha sonra, apache'nin config dosyalarını düzenleyen ve ona daha da fazla erişim sağlayan değiştirilmiş bir sürüm yükler - diyelim ki apache / etc / passwd içeriğini çıkarsın. Daha sonra sistemde hangi kullanıcıların bulunduğunu görmek için bu bilgileri kullanabilir. Daha sonra ssh kullanarak bağlanabilir ve bu kullanıcılar olarak giriş yapmak için ortak şifreler deneyebilir - bu işe yaramazsa, tam bir kaba kuvvet saldırısı kullanmaya başlayacaktır. Sudo erişimi olan bir kullanıcı olarak girerse,

Şimdi, bunun muhtemel olmadığını veya gerçek bir hacker'ın işe yaramayacağını söyleyebilirsiniz. Bu doğru, ancak mesele şu ki, dosyaları chmod 777 olarak ayarlayarak, bir hackerın kullanabileceği ancak uygun gördüğü bir güvenlik deliği açtınız.

Bunun yerine en az ayrıcalık Prensibi'ni uygularsanız , o zaman bu delik oluşmaz ve sisteminiz kesmek çok daha zordur. İşleri düzgün yapmak daha zor olsa da, bunun için her türlü çabayı göstermelisin.


"Toehold" ve "escalate" için +1. Konsepti iyi tanımlar.
Kari Kääriäinen

3
Jpg olarak gizlenmiş bir dosyanın sunucuda nasıl yürütüldüğünü açıklayabilir misiniz?
Anurag Peshne
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.