Linux kullanmaya başladığınızda en çok karşılaşacağınız sorunlardan biri izinlerle ilgili olacaktır. Windows da çoğunlukla olduğu gibi (bazen admin olmasa bile) sistemi açan kişinin bir anda her dosyayı kontrol edebilmesi olayı, Linux da pek olası değildir. Eğer öyle olsa bile linux sistemlerinin böyle kullanılmaması tavsiye edilir, çünkü yanlışlıkla bir dosyayı silmek geri döndürülmesi güç sonuçlar yaratabilir ya da sunucu olarak işlev görüyorsa, güvenlik açığı doğurabilir. Ayrıca bir dosyaya tek bir kullanıcı için izin vermek de her zaman mantıklı olmayabilir bu sebeple kullanıcıları bir gruba atmak ve dosyalara erişimi gruplara verdiğiniz izinlere göre yönetmek fazlasıyla yararlı olabilir.
"/dosya/dosya2/gizli" yolunda bulunan bir dosyaya erişim vermek istediğiniz vermek istediğiniz "murat" diye bir kullanıcı var diyelim. Tabii ki / ile tüm dosya sistemine bu kullanıcı için verebilirsiniz ama sağlıkı bir yöntem değil bu sebeple, ilk önce "adminler" adında bir grup oluşturuyorum, sonra da bu gruba "murat" adlı kullanıcıyı ekliyorum:
sudo groupadd adminler
sudo usermod -a -G adminler murat
Sonra bu gruba "chgrp" ile bahsettiğim dosyanın sahipliğini veriyorum. Dosyanın sahibi başka bir kullanıcı olabilir bu sadece grubu belirliyor. "chmod" ile bu dosya üzerindeki izin modunu belirliyorum. Tabii ki bu herkes için belirleniyor:
sudo chgrp -R adminler /dosya/dosya2/gizli
sudo chmod -R g+w /dosya/dosya2/gizli
Aşağıdaki satırlar ise bu dosyaya setgid vermenizi sağlıyor böylece daha sonra açılacak tüm alt dosya ve dizinler belirlediğiniz izinlere sahip oluyor:
sudo find /dosya/dosya2/gizli -type d -exec chmod 2775 {} \;
sudo find /dosya/dosya2/gizli -type f -exec chmod ug+rw {} \;
Yaptığınız işlemler kendi kullanıcınız ile ilgiliyse, yapılan değişikliklerin işe yaraması için kullanıcı çıkışı yapıp, tekrar girmeniz gerekebilir. Yukarıda yaptığımız gibi bir dosyanın izinleri "g+w" şeklinde gruba yazma izni ver diye tanımlayabilirken, biraz daha bunlara alıştığınız zaman sayısal kodlar ile de bu izin işlemlerini yapabilirsiniz. Ama hepsini aynı anda belirlemeniz gerekiyor. 770 ve 775 gibi kodlar her zaman çok iyi olmayabilir zira fazla güçlü komutlar ama mesela; kullanıcı ve gruba her izni ver ama diğerleri bir şey yapamasın derseniz:
sudo chmod -R 770 /dosya/dosya2/gizli
Bu sayısal kodları biraz daha detaylandırmak istiyorum çünkü, terminalin ve linux un en basit işlemlerinin ne kadar pratik ama basit olduğuna bir örnek olduklarını düşünüyorum:
- 660: Kullanıcı ve grup okuyabilir, yazabilir, diğerleri hiç bir şey yapamaz.
- 666: Tüm kullanıcılar okuyabilir, yazabilir.
- 744: Kullanıcı her işlemi yapabilir, ama grup ve diğerleri sadece okuyabilir.
- 777: Tüm kullanıcılar okuyabilir, yazabilir, çalıştırabilir.
Eğer yapıyı biraz incelerseniz, gördüğünüz üzere, 8 ihtimalli 3 haneden oluşan bir sayı söz konusu. Her basamak 3 tane ikilinin sonucu olarak 0 ile 7 arasında bir değere denk geliyor. Bu basamakları altalta inceleyeceğim:
7: İlk basamak hedef dosyaya sahip olan kullanıcı için
7: İkinci basamak hedef dosyaya sahip olan grup için
7: Üçüncü basamak diğer tüm kullanıcılar için
Bu her basamağın 0 ile 7 arasında değişmesinin sebebi de 3 tane binary/ikiliden meydana geliyor olması. Yani 7 aslında 1/1/1, 6 aslında 1/1/0. Bu değerler de her işlem için okuma yazma ve çalıştırma yetisini tanımlıyor, 1 evet, 0 hayır anlamına geliyor. Mesela:
7: 1/1/1 >> okuma:evet / yazma:evet / çalıştırma:evet
6: 1/1/0 >> okuma:evet / yazma:evet / çalıştırma:hayır
0: 0/0/0 >> okuma:hayır / yazma:hayır / çalıştırma:hayır
Tabii ki aynı anda belirle işlemini mesela 660 için -rw-rw---- şeklinde de yazabilirsiniz ama farklı yolları öğrenmekte fayda var.