Linux İzinleri Temelleri ve VPS Üzerinde Umask Kullanımı
Linux işletim sistemleri, güçlü güvenlik mekanizmalarıyla bilinir ve bu mekanizmaların temelinde dosya ve dizin izinleri yatar. Bir Sanal Özel Sunucu (VPS) üzerinde çalışırken, bu izinleri doğru bir şekilde anlamak ve yönetmek, sunucunuzun güvenliğini, kararlılığını ve veri bütünlüğünü sağlamak için hayati öneme sahiptir. Yanlış yapılandırılmış izinler, yetkisiz erişimlere, veri kaybına ve hatta sistemin tamamen ele geçirilmesine yol açabilir. Bu makalede, Linux izinlerinin temel prensiplerini, bunları nasıl yöneteceğinizi ve özellikle yeni dosya ve dizinlerin varsayılan izinlerini belirlemek için kullanılan umask komutunun derinlemesine bir analizini sunacağız. Amacımız, VPS kullanıcılarına ve sistem yöneticilerine, güvenli bir Linux ortamı oluşturmak ve sürdürmek için gerekli bilgi ve araçları sağlamaktır.
Linux İzinleri Neden Önemlidir?
Linux izinleri, bir sistemdeki kaynaklara (dosyalar, dizinler, aygıtlar) kimlerin erişebileceğini ve bu kaynaklar üzerinde hangi işlemleri yapabileceğini tanımlayan kurallar bütünüdür. Bu izinler, birden fazla kullanıcının aynı sunucuyu paylaştığı çok kullanıcılı ortamlarda özellikle kritik bir rol oynar. İzinlerin doğru yönetilmesi şu faydaları sağlar:
* Güvenlik: Yetkisiz kullanıcıların veya kötü niyetli aktörlerin hassas verilere erişmesini, sistem dosyalarını değiştirmesini veya zararlı kod çalıştırmasını engeller. Örneğin, bir web sunucusunun yapılandırma dosyaları sadece root kullanıcısı tarafından okunabilir ve yazılabilir olmalıdır.
* Veri Bütünlüğü: Dosyaların yanlışlıkla veya kasıtlı olarak değiştirilmesini veya silinmesini önler. Bu, özellikle veritabanı dosyaları, yedekler veya kritik uygulama verileri için önemlidir.
* Sistem Kararlılığı: Kritik sistem dosyalarının bozulmasını engelleyerek işletim sisteminin düzgün çalışmasını sağlar. Yanlış izinler, bir uygulamanın çökmesine veya sistemin başlamamasına neden olabilir.
* Çok Kullanıcılı Ortamlar: Her kullanıcının kendi dosyaları üzerinde tam kontrol sahibi olmasını sağlarken, diğer kullanıcıların dosyalarına izinsiz erişimini kısıtlar. Bu, paylaşımlı VPS veya hosting ortamlarında kullanıcı izolasyonu için temeldir.
Linux İzin Modelleri
Linux, geleneksel olarak Discretionary Access Control (DAC) modelini kullanır. Bu modelde, bir dosya veya dizinin sahibi, o kaynağa kimlerin ne tür erişimi olacağına karar verir. Linux’ta izinler üç ana kategoriye ayrılır:
* Kullanıcı (User): Dosyanın veya dizinin sahibi olan kullanıcı. Genellikle dosyayı oluşturan kişidir.
* Grup (Group): Dosyanın veya dizinin ait olduğu grup. Bir grup, birden fazla kullanıcı içerebilir ve bu kullanıcılar, grubun sahip olduğu dosyalara aynı izinlerle erişebilir.
* Diğerleri (Others): Sistemdeki diğer tüm kullanıcılar (dosyanın sahibi veya ait olduğu grubun üyesi olmayan herkes).
Bu üç kategori için üç farklı izin türü tanımlanmıştır:
İzin Türleri ve Anlamları
* Okuma (Read – r):
* Dosya için: Dosyanın içeriğini okuma yetkisi verir.
* Dizin için: Dizin içindeki dosyaların ve alt dizinlerin listesini görüntüleme yetkisi verir (ancak içeriklerine erişim için x izni de gerekebilir).
* Yazma (Write – w):
* Dosya için: Dosyanın içeriğini değiştirme, üzerine yazma veya silme yetkisi verir.
* Dizin için: Dizin içinde yeni dosyalar ve alt dizinler oluşturma, mevcut dosyaları silme veya yeniden adlandırma yetkisi verir.
* Çalıştırma (Execute – x):
* Dosya için: Dosyayı bir program veya betik olarak çalıştırma yetkisi verir.
* Dizin için: Dizin içine girme (cd) ve dizin yapısında gezinme yetkisi verir. Bir dizinde x izni olmadan, ls komutu bile çalışsa içeriği göremezsiniz, çünkü dizine “erişemezsiniz”.
İzinlerin Sembolik ve Sayısal Gösterimi
Linux izinleri iki ana formatta gösterilebilir:
* Sembolik Gösterim: Bu format, izinleri r, w, x harfleriyle ve u, g, o (user, group, others) harfleriyle gösterir. Örneğin: rwxr-xr--
* Bu stringin ilk karakteri dosya tipini belirtir (- dosya, d dizin, l sembolik bağlantı vb.).
* Sonraki üç karakter (1-3): Dosya sahibinin izinleri (rwx).
* Sonraki üç karakter (4-6): Dosyanın ait olduğu grubun izinleri (r-x).
* Sonraki üç karakter (7-9): Diğer kullanıcıların izinleri (r--).
* Örnek rwxr-xr-- yorumu: Dosya sahibi okuma, yazma ve çalıştırma yetkisine sahip. Grup üyeleri okuma ve çalıştırma yetkisine sahip. Diğerleri sadece okuma yetkisine sahip.
* Sayısal (Oktal) Gösterim: Bu format, her izin türüne bir sayısal değer atayarak izinleri üç basamaklı bir oktal sayı olarak ifade eder:
* r (read) = 4
* w (write) = 2
* x (execute) = 1
* _ (no permission) = 0
Bu değerler toplanarak her kategori (kullanıcı, grup, diğerleri) için tek bir sayı elde edilir.
* rwx = 4 + 2 + 1 = 7 (Tam yetki)
* rw- = 4 + 2 + 0 = 6 (Okuma ve yazma)
* r-x = 4 + 0 + 1 = 5 (Okuma ve çalıştırma)
* r-- = 4 + 0 + 0 = 4 (Sadece okuma)
* Örnek 754 yorumu:
* Kullanıcı: 7 (rwx)
* Grup: 5 (r-x)
* Diğerleri: 4 (r--)
Bu, sembolik gösterimdeki rwxr-xr-- ile aynıdır.
İzinleri Yönetme Komutları
Linux’ta dosya ve dizin izinlerini yönetmek için çeşitli komutlar kullanılır.
ls -l
Bu komut, bir dizindeki dosya ve dizinlerin detaylı listesini, sahiplik ve izin bilgileriyle birlikte görüntüler.
ls -l
Çıktı örneği:
-rw-r--r-- 1 user group 1024 Jan 1 10:00 myfile.txt
drwxr-xr-x 2 user group 4096 Jan 1 10:05 mydirectory/
* İlk karakter (- veya d): Dosya tipi (dosya veya dizin).
* Sonraki 9 karakter: İzinler (rw-r--r-- veya rwxr-xr-x).
* 1 veya 2: Bağlantı sayısı (hard link).
* user: Dosyanın sahibi.
* group: Dosyanın ait olduğu grup.
* 1024 veya 4096: Dosya boyutu veya dizin boyutu (bayt cinsinden).
* Jan 1 10:00: Son değiştirilme tarihi ve saati.
* myfile.txt veya mydirectory/: Dosya veya dizin adı.
chmod
chmod (change mode) komutu, dosya ve dizinlerin izinlerini değiştirmek için kullanılır. Hem sayısal (oktal) hem de sembolik gösterimi destekler.
Sayısal (Oktal) Kullanım:
chmod 755 script.sh # script.sh dosyasına rwxr-xr-x izinlerini verir
chmod 644 index.html # index.html dosyasına rw-r--r-- izinlerini verir
chmod 700 ~/.ssh # SSH dizinine sadece sahibinin erişimini verir
chmod -R 755 public_html/ # public_html dizini ve içindeki her şeye rwxr-xr-x izinlerini rekürsif olarak verir
Sembolik Kullanım:
* u, g, o, a: Kullanıcı (user), Grup (group), Diğerleri (others), Hepsi (all).
* +, -, =: İzin ekle, İzin çıkar, İzin ata.
* r, w, x: Okuma, Yazma, Çalıştırma izinleri.
chmod u+x script.sh # Dosya sahibine çalıştırma izni ekler
chmod o-w index.html # Diğerlerinden yazma iznini kaldırır
chmod go=rw,o-x file.txt # Grup ve diğerlerine rw izinlerini atar, diğerlerinden x'i kaldırır
chmod a+rwx mydir/ # Herkese rwx izinleri verir (genellikle tavsiye edilmez!)
chown
chown (change owner) komutu, dosya ve dizinlerin sahibini (kullanıcı ve/veya grup) değiştirmek için kullanılır. Bu komutu genellikle sadece root kullanıcısı çalıştırabilir.
chown newuser file.txt # file.txt dosyasının sahibini newuser yapar
chown newuser:newgroup file.txt # file.txt dosyasının sahibini newuser, grubunu newgroup yapar
chown :newgroup file.txt # file.txt dosyasının sadece grubunu newgroup yapar (sahibi değişmez)
chown -R www-data:www-data /var/www/html/ # /var/www/html dizini ve içindeki her şeyin sahibini ve grubunu www-data yapar
chgrp
chgrp (change group) komutu, dosya ve dizinlerin grubunu değiştirmek için kullanılır. chown komutunun sadece grup değiştirme işlevini yerine getirir.
chgrp newgroup file.txt # file.txt dosyasının grubunu newgroup yapar
chgrp -R newgroup mydirectory/ # mydirectory dizini ve içindeki her şeyin grubunu rekürsif olarak newgroup yapar
Özel İzinler
Linux’ta geleneksel izinlerin ötesinde, belirli senaryolarda kullanılan üç özel izin bit’i bulunur: SetUID (SUID), SetGID (SGID) ve Sticky Bit.
SetUID (SUID)
* Oktal Değeri: 4000
* Bir çalıştırılabilir dosyaya SUID biti uygulandığında, o dosya herhangi bir kullanıcı tarafından çalıştırıldığında, dosya sahibinin yetkileriyle çalışır. Örneğin, passwd komutu SUID bitine sahiptir ve bu sayede standart bir kullanıcı, kendi şifresini değiştirmek için root yetkilerine sahipmiş gibi çalışabilir.
* ls -l çıktısında, dosya sahibinin çalıştırma izni (x) yerine s harfi görünür (rws). Eğer dosya sahibinin çalıştırma izni yoksa, S harfi görünür (rwS).
* Güvenlik Riski: Yanlış kullanıldığında ciddi güvenlik açıkları yaratabilir. Güvenilir olmayan betiklere veya programlara SUID biti verilmemelidir.
chmod 4755 myprogram # myprogram'a SUID biti ve rwxr-xr-x izinleri verir
SetGID (SGID)
* Oktal Değeri: 2000
* Dosyalar için: Bir çalıştırılabilir dosyaya SGID biti uygulandığında, o dosya çalıştırıldığında, dosyanın ait olduğu grubun yetkileriyle çalışır.
* Dizinler için: Bir dizine SGID biti uygulandığında, o dizin içinde oluşturulan tüm yeni dosyalar ve alt dizinler, varsayılan olarak üst dizinin grubunu devralır (oluşturan kullanıcının birincil grubu yerine). Bu, paylaşımlı çalışma alanlarında grup üyelerinin dosyalar üzerinde kolayca işbirliği yapmasını sağlar.
* ls -l çıktısında, grubun çalıştırma izni (x) yerine s harfi görünür (rwxrwsr-x). Eğer grubun çalıştırma izni yoksa, S harfi görünür (rwxrwSr-x).
chmod 2775 shared_dir # shared_dir dizinine SGID biti ve rwxrwxr-x izinleri verir
Sticky Bit
* Oktal Değeri: 1000
* Sadece dizinlere uygulanır. Sticky bit’e sahip bir dizinde, kullanıcılar sadece kendi oluşturdukları dosyaları silebilir veya yeniden adlandırabilirler, diğer kullanıcıların dosyalarını silemezler, hatta dizin üzerinde yazma iznine sahip olsalar bile.
* Bu, /tmp gibi herkesin yazma iznine sahip olduğu dizinlerde çok kullanışlıdır, çünkü kullanıcıların birbirlerinin geçici dosyalarını silmesini engeller.
* ls -l çıktısında, diğerlerinin çalıştırma izni (x) yerine t harfi görünür (rwxrwxrwt). Eğer diğerlerinin çalıştırma izni yoksa, T harfi görünür (rwxrwxrwT).
chmod 1777 /tmp # /tmp dizinine Sticky bit ve rwxrwxrwx izinleri verir
Umask Nedir ve Neden Kullanılır?
umask (user file-creation mode mask), yeni oluşturulan dosya ve dizinlerin varsayılan izinlerini belirleyen bir maske değeridir. umask, bir izin çıkarma maskesidir; yani, sistemin varsayılan olarak atayacağı maksimum izinlerden hangi bitlerin çıkarılacağını belirtir. Bu, güvenlik açısından önemlidir, çünkü umask sayesinde yeni oluşturulan dosyaların varsayılan olarak çok açık izinlere sahip olması engellenir.
Linux’ta yeni oluşturulan dosyalar için maksimum varsayılan izin 666 (rw-rw-rw-) ve dizinler için maksimum varsayılan izin 777 (rwxrwxrwx) olarak kabul edilir. Dosyalar için varsayılan olarak çalıştırma izni verilmez, çünkü çoğu dosya çalıştırılabilir değildir. umask değeri, bu maksimum izinlerden çıkarılarak nihai varsayılan izinleri belirler.
Umask Değerini Anlama ve Hesaplama
umask değeri genellikle üç veya dört basamaklı bir oktal sayıdır (örneğin, 022 veya 002). İlk basamak özel izin bitleri (SUID, SGID, Sticky Bit) için ayrılmıştır, ancak çoğu zaman 0 olarak kalır ve sadece geleneksel izinleri etkileyen son üç basamak kullanılır.
Umask Değerini Görüntüleme
Mevcut umask değerinizi görmek için basitçe umask komutunu çalıştırın:
umask
Çıktı genellikle 0022 veya 0002 gibi bir değer olacaktır.
* 0022 (yaygın) -> Varsayılan dosya izni 644, dizin izni 755.
* 0002 (daha açık) -> Varsayılan dosya izni 664, dizin izni 775.
umask -S komutu ise umask değerini sembolik olarak gösterir, bu da anlaşılmasını kolaylaştırabilir:
umask -S
Çıktı örneği: u=rwx,g=rx,o=rx (bu, umask 022 için geçerli değildir, bu umask 022‘nin sonuç izinlerini gösterir. umask -S aslında maskelenen izinleri gösterir, yani u=,g=w,o=w gibi bir şey. Ancak çoğu sistemde bu çıktı, varsayılan izinleri gösterir. Daha doğru bir sembolik gösterim için, umask‘ın kendisini sembolik olarak düşünmek yerine, hesaplanan izinleri sembolik olarak düşünmek daha iyi olabilir.)
Gerçek umask -S çıktısı genellikle u=rwx,g=rwx,o=rwx gibi bir şey olur ve bu, kullanıcının, grubun ve diğerlerinin varsayılan olarak hangi izinlere sahip olduğunu gösterir, yani umask‘ın kaldırmadığı izinlerdir. Örneğin, umask 022 için umask -S çıktısı u=rwx,g=rx,o=rx olacaktır.
Varsayılan İzinleri Hesaplama
Yeni dosya ve dizinlerin nihai izinleri, maksimum izinlerden umask değerini çıkararak hesaplanır.
Dosyalar için: Maksimum izin 666 (rw-rw-rw-).
* Örnek 1: umask 022
* Maksimum Dosya İzni: 666
* Umask: 022
* Hesaplama:
* Kullanıcı: 6 – 0 = 6 (rw-)
* Grup: 6 – 2 = 4 (r--)
* Diğerleri: 6 – 2 = 4 (r--)
* Sonuç: 644 (rw-r--r--)
Bu, dosya sahibinin okuma/yazma, grubun sadece okuma ve diğerlerinin sadece okuma yetkisine sahip olacağı anlamına gelir.
* Örnek 2: umask 002
* Maksimum Dosya İzni: 666
* Umask: 002
* Hesaplama:
* Kullanıcı: 6 – 0 = 6 (rw-)
* Grup: 6 – 0 = 6 (rw-)
* Diğerleri: 6 – 2 = 4 (r--)
* Sonuç: 664 (rw-rw-r--)
Bu, dosya sahibinin ve grubun okuma/yazma, diğerlerinin sadece okuma yetkisine sahip olacağı anlamına gelir.
Dizinler için: Maksimum izin 777 (rwxrwxrwx).
* Örnek 1: umask 022
* Maksimum Dizin İzni: 777
* Umask: 022
* Hesaplama:
* Kullanıcı: 7 – 0 = 7 (rwx)
* Grup: 7 – 2 = 5 (r-x)
* Diğerleri: 7 – 2 = 5 (r-x)
* Sonuç: 755 (rwxr-xr-x)
Bu, dizin sahibinin tam yetkiye, grubun ve diğerlerinin okuma/çalıştırma yetkisine sahip olacağı anlamına gelir.
* Örnek 2: umask 002
* Maksimum Dizin İzni: 777
* Umask: 002
* Hesaplama:
* Kullanıcı: 7 – 0 = 7 (rwx)
* Grup: 7 – 0 = 7 (rwx)
* Diğerleri: 7 – 2 = 5 (r-x)
* Sonuç: 775 (rwxrwxr-x)
Bu, dizin sahibinin ve grubun tam yetkiye, diğerlerinin okuma/çalıştırma yetkisine sahip olacağı anlamına gelir.
Umask Değerini Ayarlama
umask değerini ayarlamak, yeni oluşturulan dosya ve dizinlerin varsayılan güvenlik seviyesini kontrol etmenizi sağlar.
Geçici Ayarlama
umask komutunu bir argümanla birlikte kullanarak mevcut oturum için geçici olarak ayarlayabilirsiniz:
umask 027
Bu komut, mevcut kabuk oturumu için umask değerini 027 olarak ayarlar. Oturum kapatıldığında veya yeni bir oturum açıldığında bu ayar kaybolur.
Kalıcı Ayarlama
umask değerini kalıcı olarak ayarlamak için, ilgili yapılandırma dosyalarına eklemeniz gerekir.
* Sistem Geneli Ayarlama:
* /etc/profile: Sisteme giriş yapan (login) tüm kullanıcılar için geçerlidir.
* /etc/bash.bashrc veya /etc/bashrc: Bash kullanan tüm kullanıcılar için geçerlidir (login olmayan kabuklar dahil).
* /etc/login.defs: Bu dosya, USERGROUPS_ENAB değişkeni ile kullanıcıların varsayılan umask değerini etkileyebilir. Eğer USERGROUPS_ENAB “yes” ise, kullanıcılar kendi özel gruplarıyla oluşturulur ve umask genellikle 002 olur. “no” ise, umask genellikle 022 olur.
* Genellikle, bu dosyalardan birine umask 022 veya umask 002 gibi bir satır eklenir.
* Kullanıcı Bazında Ayarlama:
* ~/.bashrc: Kullanıcının login olmayan (non-login) interaktif Bash kabukları için.
* ~/.profile: Kullanıcının login kabukları için (Bash, Zsh vb.). Eğer ~/.bash_profile yoksa, Bash bu dosyayı okur.
* ~/.bash_profile: Kullanıcının login Bash kabukları için. Eğer bu dosya varsa, Bash ~/.profile yerine bunu okur.
* Bir kullanıcı, kendi ev dizinindeki bu dosyalardan birine umask 027 gibi bir satır ekleyerek kendi varsayılan umask değerini değiştirebilir.
Örnek: Bir kullanıcı için umask değerini 007 olarak ayarlamak için:
echo "umask 007" >> ~/.bashrc
Bu değişikliklerin etkili olması için genellikle oturumun kapatılıp yeniden açılması veya source ~/.bashrc gibi bir komutla dosyanın yeniden yüklenmesi gerekir.
Önerilen Umask Değerleri:
* 022: Çoğu sunucu ortamı için güvenli ve yaygın bir varsayılan. Dosyalar için 644, dizinler için 755 izinleri verir. Bu, sahibine okuma/yazma, gruba ve diğerlerine sadece okuma (dizinler için çalıştırma) izni verir.
* 002: Paylaşımlı bir sunucuda, aynı gruptaki kullanıcıların birbirlerinin dosyaları üzerinde yazma yetkisine sahip olması istendiğinde kullanılır. Dosyalar için 664, dizinler için 775 izinleri verir. Grup üyeleri birbirlerinin dosyalarını değiştirebilir.
* 027: Maksimum güvenlik isteyen ortamlar için. Dosyalar için 640, dizinler için 750 izinleri verir. Diğer kullanıcıların hiçbir erişimi yoktur. Bu, hassas verilerle uğraşırken veya çok sıkı bir erişim kontrolü gerektiğinde idealdir.
VPS Ortamında Umask ve İzin Yönetimi İpuçları
Bir VPS üzerinde çalışırken, doğru izin yönetimi ve umask kullanımı, sunucunuzun güvenliğini ve işlevselliğini doğrudan etkiler.
* Minimum Yetki Prensibi: Her zaman en az yetkiyi verin. Bir dosya veya dizinin çalışması için sadece gerekli olan izinleri atayın. Örneğin, bir web sunucusu kullanıcısının (örn. www-data) tüm web kök dizini üzerinde yazma iznine sahip olması genellikle gereksizdir ve güvenlik riski oluşturur. Sadece cache, uploads gibi belirli dizinlere yazma izni verilmelidir.
* Web Sunucusu Kullanıcıları (Apache, Nginx):
* Web kök dizini (/var/www/html gibi) ve içindeki tüm dosya ve dizinlerin sahibi, genellikle root veya özel bir dağıtım kullanıcısı (örneğin, Debian/Ubuntu’da www-data, CentOS’ta apache veya nginx) olmalıdır.
* Dizinler için 755 (rwxr-xr-x) ve dosyalar için 644 (rw-r–r–) izinleri genellikle güvenli ve işlevsel bir varsayılandır. Bu izinler, web sunucusunun dosyaları okumasına ve dizinlerde gezinmesine izin verirken, diğerlerinin yazmasını engeller.
* Yazılabilir olması gereken dizinler (örn. cache, uploads, logs), web sunucusu kullanıcısına yazma izni (veya grubu aracılığıyla) verilmelidir. Örneğin, chmod 775 cache_dir ve chown root:www-data cache_dir.
* SSH Anahtarları: SSH anahtarlarınızın ve ~/.ssh dizininin izinleri çok önemlidir.
* ~/.ssh dizini: 700 (sadece sahibine tam yetki).
* ~/.ssh/authorized_keys: 600 (sadece sahibine okuma/yazma).
* Özel anahtarlar (id_rsa): 600 (sadece sahibine okuma/yazma).
Yanlış izinler SSH bağlantılarını engelleyebilir veya güvenlik açıkları yaratabilir.
* Veritabanı Dosyaları: MySQL, PostgreSQL gibi veritabanı sunucularının veri dizinleri ve dosyaları, sadece ilgili veritabanı kullanıcısı (örn. mysql) tarafından erişilebilir olmalıdır. Genellikle 600 veya 660 izinleri ve ilgili veritabanı kullanıcısına sahiplik atanır.
* Yedekleme Dizini: Yedekleme dosyalarının saklandığı dizinler, sadece yedekleme işlemini yapan kullanıcı veya grup tarafından yazılabilir olmalı, diğerleri tarafından okunamaz olmalıdır. Örneğin, umask 027 ile oluşturulan bir dizin (750) bu amaca hizmet edebilir.
* Grup İzinlerinin Kullanımı: Birden fazla geliştiricinin aynı projede çalıştığı durumlarda, tüm proje dosyalarını ortak bir gruba atamak ve umask 002 gibi bir değerle 775 (dizin) ve 664 (dosya) izinleri vermek, işbirliğini kolaylaştırır. Böylece gruptaki herkes dosyaları okuyabilir, yazabilir ve değiştirebilirken, diğerleri sadece okuyabilir.
* Otomatik İzin Ayarlama: Dağıtım (deployment) araçları (Capistrano, Ansible, Deployer vb.) kullanıyorsanız, bu araçların dosya ve dizinleri oluştururken veya güncellerken doğru izinleri ve sahiplikleri ayarladığından emin olun. Genellikle bu araçlar, yapılandırma dosyalarında izin ayarlama seçenekleri sunar.
* Güvenlik Denetimi: Düzenli olarak sunucunuzdaki izinleri kontrol edin.
* Herkese yazma izni olan dosyaları bulmak: find /path/to/check -type f -perm -o+w
* Herkese yazma izni olan dizinleri bulmak: find /path/to/check -type d -perm -o+w
* SUID bitine sahip dosyaları bulmak: find / -perm -4000
* SGID bitine sahip dosyaları bulmak: find / -perm -2000
Sıkça Yapılan Hatalar ve Kaçınılması Gereken Durumlar
Linux izinleri konusunda yapılan bazı yaygın hatalar ciddi güvenlik riskleri oluşturabilir:
* Her şeye 777 veya 666 vermek: En tehlikeli hatalardan biridir. Bir uygulamanın çalışmadığını görünce “çözüm” olarak tüm dosya ve dizinlere chmod 777 uygulamak, sunucunuzu tamamen savunmasız bırakır. Bu, herhangi bir kullanıcının (veya bir web sitesi saldırısı durumunda kötü niyetli bir betiğin) tüm dosyaları okumasına, yazmasına ve silmesine olanak tanır.
* Hassas dosyalara açık izinler vermek: Yapılandırma dosyaları, veritabanı kimlik bilgileri içeren dosyalar, özel anahtarlar gibi hassas verilere sahip dosyaların sadece ilgili kullanıcı tarafından okunabilir olması gerekir. Asla 644 veya daha açık izinler verilmemelidir; 600 veya 400 tercih edilmelidir.
* SUID/SGID bitlerini gereksiz yere kullanmak: Bu özel izinler, yalnızca kesinlikle gerekli olduğunda ve güvenlik etkileri tam olarak anlaşıldığında kullanılmalıdır. Yanlış kullanımı, sistemin kolayca ele geçirilmesine yol açabilir.
* Varsayılan umask değerini değiştirmeden bırakmak ve güvenlik açıklarına yol açmak: Özellikle paylaşımlı veya halka açık sunucularda, umask değerini güvenlik gereksinimlerinize göre ayarlamak önemlidir. Varsayılan 022 çoğu zaman yeterli olsa da, daha kısıtlayıcı bir ortam gerekiyorsa 027 gibi bir değer düşünülmelidir.
* İzinleri değiştirdikten sonra test etmeyi unutmak: İzinleri değiştirdikten sonra uygulamanızın veya servisinizin hala düzgün çalışıp çalışmadığını test etmek çok önemlidir. Bazen çok kısıtlayıcı izinler de uygulamanın çalışmamasına neden olabilir.
Sonuç
Linux dosya ve dizin izinleri ile umask mekanizması, bir VPS’in güvenliğinin ve kararlılığının temel taşlarıdır. Bu makalede ele aldığımız gibi, izinlerin sembolik ve sayısal gösterimlerini anlamak, chmod, chown, chgrp gibi komutları etkili bir şekilde kullanmak ve umask‘ın yeni dosyaların varsayılan izinlerini nasıl etkilediğini kavramak, her sistem yöneticisi ve VPS kullanıcısı için vazgeçilmez becerilerdir.
Doğru izin yönetimi, yetkisiz erişimi önler, veri bütünlüğünü korur ve sistemin genel sağlığını sürdürür. Özellikle VPS gibi çok kullanıcılı ve internete açık ortamlarda, en az yetki prensibini benimsemek ve hassas kaynakları titizlikle korumak hayati öneme sahiptir. umask değerini güvenlik gereksinimlerinize göre ayarlayarak, yeni oluşturulan dosyaların varsayılan olarak güvenli izinlere sahip olmasını sağlayabilirsiniz.
Unutmayın ki güvenlik sürekli bir süreçtir. Düzenli olarak izinleri denetlemek, sistemdeki anormallikleri izlemek ve güvenlik en iyi uygulamalarını takip etmek, VPS’inizi tehditlere karşı korumanın anahtarıdır. Bu makalede sunulan bilgiler, güvenli ve sağlam bir Linux ortamı oluşturma yolculuğunuzda size rehberlik edecektir.