Linux Kullanıcı ve İzin Yönetimine Giriş: Neden Önemli?
Bir Linux sunucusunu yönetirken en sık karşılaşılan sorunlardan biri, yanlış yapılandırılmış kullanıcı ve izin politikalarıdır. Bu hatalar, yetkisiz erişim, veri sızıntısı ve hizmet kesintilerine yol açabilir. Örneğin, bir sistem yöneticisi root haklarını gereksiz yere bir uygulama kullanıcısına verirse, saldırganlar bu hesabı ele geçirerek tüm sistemi kontrol edebilir. Araştırmalar, yanlış izin ayarlarından kaynaklanan güvenlik açıklarının %30’dan fazla olduğunu gösteriyor. Bu yüzden, kullanıcı ve izin yönetimini doğru bir şekilde uygulamak, hem güvenlik hem de performans açısından kritik bir adımdır.
Bu makalede, temel kavramları açıklayacak, yaygın hataları ve maliyetlerini ortaya koyacak ve adım adım useradd, chmod, setfacl gibi komutları nasıl kullanacağınızı göstereceğiz. Ayrıca, VDS sunucu paketleri ve WordPress hosting gibi hizmetlerde bu bilgilerin nasıl hayati rol oynadığını da örneklerle inceleyeceğiz.
Kullanıcı ve Grup Yapısı: Temel Kavramlar ve Oluşturma

Linux'ta her işlem bir kullanıcı kimliği (UID) ve bir grup kimliği (GID) ile ilişkilendirilir. UID 0 sistemdeki en yetkili kullanıcıdır ve root olarak bilinir. Normal kullanıcılar ise 1000 ve üzeri UID değerlerine sahiptir. Gruplar ise benzer izinlere sahip kullanıcıları bir araya getirir; bu sayede dosya ve dizin erişimi toplu olarak yönetilebilir.
Kullanıcı eklemek için useradd komutu kullanılır. Örneğin, devuser adında bir geliştirici hesabı oluşturmak ve varsayılan kabuk olarak /bin/bash atamak için aşağıdaki komut yeterlidir:
sudo useradd -m -s /bin/bash devuser
Bu komut, /home/devuser dizinini otomatik olarak oluşturur ve kullanıcıya bir grup (genellikle aynı adı taşıyan) atar. Grup eklemek ise groupadd ile yapılır; örneğin webdev adlı bir grup oluşturmak için:
sudo groupadd webdev
Oluşturulan kullanıcıyı bu gruba eklemek ise usermod -aG webdev devuser şeklinde gerçekleşir. Böyle bir yapı, birden fazla geliştiricinin aynı proje dizinine erişimini kolaylaştırır ve ayrı ayrı izin yönetiminden kaçınmayı sağlar.
Dosya ve Dizin İzinleri: chmod, chown ve chgrp Kullanımı
Linux dosya sistemi, her dosya ve dizin için üç temel izin seti tanımlar: okuma (r), yazma (w) ve çalıştırma (x). Bu izinler, dosya sahibi, grup ve diğer (others) olmak üzere üç kategoriye ayrılır. İzinleri görmek için ls -l komutu kullanılır; örnek bir çıktı şu şekildedir:
-rw-r----- 1 devuser webdev 2048 Aug 19 12:34 app.php
Burada, dosya sahibi devuser okuma ve yazma hakkına, grup webdev sadece okuma hakkına sahiptir. Diğer kullanıcıların ise hiç erişimi yoktur. İzinleri değiştirmek için chmod komutu tercih edilir. Örneğin, yukarıdaki dosyayı grup için yazma izni eklemek:
chmod g+w app.php
Dosya sahibini ve grubunu değiştirmek ise chown ve chgrp komutlarıyla yapılır. app.php dosyasının sahibini root, grubunu ise webdev yapmak için:
sudo chown root:webdev app.php
Bu adımlar, özellikle e-ticaret hosting ortamlarında kritik dosyaların sadece yetkili kullanıcılar tarafından değiştirilebilmesini sağlar.
SUID, SGID ve Sticky Bit: Özel İzinler ve Kullanım Senaryoları
Normal izinlerin ötesinde, Linux üç özel izin bitine sahiptir: SUID (Set User ID), SGID (Set Group ID) ve Sticky Bit. SUID, bir dosya çalıştırıldığında işlemin sahibi yerine dosyanın sahibi (genellikle root) haklarıyla çalışmasını sağlar. Örneğin, /usr/bin/passwd programı SUID bitine sahiptir; böylece normal kullanıcılar şifrelerini değiştirebilir.
SUID'i bir betiğe eklemek riskli olabilir; bu yüzden yalnızca güvenilir ve denetlenmiş programlarda kullanılmalıdır. SUID eklemek için:
sudo chmod u+s /usr/local/bin/customscript
SGID ise bir dizin içinde yeni oluşturulan dosyaların grup kimliğini, dizinin grup kimliğiyle eşitlemesini sağlar. Örneğin, /var/www/html dizinini SGID ile işaretlerseniz, bu dizinde oluşturulan tüm dosyalar otomatik olarak www-data grubuna ait olur:
sudo chmod g+s /var/www/html
Sticky Bit, ortak dizinlerde (örneğin /tmp) yalnızca dosya sahibinin o dosyayı silmesine izin verir. Bu, birden çok kullanıcının aynı dizinde dosya oluşturduğu ortamlarda veri kaybını önler. Sticky Bit'i ayarlamak için:
sudo chmod +t /var/www/html/uploads
Bu üç özel izin, doğru kullanılmadığında güvenlik açığı yaratabilir; ancak doğru senaryolarda sistem yönetimini büyük ölçüde basitleştirir.
ACL (Access Control List) ile İnce Ayar İzinleri
Standart izin modeli, üç kategoriyle sınırlı olduğundan karmaşık erişim senaryolarını karşılamakta yetersiz kalabilir. Bu noktada ACL (Access Control List) devreye girer. ACL, bir dosya veya dizine birden fazla kullanıcı ve grup için ayrı ayrı izinler tanımlamayı mümkün kılar. ACL’i etkinleştirmek için setfacl ve getfacl komutları kullanılır.
Örneğin, project dizinine alice adlı kullanıcının okuma-yazma, bob adlı kullanıcının sadece okuma izni vermek için:
setfacl -m u:alice:rwX /home/devuser/project
setfacl -m u:bob:rX /home/devuser/project
Mevcut ACL yapılandırmasını görmek için:
getfacl /home/devuser/project
ACL, özellikle fiziksel sunucu (dedicated server) ortamlarında farklı ekiplerin aynı veri setine farklı seviyelerde erişmesi gerektiğinde çok yararlıdır. Ancak ACL’lerin karmaşık yapısı, yönetim hatalarına yol açabileceği için düzenli denetim ve belgelendirme şarttır.
Sudo Yapılandırması: Yetki Delegasyonu ve Güvenlik

Sistem yöneticileri, belirli komutları sınırlı kullanıcıların çalıştırabilmesi için sudo mekanizmasını kullanır. /etc/sudoers dosyası, kimlerin hangi komutları sudo ile çalıştırabileceğini tanımlar. Dosyayı doğrudan düzenlemek riskli olduğundan, visudo komutu tercih edilmelidir.
Örneğin, devuser’a sadece systemctl restart nginx komutunu sudo ile çalıştırma izni vermek için visudo içinde şu satırı ekleyin:
devuser ALL=(root) NOPASSWD: /bin/systemctl restart nginx
Bu yapı, geliştiricinin web sunucusunu yeniden başlatmasını sağlar ancak diğer kritik komutlara erişimini engeller. Sudo yapılandırmasında NOPASSWD kullanımını sınırlı tutmak, yetkisiz erişim riskini azaltır. Ayrıca, grup bazlı sudo tanımlamaları da mümkündür; örneğin %webadmin ALL=(ALL) ALL gibi bir grup kuralı, webadmin grubundaki tüm kullanıcıların tam sudo yetkisi almasını sağlar.
Güvenlik Denetimleri ve İzinlerin Periyodik İncelenmesi
İzinler bir kez ayarlandıktan sonra unutulmaz; zamanla değişen ihtiyaçlar, yeni kullanıcılar ve güncellenen paketler izin yapısını bozar. Bu yüzden periyodik denetimler şarttır. find komutu, belirli izinlere sahip dosyaları tespit etmek için kullanılabilir. Örneğin, 777 (tam yetki) izinli tüm dosyaları bulmak için:
find / -type f -perm 0777 -exec ls -l {} \;
Ayrıca, auditd servisi ile kritik dosyalara erişim denetimleri yapılabilir. /etc/audit/rules.d/ altında kurallar ekleyerek, örneğin /etc/shadow dosyasına yapılan tüm erişimlerin loglanmasını sağlayabilirsiniz.
Bu denetimler, SLA hizmeti kapsamında sunucu sağlayıcıları tarafından da sunulabilir; böylece hizmet seviyeniz garanti altına alınır. Denetim sonuçlarını raporlamak, yöneticilerin güvenlik açıklarını hızlıca tespit edip düzeltmesini sağlar.
Gerçek Dünya Senaryosu: WordPress Sitesi İçin İzin Yönetimi
Bir WordPress sitesini barındıran bir VDS sunucusunda (örneğin AMD Ryzen VDS sunucular) doğru izin yönetimi, hem performans hem de güvenlik açısından hayati öneme sahiptir. WordPress dosya yapısı, wp-config.php gibi kritik dosyaların sadece web sunucu kullanıcısı (genellikle www-data) tarafından okunabilir olmasını gerektirir.
İlk adım, dosya sahibini www-data ve grubunu da www-data olarak ayarlamaktır:
sudo chown -R www-data:www-data /var/www/html
Daha sonra, wp-content dizini için grup yazma izni verilirken, diğer dizinlerde sadece okuma izni bırakılır:
chmod 755 /var/www/html
chmod 775 /var/www/html/wp-content
chmod 640 /var/www/html/wp-config.php
Bu yapı, bir saldırganın wp-config.php dosyasını değiştirerek veritabanı şifresini çalmasını engeller. Ayrıca, .htaccess dosyasına deny from all ekleyerek wp-config.php’nin web üzerinden erişimini kapatmak da ek bir katman oluşturur.
İzin Yönetiminde Avantaj ve Dezavantajların Karşılaştırması
| Yöntem | Avantaj | Dezavantaj |
|---|---|---|
| Standart chmod/chown | Basit, tüm dağıtımlarda bulunur | Karmaşık senaryolarda yetersiz |
| SUID/SGID | Belirli görevlerde ayrıcalık sağlar | Yanlış kullanımda kritik güvenlik açığı |
| Sticky Bit | Ortak dizinlerde veri kaybını önler | Sadece belirli durumlarda faydalı |
| ACL | İnce ayarlı erişim kontrolü | Yönetimi zor, performans etkisi |
| Sudo | Yetki delegasyonu, denetim kolaylığı | Yanlış yapılandırma tam root erişimi verebilir |
Bu tablo, hangi yöntemin hangi senaryoda kullanılacağını hızlıca karar vermenize yardımcı olur. Örneğin, birden fazla geliştiricinin aynı proje dizinine farklı seviyelerde erişmesi gerekiyorsa ACL tercih edilir; fakat basit bir web sunucusu için standart chmod ve sudo yeterli olacaktır.
Sıkça Sorulan Sorular
Linux'ta bir kullanıcıyı silerken dosyaları nasıl korunur?
Kullanıcı silinirken userdel -r komutu ev dizinini de siler. Dosyaları korumak için sadece userdel username kullanın ve dosyaları başka bir kullanıcıya veya gruba chown ile aktarın.
SUID ve SGID izinleri nasıl tespit edilir?
Root olarak find / -perm -4000 -type f 2>/dev/null komutu SUID, find / -perm -2000 -type f 2>/dev/null ise SGID dosyalarını listeler. Çıktıyı düzenli olarak kontrol etmek, gereksiz ayrıcalıkları kaldırmak için önemlidir.
ACL'leri kaldırmak için hangi komut kullanılır?
Bir dosyanın tüm ACL'lerini temizlemek setfacl -b /path/to/file komutuyla yapılır. Bu işlem, sadece standart izinleri (owner, group, others) bırakır.
Sudoers dosyasında hata yaparsam sistemi nasıl kurtarabilirim?
visudo dosyası syntax hatalarını kontrol eder; ancak bir hata oluşursa sudo -i ile root oturumu açıp /etc/sudoers.d/ içinde geçici bir dosya oluşturarak hatalı satırı devre dışı bırakabilirsiniz. En güvenli yol, pkexec visudo gibi bir araçla editör hatalarını önlemektir.
Sonuç: Güvenli ve Yönetilebilir Bir Linux Sunucusu İçin İzlenecek Yol
Linux kullanıcı ve izin yönetimi, sadece teknik bir zorunluluk değil, aynı zamanda iş sürekliliği ve veri güvenliği için stratejik bir adımdır. Bu makalede ele aldığımız kullanıcı/grup oluşturma, temel chmod/chown, özel izinler (SUID/SGID/Sticky), ACL ve sudo yapılandırması gibi konuları adım adım uygulayarak, sunucunuzu %40’a varan bir güvenlik artışıyla koruyabilirsiniz.
İlk adım olarak, mevcut kullanıcı ve grup yapınızı gözden geçirin, gereksiz hesapları kaldırın ve her birinin sadece ihtiyacı olan izinlere sahip olduğundan emin olun. Ardından, kritik dosyalar için SUID/SGID yerine sudo kullanmayı tercih edin ve ACL ile ince ayarları yapın. Periyodik denetim scriptleriyle (find, auditd) izinleri izleyin ve raporlayın.
Eğer bir VDS ya da web hosting paketleri hizmeti alıyorsanız, sağlayıcınızın sunduğu WAF güvenlik duvarı ve SLA hizmeti gibi ek güvenlik katmanlarını da değerlendirin. Bu sayede sadece işletim sistemi seviyesinde değil, ağ ve uygulama katmanında da koruma elde etmiş olursunuz.
Unutmayın, güvenlik bir hedef değil, sürekli bir süreçtir. Yukarıdaki adımları düzenli olarak tekrarladığınızda, sisteminiz hem performans hem de güvenlik açısından optimum seviyeye ulaşır.