Ubuntu işletim sisteminde her yeni kullanıcıya kendi kişisel bir home dizini oluşturuluyor. Ancak ben yeni bir kullanıcı hesabı oluşturduğumda, bu kullanıcının diğer kullanıcıların home dizinlerine girip onların dosyalarını görüntüleyebildiğini fark ettim. Her kullanıcının yalnızca kendi home dizinine erişebilmesini, başkalarının home dizinlerindeki hiçbir dosyaya erişememesini nasıl sağlayabilirim? Bu ayarları yapmak için hangi adımları takip etmeliyim ve dosya izinleri konusunda bilmem gerekenler nelerdir?
Selçuk merhaba,
Ubuntu’da (ve genel olarak Linux sistemlerde), kullanıcıların başkasına ait home dizinlerine erişebilmesi genellikle dizinlerin “world-readable” (herkes tarafından okunabilir) izinlerle oluşturulmasından kaynaklanır. Varsayılan olarak /home
altındaki kullanıcı dizinleri genellikle 755 (drwxr-xr-x) izinle gelir ve bu, diğer kullanıcıların dizine girip dosya listesini görebilmesine izin verir.
Her kullanıcının yalnızca kendi home dizinine erişmesini istiyorsan aşağıdaki adımları izleyebilirsin:
1. Home dizinlerinin izinlerini değiştir:
Öncelikle; mevcut kullanıcıların dizin izinlerini 700 (sadece sahibi tüm haklara sahip) olarak değiştirmelisin:
chmod 700 /home/kullaniciadi
Bunu, her kullanıcı için ayrı ayrı yapabilirsin:
chmod 700 /home/kullanici1
chmod 700 /home/kullanici2
# vs.
700 şu anlama gelir:
- Sahibi (kullanıcı): okuma, yazma, çalıştırma (rwx)
- Grup ve diğerleri: hiçbir erişim yok (—)
2. Yeni kullanıcılar için otomatik izin ayarı:
Yeni eklenen kullanıcıların da home dizinlerinin 700 izinli gelmesini istiyorsan, kullanıcı eklerken useradd
komutuna özel bir komut verebilir veya sistemdeki iskelet dosyası şablonunda (genellikle /etc/skel
) dizin oluşturma komutunun sonrasında izinleri düzeltebilirsin.
Yani, yeni kullanıcı ekledikten hemen sonra:
chmod 700 /home/yeni_kullanici
3. Dosya ve dizin izinlerini topluca değiştirme:
Bir sistemde birden fazla kullanıcı varsa, topluca izinleri değiştirmek için şu komutu kullanabilirsin:
for d in /home/*; do chmod 700 "$d"; done
4. /home dizininin kendisi:
Ana dizin olan /home
’un kendi izni genelde 755 kalmaya devam etmeli, aksi halde sistemde beklenmedik sorunlar çıkabilir. Sadece altındaki kullanıcı klasörlerinin haklarını kısıtlamak yeterlidir.
5. NOT:
- Eğer bazı kullanıcılar dosyalarını başkalarıyla paylaşmak istiyorsa (örneğin ortak grup çalışması yapılacaksa), farklı bir paylaşım dizini (ör.
/srv/share
) oluşturmak ve grup tabanlı izinler ayarlamak daha doğru olur. - Komutları uygulayabilmek için root yetkisine ihtiyacın olur.
Ekstra Bilgiler:
- İzinler hakkında daha fazla bilgi için:
man chmod
veya Ubuntu Dosya İzinleri Kılavuzu - Grup veya ACL kullanımıyla daha ince ayarlar da yapılabilir, ama temel ihtiyacın için yukarıdakiler yeterli.
Sorunun başka bir yönü veya takıldığın detay olursa örnek senaryo ile açıklayarak tekrar sorabilirsin. Kolay gelsin!
nginx bulunan bir sunucuda (www-data) bu tarz dosyalar internetten erişim kesiliyor chmod 700 yaptığımda. Bunu düzeltmek ve içerikleri internetten erişilebilir yapmak ve sadece kendi kullanıcısı tarafından erişilebilecek şekilde nasıl yapabilirim?
Selçuk merhaba,
Çok önemli bir noktaya değindin. Eğer bir web sunucusunda (örn. nginx, kullanıcısı genellikle www-data
) dosyaları internetten erişilebilir tutmak istiyorsan ve aynı zamanda kullanıcıların kendi home dizinleri gizli kalsın istiyorsan, doğrudan home dizinlerine 700 yapmak çoğu senaryoda uygun değildir. Çünkü böyle yapınca web sunucu kullanıcısının bu dizinlere erişimi de engellenir; dolayısıyla web üzerinden yayınla(n)an dosyalara erişilemez.
Çözüm için öneriler:
1. Web içeriği ayrı bir dizinde tut
Kullanıcıların kişisel home dizinlerinden bağımsız, “paylaşımlı” veya erişimi kontrollü bir klasör yaratmak en sağlıklısıdır. Örneğin:
- Web yayınlanacak dosyaları
/var/www
veya/srv/www
gibi bir dizinde tut. - Bu dizinin sahibi veya grubu
www-data
olsun ya da erişim izinleri uygun şekilde yapılandırılsın.
Örneğin:
sudo mkdir -p /var/www/kullanicisayfasi
sudo chown kullanici:www-data /var/www/kullanicisayfasi
sudo chmod 750 /var/www/kullanicisayfasi
- Burada
kullanici
dizini görebilir, yazabilir;www-data
da grup üyesi olarak okuyabilir. - Home dizinin tamamına 700 verdikten sonra kullanıcının web içeriği paylaşacağı dosyaları bu dizine koymasını söyleyebilirsin.
2. Sembolik bağlantı (symlink) ile çözüm (tercihe göre)
Kullanıcının home dizininde bir klasörü (ör. public_html
) erişilebilir bırakıp, diğer tüm dosyaları gizli tutabilirsin.
Home dizininde sadece public_html
klasörü:
chmod 701 /home/kullanici # Sadece sahibi ve başkası çalıştırabilir, ama listeleyemez.
chmod 755 /home/kullanici/public_html # Burayı herkes (www-data) okuyabilir.
- Böylece sadece bu klasörü webde yayınlayabilirsin; kullanıcıların asıl home dizinleri yine gizli olur.
- Web sunucu ayarından root’u
/home/kullanici/public_html
dizinine göster.
3. nginx’e özel öneri
nginx’in kök dizinini doğrudan kullanıcıya ait home dizinine (örn. /home/kullanici/public_html
) ayarladıysan, yukarıdaki gibi sadece gerekli olan dizine 755 ver; diğer kısımları kısıtla.
nginx’in erişmesini istediğin dizin:
- Sahibi: kullanıcı
- Grup: www-data (veya okuma–çalıştırma izni olan bir grup)
- İzin: En az 755 (drwxr-xr-x)
Ana home dizini:
- 701 yeterli olur, bu şekilde sadece sahibi ve başkaları için “çalıştır” izniyle alt klasöre erişim mümkün olur, ancak içeriklerin listelenmesi engellenir.
Örnek:
chmod 701 /home/kullanici
chmod 755 /home/kullanici/public_html
4. Tam güvenlik gerekiyorsa
- Tüm home dizinlerine 700 ver.
- Web içerikleri için tamamen ayrı dizinler kullan ve bunların sahibi ile izinlerini kesin olarak belirle.
Kısa özet:
- Home dizinlerine 700 yapmak web açısından erişimi engeller.
- Web yayın dosyalarını ayrı bir yerde tutmak veya
public_html
gibi bir alt dizini özel izinle açmak en pratik yöntem. - Sadece erişime açmak istediğin dizinlere 755, ana home dizinine ise 701 izni yeterli olur.
Ek soruların veya spesifik bir senaryon varsa, detay verirsen ona göre örnekle açıklayabilirim.
Yukarıdaki iki komut ile problemimi çözdüm, bu şekilde internetten resimlere erişim sağlanabiliyor ve farklı kullanıcılar diğer kullanıcıların klasörüne giremiyor. Teoride www-data grubuna dahil kullanıcılar hepsine erişebiliyor sanırım, ancak onu da sadece nginx kullanıyor ve başka kullanabilecek kimse yok.
Teşekkürler.
Geri dönüşün için teşekkürler, çözümü netleştirmek için birkaç küçük teknik detay daha ekleyeyim:
Evet, bu yöntemle:
- Her kullanıcının home dizinini 700 yapıp izole ediyorsun,
- Webden erişilmesi gereken dosyalar ise
/var/www/kullanicisayfasi
gibi bir dizinde, uygun (ör. 750) izinlerle yayınlanıyor, www-data
grubundaki sadece nginx süreci veya gerçekten yetkilendirdiğin kullanıcılar erişebiliyor.
Buradaki risk noktası tam söylediğin gibi, eğer sisteme başka biri de “www-data” grubundan giriş yapabiliyorsa, tüm web dizinlerine erişebilir. Çoğu sunucuda sadece nginx’in bu grupta olması güvenlik açısından yeterlidir.
Ekstra bir güvenlik katmanı istiyorsan:
- Her kullanıcının kendi web klasörünü farklı bir grup ile oluşturup, sadece ilgili web servisine özel grup ataması yapabilirsin,
- Yedekleme ya da komut satırından yetkisiz erişimin önüne geçmek için, “www-data” yetkisini minimize etmeye devam edebilirsin.
Senaryon için şu anki yapı, tipik bir web hostingde olması gereken güvenli yaklaşımı karşılıyor.
Sorunun tekrar açılması veya yeni bir detayda spesifik ayar gerekirse, senaryona göre adım adım yardımcı olabilirim.
Kolaylıklar dilerim!