Bu sayımızda genel işletim sistemleri göz önünde bulundurularak özellikle Linux işletim sisteminde güvenliğin sağlanması konusunda neler yapılabileceği incelenecektir.
Bilgisayarı açarken: Bilgisayarın güvenliğine ilk olarak fiziksel güvenlikten başlamalıyız. Bilgisayarın bulunduğu yerin sıcaklığı, elektrik teçhizatının güvenliği, herhangi bir yangın riskine karşı koruma, bilgisayarı istenmeyen kişilerin kullanmasının önlenmesi gibi çevresel ve fiziksel şartların sağlanması atılması gereken ilk güvenlik adımıdır.
İşletim sistemi başlarken: Bilgisayar açılıp işletim sistemi devreye girmeden önce ilk olarak sisteme BIOS bilgileri yüklenir. BIOS bilgileri arasında sistem açılış sıralaması yer almaktadır. Bilinçsiz kullanıcıların ya da değiştirme hakkı olmayan kullanıcıların BIOS bilgilerinde değişiklik yapmaması için şifre atanmalıdır. Kullanılmadığı durumlarda disket sürücü ve CD sürücüden açılma seçenekleri devre dışı bırakılmalıdır. Çünkü bu seçeneklerden yararlanılarak mevcut işletim sisteminde ve depolama birimlerinde değişiklikler yapılarak sisteme zarar verilebilir.
Yükleyici ayarları: Bütün işletim sistemleri bir yükleyici yardımı ile başlatılır. Linux işletim sistemleri temel olarak LILO ya da GRUB yükleyicilerini kullanır. Yükleyiciler temelde işletim sisteminin bulunduğu disk bölümü ve işletim sistemi çekirdek konumunu parametre olarak alırlar. Bilindiği gibi Linux işletim sisteminin değişik modlarda açılabilme seçeneği vardır ve bu seçenek yükleyiciye parametre olarak verilebilir. Bunun için yükleyiciye herhangi bir parametre verilmesi şifreye bağlanmalıdır. Bunun için LILO yükleyicisinde yapılandırma dosyası /etc/lilo.conf içerisine;
password=lilo_sifrem
restricted
GRUB yükleyicisinde ise grub-md5-crypt programı yardımı ile /boot/grub/menu.lst yapılandırma dosyasına;
password-md5 $1$K1eze/$okT3wBO2ShAuUSdZlDa4s0
satırları yazılmalıdır.
Linux kurarken: Linux işletim sisteminin kurulum aşamasında güvenlik politikası olarak bazı noktalar göz önünde bulundurulmalıdır.
Bütün Linux işletim sistemleri tek bir disk bölümü üzerine kurulabilir. Fakat özellikle sunucu sistemlerde farklı amaçlar için farklı disk bölümleri kullanılması önerilir. Örnek olarak sistem kayıtlarının tutulduğu /var dizini, ortak çalışma alanı /tmp dizini, kullanıcı ev dizinlerinin bulunduğu /home dizini, programların yüklendiği /usr dizini farklı bölümlerde tutulabilir.
Kurulum aşamasında ya da kurulum sonrasında farklı disk bölümleri için bağlama (mount) seçenekleri (/etc/fstab) dosyasında belirlenebilir. Örneğin herhangi bir çalıştırılabilir dosyanın olmadığı disk bölümleri için noexec, sadece okunabilir disk bölümleri için ro, özel hakların kullanılmasını önlemek için nosuid, noguid gibi seçenekler belirtilebilir. NFS bağlama bölümleri için /etc/exports dosyasında da benzer şekilde ro, noexec, nodsuid, nodev parametreleri kullanılabilir.
Bazı Linux sürümlerinde kurulum aşamasında güvenlik seviyesi belirlenebilir. Fakat özellikle iş istasyonu olarak kullanılacak sistemlerde yüksek güvenlik seviyesi seçilmesi bazı programlarda kısıtlamalara neden olacağından ihtiyaç doğrultusunda güvenlik seviyesi belirlenmelidir.
Kullanıcı hesapları ve şifreler: Linux işletim sisteminde sistem kullanıcılarının yanında daha sonradan yaratılan normal kullanıcı hesapları bulunur. Kullanıcı hesapları konusunda dikkat edilmesi gereken güvenlik konuları şunlardır:
Kullanıcı hesaplarının saklanma yöntemi olarak yeni sürümlerin hepsinin desteklediği gölge şifre (shadowing), bunun yanında şifrelemede md5 şifreleme algoritmasının kullanılması.
Sistem üzerinde bütün yetkilere sahip root kullanıcı hesabının gerek duyulmadıkça kullanılmaması, gerek duyulduğunda normal kullanıcı ile sisteme giriş yapılıp su- komutu ile geçiş yapılması.
Kullanıcı şifrelerinin, kolayca tahmin edilemeyecek, kullanıcı kişisel bilgilerinden tamamen bağımsız, büyük-küçük harf, rakam ve özel karakterlerin karışımından oluşan, fakat unutulmayacak şekilde seçilmesi ve şifrelerin belirli aralıklarla değiştirilmesi, geriye dönük şifrelerin tekrarlanmaması.
su komutununun kullanım hakkının sadece belirli kullanıcı ya da kullanıcı gruplarına verilmesi.
root kullanıcısının bağlantı yapabileceği konsolların listelendiği /etc/securetty dosyasının en düşük düzeyde düzenlenmesi, mümkün olduğunca uzaktaki sistemlerden bağlanmaya izin verilmemesi.
Sistemle bağlantısı kalmamış kullanıcıların kullanıcı hesaplarının kapatılması.
Uzaktaki sistemlere bağlanırken: İnternet/intranet ortamındaki diğer Unix/Linux sistemlere bağlanırken ssh, stelnet gibi şifreli bağlantı sağlayan protokollerin kullanılması ve bağlantıların root kullanıcısı ile değil normal kullanıcı ile gerçekleştirilmesi gerekir. Uzak sistemler arasında rsh, rexec, .rhosts kullanımı yerine alternatif güvenli komutlar scp, sftp kullanılmalıdır.
Yedeklemeler: Bütün sistemler için en çok ihtiyaç duyulan çözümlerin başında sorun halinde geri yüklenebilecek yedeklerin var olması gelir. İşletim sisteminin ilk kurulumu tamamlandıktan sonra sistemin tamamı ve belli aralıklarla önemli bilgilerin yedeği düzenli olarak alınmalıdır.
Güncellemeler: Hemen hemen tüm yazılımların belli bir zaman zarfı içerisinde güvenlik açıkları ortaya çıkmakta ve bunların bazıları sistemlerde ciddi anlamda tehlikelere yol açabilmektedir. Bunun için sisteme yüklenmiş olan yazılımların güncel sürümleri takip edilmeli, güvenlik ve diğer sitelerden edinilebilecek bilgiler doğrultusunda güncelleştirmeler en kısa sürede gerçekleştirilmelidir.
Sistem kontrolleri: RedHat ve Debian tabanlı Linux sürümleri paket programlar kullandığından, rpm gibi yardımcı programlar kullanılarak belli aralıklarla paketlerin yer aldığı veri tabanı listesi, yüklü dosyalar ve güvenlik imzaları sistemin ilk hali ile karşılaştırılmalıdır. Ayrıca önemli sistem dosyaları başta olmak üzere, sistemde yer alan tüm dosya ve dizinlerin güvenlik hakları kontrol edilmelidir. Bu işlem için find komutunun parametreleri kullanılabilir.
Bazı önemli sistem dosyalarının güvenlik hakları ve açıklamaları şöyledir:
Dosya Adı | İzin | Açıklama |
/etc/passwd | 644 | Kullanıcı bilgileri veritabanı |
/etc/shadow | 600 | Kullanıcı şifre bilgileri |
/etc/hosts.allow (deny) | 600 | Servis izin dosyaları |
/etc/lilo.conf | 600 | LILO yükleyici yapılandırma dosyası |
/etc/securetty | 600 | root kullanıcısı güvenli TTY listesi |
/etc/rc.d/init.d | 750 | Sistem servis dosyaları |
/etc/init.d/* | 750 | Sistem servis dosyaları |
/etc/sysconfig/* | 751 | Sistem yapılandırma dosyaları |
/etc/syslog.conf | 640 | Sistem kayıt tutucu yapılandırma dosyası |
/var/log | 751 | Sistem kayıtları dizini |
/var/log/messages | 644 | Sistem mesajları |
/etc/ssh/ | 750 | SSH servis yapılandırma dosyaları |
Çekirdek güvenliği: Linux işletim sisteminde çekirdek düzeyinde alınması gereken bazı güvenlik tedbirleri bulunmaktadır. Çekirdek yapılandırma aşamasında, çekirdek düzeyinde güvenlik duvarı sağlamak için çekirdeğe CONFIG_FIREWALL, CONFIG_IP_FORWARD, CONFIG_SYN_COOKIES, CONFIG_IP_FIREWALL, CONFIG_FILTER, CONFIG_IP_MASQUERADING kullanımı eklenmelidir. Sistemin çalışması sırasında aktif olup olmayacağı /proc/sys/net/ipv4 dizini içerisindeki icmp_echo_ignore_all, icmp_echo_ignore_broadcasts, ip_forward, tcp_syncookies gibi dosyaların içeriğinin 1 ya da 0 olmasına bağlıdır. RedHat tabanlı yeni sistemlerde bu işlemler /etc/sysctl.conf yapılandırma dosyası içerisinden de gerçekleştirilebilir.
Yazımızın bu ilk bölümünü tamamlamadan önce bu makaleyi hazırlamada belgelerinden yararlandığım mesai arkadaşlarım Ahmet ÖZTÜRK ve Mustafa ATAKAN'a, http://www.LinuxSecurity.com ve http://scrye.com/~kevin/lsh sitelerinde yer alan belgeleri hazırlayan Linux dostlarına teşekkürü bir borç bilirim.
Yazımızın ikinci bölümünde görüşmek dileğiyle...
Selçuk Han AYDIN
|