Linux Sistemlerde Gereksiz Servislerin Tespiti ve Kapatılması
Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYS0qmrm' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
Sistemde aslında kullanımda olmayan servisleri kapatmak, basit ama unutulmaması gereken bir güvenlik önlemidir. Zira kullanılmadığından dolayı çalışmasına gerek olmayan servislerde çıkabilecek herhangi bir güvenlik zafiyeti sistem bütünlüğünü tehlikeye atacağı gibi ayrı olarak sistem kaynaklarının boş yere tüketiliyor olması anlamına da gelmektedir. Dolayısı ile bu tip servislerin saptanması ve devre dışı bırakılması rutin olması gereken bir işlemdir.
Yazının devamında, sunucu olarak kullanılan sistemler için çalışan servislerin listelenmesi, gereksiz olanların hangilerinin olabileceği ve bunların devre dışı bırakılması ile ilgili detaylar bulabilirsiniz.
İlk olarak kullanımda olmayan servislerin neler olabileceğinden ve nasıl tespit edilebileceklerinden bahsedeceğim. Sonrasında da bu gibi servislerin devre dışı bırakılması için yapılması gereken işlemlere değineceğim.
İçerik İndexi
Kullanılmayan Servislerin Tespiti
Sisteminizde daha önceden yüklenmiş ancak artık kullanılmayan servisler olabileceği gibi sistem kurulumu sırasında öntanımlı olarak yüklenen fakat server görevi yapan sistemler için gereksiz olabilecek bazı servisler de olabilir. Dolayısı ile öncelikli olarak öntanımlı gelen ve genel olarak kullanılmayan servisleri belirlemek yerinde olacaktır.
Genelde Kullanımda Olmayan Servisler
Bahsi geçen bu servisler duruma göre farklılık gösterebilir. Örnek olarak cups servisi printing ile alakalıdır ve sunucunuz bir print server değilse kullanılmamaktadır. Dolayısı ile kapatmanız yerinde olacaktır. Bu tip servislere örnek olarak şunlar gösterilebilir:
Sistem üzerindeki bu gereksiz servisleri tespit etmek için netstat ve lsof gibi araçlardan yararlanılabilir. Örnek olarak netstat kullanarak herhangi bir udp ya da tcp port üzerinde çalışan servislerinin listesini almak için aşağıdaki komut kullanılabilir.
bluetooth:
Sunucunuzda herhangi bir bluetooth adaptör yoksa (ya da bluetooth üzerinden erişim sağlamıyorsanız Bluetooth ile ilgili hcid, hidd gibi servisleri kapatabilirsiniz. Bu servisler örnek olarak CentOS tabanlı sistemlerde öntanımlı olarak kurulmaktadır.
avahi-daemon:
Aynı şekilde RHEL tabanlı sistemlerde öntanımlı olarak gelen avahi-daemon, local networkte bulunan kaynakları ya da servisleri (shared files, printer vs) discover etmek üzere kullanılan bir servis olduğundan ve sunucu sistemlerde bu tip bir ihtiyaç bulunmadığından rahatça kapatılabilir.
cups:
Cups da printing ile alakalı bir servis olduğundan ve sunucu sistemlerde (print server olmadığı sürece) priting ile ilgili işlemlere gerek olmadığından cups servisi de kapatılabilecek servislerin arasındadır.
Network Servisleri
Yukarıda sayılanlardan hariç olarak sistemdeki gereksiz diğer servisleri tespit etmek için netstat, lsof ya da (FreeBSD sistemler için) sockstat araçlarından yararlanılabilir.
netstat:
Netstat kullanarak herhangi bir udp ya da tcp port üzerinde çalışan servislerinin listesini almak için aşağıdaki komut kullanılabilir.
# netstat -luntp
Komutun çıktısı şuna benzer olacaktır:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 30120/mysqld tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2070/portmap tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 30949/cupsd tcp 0 0 0.0.0.0:1016 0.0.0.0:* LISTEN 2106/rpc.statd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2382/sendmail: tcp 0 0 :::80 :::* LISTEN 29348/httpd tcp 0 0 :::22 :::* LISTEN 2338/sshd udp 0 0 0.0.0.0:33085 0.0.0.0:* 2490/avahi-daemon: udp 0 0 0.0.0.0:111 0.0.0.0:* 2070/portmap udp 0 0 0.0.0.0:1010 0.0.0.0:* 2106/rpc.statd udp 0 0 0.0.0.0:631 0.0.0.0:* 30949/cupsd udp 0 0 :::56773 :::* 2490/avahi-daemon:
Listede görüldüğü üzere yukarıda da adlarını saydığımız cups, avahi gibi servislerin yanı sırda, mysql, httpd gibi servisler de bir listesi verilmekte. Dolayısı ile kendi sisteminizdeki çıktıya göre kapatılması gereken servisleri bu şekilde tespit edebilmek mümkündür.
lsof:
netstat'a benzer olarak aynı işlemi lsof kullanarak da yapabilirsiniz. Ancak lsof sisteminizde öntanımlı olarak bulunmuyor olabilir. Bu durumda netstat kullanabilir ya da “lsof (LiSt Open Files) Kullanımı ve Örnek Komutlar” başlıklı yazıda anlatıldığı şekilde kurabilirsiniz.
lsof ile herhangi bir portu dinleyen servisleri listelemek için aşağıdaki komutu vermeniz yeterlidir:
# lsof -i -n |egrep 'command|LISTEN'
Komutun çıktısı aşağıdakine benzer olacaktır:
command PID USER FD TYPE DEVICE SIZE NODE NAME portmap 2070 rpc 4u IPv4 6191 TCP *:sunrpc (LISTEN) rpc.statd 2106 rpcuser 7u IPv4 6339 TCP *:1016 (LISTEN) sshd 2338 root 3u IPv6 6867 TCP *:ssh (LISTEN) sendmail 2382 root 4u IPv4 7000 TCP 127.0.0.1:smtp (LISTEN) httpd 29348 root 3u IPv6 91623 TCP *:http (LISTEN) httpd 29349 apache 3u IPv6 91623 TCP *:http (LISTEN) httpd 29350 apache 3u IPv6 91623 TCP *:http (LISTEN) httpd 29351 apache 3u IPv6 91623 TCP *:http (LISTEN) httpd 29352 apache 3u IPv6 91623 TCP *:http (LISTEN) httpd 29353 apache 3u IPv6 91623 TCP *:http (LISTEN) httpd 29354 apache 3u IPv6 91623 TCP *:http (LISTEN) httpd 29355 apache 3u IPv6 91623 TCP *:http (LISTEN) httpd 29356 apache 3u IPv6 91623 TCP *:http (LISTEN) mysqld 30120 mysql 10u IPv4 226330 TCP *:mysql (LISTEN) cupsd 30949 root 4u IPv4 228068 TCP 127.0.0.1:ipp (LISTEN)
Böylece, ilgili listeden aslında işlevi olmayan servisleri saptayarak bir sonraki ana başlıkta değinileceği gibi devre dışı bırakabilirsiniz.
Servislerin Devre Dışı Bırakılması
linux sistemlerde servisleri yönetmek için kullanılabilecek araçlar dağıtıma göre değişiklik gösterebilir. Mesela, RHEL, CentOS ve Fedora gibi Red Hat tabanlı sistemlerde chkconfig ya da grafik arayüz sunan ntsysv aracı, Debian ve Ubuntu gibi dağıtımlarda ise update-rc.d ya da gene grafik arayüz sunan rcconf aracı kullanılabilir.
Örneğin, RHEL tabanlı sistemlerde misal olarak cups'ı devre dışı bırakmak chkconfig aracını şu şekilde kullanabilirsiniz:
# chkconfig cups off
Debian sistemlerde ise aynı işi update-rc.d komutu ile yapabilirsiniz.
# update-rc.d -f cups remove
Bu şekilde, cups startup'dan kaldırılmış olur ve sistem açılışlarında otomatik olarak başlatılmaz. Tabi halihazırda çalışmakta olduğu için ilgili servisin init scripti ile servisi durdurmayı unutmayın.
# /etc/init.d/cups stop
Hepsi bu kadar.
Bu yazılar da ilginizi çekebilir:
- lsof (LiSt Open Files) Kullanımı ve Örnek Komutlar
- Portaudit ile Kurulu Paketler için Zafiyet Takibi
- htaccess combiner ile Apache Performance Tunning
- Kurulu Perl Modüllerinin Listelenmesi
- mod_rewrite – .htaccess ile Bakım Sayfasına Yönlendirme
Yorumlar
Trackbacks
Yorumda bulunun.
Debian makine kurarken benim tercihim Netinstall CD’si ile standart sistem kurup daha sonra sadece gereken paketleri eklemek.
Netinstall CD’si ile standart kurulum yaparken yansi belirtmeye de gerek yok, CD icindeki paketler yetiyor. Standarta ek olarak sadece OpenSSH Server ekliyorum.
Daha sonra yansi adreslerini ekleyip sistemi guncelliyorum. Yeni paket eklemeden once “Recommended” ve “Suggested” paketlerin kurulmamasi icin gerekli degisiklikleri yapiyorum. Ve daha sonra sadece gereken paketleri ekliyorum.
Sunucu ya da masaustu olmasi farketmiyor, her zaman bu sekilde kurulum yapiyorum. Zahmetli gibi gorunebilir ama bir-iki kere bu sekilde kurulum yaptiktan sonra her adim otomatik sekilde ilerliyor ve tasksel ile kurmaktan pek bir farki kalmiyor, Hemen hemen ayni surede bitiyor.
[Cevapla]
Güzel bir yazı.
Fırsat olursa benzer bir yazıyı apache modülleri için de yazabilirseniz güzel bir katkı olabilir.
Hangi apache modların gereksiz olduğuna dair bazı İngilizce yazılar var ama yeterince detaylı yazı yok bildiğim kadarıyla.
Teşekkürler.
[Cevapla]
Bilgisayarın dışarıdan izlenip izlenmediğini bulabilirmiyiz.
[Cevapla]