taraf�ndan Mark Nielsen (homepage)
Yazar hakk�nda:
Mark ba��ms�z dan��man olarak �al��maktad�r. Zaman�n� GNUJobs.com,
makale yaz�m�, serbest yaz�l�m yaz�l�m� ve
eastmont.net'de g�n�ll� �al��arak ge�irmektedir.
T�rk�e'ye �eviri:
Erdal MUTLU <erdal(at)linuxfocus.org>
��erik:
|
Linux alt�ndaki t�m sunucular� chroot ortam�nda �al��t�rmak
�zet:
Chroot ortam�nda �al��an sunucular, herhangi birinin, sunucunun g�venlik
a��klar�ndan faydalanarak sisteme girdi�inde, sisteme verebilecekleri zar�
en aza indirmektedir.
Giri�
Chroot ne demektir? Chroot basit olarak, program�n d�nyas�n� yeniden
tan�mlamaktad�r. Daha kesin olmak gerekirse, program�n �al��t��� "ROOT" (/)
dizinini ve giri� (login) ortam�n� de�i�tirmektedir. B�ylece, chroot olarak kullan�lan
dizinin d���ndaki ortam, program i�in var olmamaktad�r.
Bu neden kullan��l�d�r? E�er, sisteminize birisi girerse (g�venlik a��klar�ndan
faydalanarak), sisteminizde yer alan t�m dosyalar� g�remeyeceklerdir.
Sistemin t�m�ne eri�ememeleri demek, sistemde yer alan t�m programlar� kullanamama ve
az g�venli olan di�er dosylara eri�ememeleri demektir.
Bence tek dezavant�j, a� �zerinde olup bitenden haberder olabilmemelridir.
Dolay�s�yla, bu yaz�da �ok fazla s�z� edilmeyen birka� �ey daha yapman�z gerekecektir:
- A� ba�lant� noktalar�n� (ports) g�vence alt�na almak.
- T�m sunucular� kendi kullan�c� alanlar�nda �al��t�rmak, yani
root olarak �al��t�rmamak. Buna ek olarak chroot ortam�nda �al��t�rmak.
- Sistem loglar�n� (syslog) ba�ka bir bilgisayara y�nlendirmek.
- Log dosyalar�n� incelemek.
- Bilgisayar�n�z�n rastgele olarak se�ilmi� ba�lant� noktalar�na (port)
giri� yapmaya �al��anlar� incelemek.
- Sunucular i�in ayr�lan M�B (CPU) ve belle�i s�n�rland�rmak.
- Kullan�c� kotalar�n� aktif hale getirmek.
Chroot (root kullan�c�s� alan� olarak de�il) ortam�n� bir g�venlik �izgisi
olarak d��nmemin nedeni, e�er herhangi biri, sistemin g�venlik a��klar�ndan
yararlanarak, root d���nda bir kullan�c� olarak sisteme girmeyi ba�arabilirse,
sisteme verebilecekleri zarar, girdikleri ortamla s�n�rl�d�r.
Girdikleri ortamda yer alan dosyalar�n genelde root'a ait olmas�,
sald�r�da bulunabilecek se�enekleri daha da aza indirmektedir.
A��kt�r ki, sisteminize birisinin girmesi pek ho� bir �ey de�ildir, ancak
b�yle bir durumda verebilecekleri zarar� en aza indirmek �nemlidir.
Bunu sa�lamada benim kulland���m y�ntemin 100%
g�venli olmayabilece�ini L�TFEN AKLINIZDAN �IKARTMAYIN.
Bu benim ilk denemem ve e�er �al���rsa, p�r�zleri sonradan gidermek daha kolay olacakt�r.
Ben bunu, chroot ortam� ile ilgili bir NASIL belgesi yaratmak i�in yolg�sterim olarak
d���nmekteyim.
Her�eyi chroot olarak nas�l yapaca��z?
"/chroot" ad�nda bir dizin yarat�p, t�m sunucular� bu dizin alt�na a�a��daki bi�ime
g�re yerle�tirece�iz:
- Syslogd chroot ortam�nda yer alarak, her sunucu ile birlikte �al��acak.
- Apache, /chroot/httpd dizininde chroot ortam�nda yer alacakt�r.
- Ssh, /chroot/sshd dizininde yer alacakt�r.
- PostgreSQL, /chroot/postmaster dizininde yer alacakt�r.
- Sendmail, chroot ortam�nda olacak, ancak maalesef root olarak �al��mas�
gerekecektir.
- ntpd, /chroot/ntpd dizininde yer alacakt�r.
- named, /chroot/named dizininde yer alacakt�r.
T�m sunucular, tamamen souyutlanm�� olarak �al��mal�d�r.
Chroot ortamlar�n� yaratan Perl program�m.
Config_Chroot.pl.txt
program�n� �ektikten sonra Config_Chroot.pl olarak, isminin de�i�tirilmesi gerekmektedir.
Program, y�klenmi� olan sunucular�n listesini vermekte, yap�land�r�m dosyalar�n�
g�r�nt�lemekte, sunucuyu yap�land�rabilmekte ve sunucuyu durdurup tekrar
�al��t�rabilemktedir. Genelde bunlar sizin yapman�z gereken �eylerdir.
- Chroot dizini yaratmak.
mkdir -p /chroot/Config/Backup
- Config_Chroot.pl.txt
dosyas�n� indirip, /chroot/Config_Chroot.pl olarak ismini de�itirmek.
- E�er, ev dizin ismini /chroot olarak kullanm�yorsan�z, program�n
i�inden bunu de�i�tirin.
- yap�land�r�m dosyalar�n� �ekin.
�imdi �nemli bir not: Ben program�, sadece RedHat 7.2 ve RedHat 6.2 test ettim.
Kendi Linux da��t�m�n�za g�re Perl program�n� de�i�tirebilirsiniz.
Chroot konusunda kocaman bir yaz� olu�tu, ancak Perl program� sayesinde
yaz� olduk�a k�sald�. Asl�nda, birka� sunucuyu chroot ortam�na ta��y�nca,
chroot ortam�na ta��nmas� gereken benzer dosya ve yap�land�r�m dosyalar�na sahip
olduklar�n� g�rd�m. Bir sunucu i�in hangi dosyalara gereksinim duydu�unuz anlaman�n
en kolay yolu man sayfas�na bakmak veya program k�t�phane dosyalar� kullan�yorsa,
ldd /usr/bin/program bakmakt�r. Ayr�ca, sunucuyu chroot ortam�na ta��d�ktan sonra
elle �al��t�r�p, olu�an hatalar veya loglara bakabilirsiniz.
Genel olarak bir sunucu y�klemek i�in:
cd /chroot
./Config_Chroot.pl config SERVICE
./Config_Chroot.pl install SERVICE
./Config_Chroot.pl start SERVICE
Chroot ortam�nda Ntpd
Ntpd bir zaman sunucusudur ve sizin bilgisayar�n�z ile di�er bilgisayarlar�n zamanlar�n�
ayarlamaya yaramaktad�r. bu sunbucuyu chroot ortam�na ta��mak olduk�a basit bir i�lem oldu.
cd /chroot
# E�er, benim yap�land�rma dosyam� kullanm�yorsan�z,
# a�a��daki sat�r�n # ni kald�r�n.
#./Config_Chroot.pl config ntpd
./Config_Chroot.pl install ntpd
./Config_Chroot.pl start ntpd
Chroot ortam�nda DNS veya named
Daha �nceden yap�lm��t�r. Ayr�nt�lar i�in
http://www.linuxdoc.org/HOWTO/Chroot-BIND8-HOWTO.html
veya
http://www.linuxdoc.org/HOWTO/Chroot-BIND-HOWTO.html belgelerine bakabilirsiniz.
E�er, benim program� kullanmak istiyorsan�z
cd /chroot
# E�er, benim yap�land�rma dosyam� kullanm�yorsan�z,
# a�a��daki sat�r�n # ni kald�r�n.
#./Config_Chroot.pl config named
./Config_Chroot.pl install named
./Config_Chroot.pl start named
Chroot ortam�ndaki sunucularla Syslog ve benim �ikayetlerim.
Syslogd chroot ortam�nda �al��t�rmak istiyorum. Benimsenmi� de�er olarak
syslogd, /dev/log sistem ayg�t�n� kullanmaktad�r ve bu ayg�t chroot ortam�ndan
g�r�nmemekte, yani ula��lamamaktad�r. Dolay�s�yla syslogd'yi kolayca chroot ortam�na
kolayca ta��yam�yorsunuz. Baz� ��z�m �nerileri a�a��da verilmi�tir:
- Syslogd'yi her sunucuyla birlikte chroot ortam�na ta��mak.
Ben bunu denedim ve log elde ettim. Bu y�ntem benim ho�uma gitmiyor, ��nk�
syslogd root kullan�c�s� olarak �al��maktad�r.
- Loglar, bilgisayar�n d��anda ba�ka bir yere y�nlendirilebilir mi, ona bak�lmal�d�r.
- Loglar, syslogd yerine sadece dosyalara al�nabilir. Bu belkide en g�venli se�enektir.
Ancak, sistemin g�venli�ini delerek giren birisi loglarla da oynayabilir.
- Ana syslogd'nin birden fazla yerdeki dosyalara bakmas� sa�lanabilir. Bunun i�in syslogd'nin
-a se�ene�inden yararlan�labilir.
Benim tek ��z�m�m, syslogd'nin herbir sunucu ile birlikte chroot ortam�na ta��mak oldu.
Asl�nda, syslogd'yi root d���ndaki bir kullanc� olarak ve kendi chroot ortam�nda bulunarak
�al��t�rmak isterdim, ancak daha iyi bir ��z�m bulana kadar bu konuda ba�ka bir �ey yapmayaca��m.
E�er, syslogd'yi herbir sunucu ile birlikte ayr� ayr� �al��t�rmak istemiyorsan�z, ana
syslogd'nin �al��t�r�ld��� dosyaya, syslogd'nin �al��t�rma sat�r�n� a�a��daki gibi
de�i�tirin:
syslogd -a /chroot/SERVICE/dev/log
E�er, ssh ve dns �al��t�r�yor olsayd�m, komut
syslogd -a /chroot/ssh/dev/log -a /chroot/named/dev/log -a /dev/log
�eklinde olacakt�.
Syslogd ile ilgi son olarak, syslogd'yi root d���nda bir kullan�c� alt�nda ve
chroot ortam�nda �al��t�rmay� isterdim. Birka� de�i�ik �ey denedim, ancak ba�ar�l�
olamad�m. E�er, syslogd'yi root d���nda bir kullan�c� olarak her sunucu ile birlikte
�al��t�rabilseydim, benim g�venlik ile ilgili olan gereksinimlerimi kar��lam�� olurdum.
Belkide, loglar� bilgisayar d���na g�ndererek yap�labilir.
Chroot ortam�nda Apache
Bunu yapmak �ok kolay oldu. Bir kere ayarlad�ktan sonra, Perl programlar�
�al��t�rma imkan�n� elde ettim. �u anda yap�land�r�m dosyam olduk�a b�y�k,
��nk� chroot ortam�na, Perl ve PostgreSQL k�t�phanelerini koymam gerekti.
Unutulmamas� gereken bir not: E�er, veritab�n�na ba�lanacaksan�z, onun 127.0.0.1
loopback ayg�t� �zerinde �al��t�r�n ve Perl'�n DBI mod�l� i�in
programlar�n�zda ba�lan�lacak bilgisayar olarak 127.0.0.1 olarak belirtin.
A�a��da benim veritaban�na, apache'nin ba�lant�lar�ndan faydalanarak, nas�l ba�land���ma dair bir �rnek var:
$dbh ||= DBI->connect('dbi:Pg:dbname=DATABASE',"","", {PrintError=>0});
if ($dbh ) {$dbh->{PrintError} = 1;}
else
{$dbh ||= DBI->connect('dbi:Pg:dbname=DATABASE;host=127.0.0.1',"","",
{PrintError=>1});}
Kaynak:
http://httpd.apache.org/dist/httpd/
Apache'yi derleyerek /usr/local/apache dizinine y�kleyin. Daha sonra
perl program�n� kullan�n.
cd /chroot
# E�er, benim yap�land�rma dosyam� kullanm�yorsan�z,
# a�a��daki sat�r�n # ni kald�r�n.
# ./Config_Chroot.pl config httpd
./Config_Chroot.pl install httpd
./Config_Chroot.pl start httpd
Ben httpd.conf dosyas�n� a�a��daki gibi de�i�tirdim:
ExtendedStatus On
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
<Location /server-info>
SetHandler server-info
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
Daha sonra �nternet gezgininizi
http://127.0.0.1/server-status veya http://127.0.0.1/server-info
adresine y�neltmeniz ve denemeniz yeterli olacakt�r!
Chroot ortam�nda ssh
�lk olarak ve ideali 22 numaral� ba�lant� noktas�nda (port) �al��an ssh'y�
2222 ba�lant� noktas�na y�nlendirmek olacakt�r. Onadan sonra, root
kullan�c�s� d���nda bir kullan�c� olarak ssh'y� 2222 ba�lant� noktas�n�
dinleyecek �ekilde �al��t�r�n. Ssh ile olan ilk ba�lant� i�in bize gereken
sadece iyi ge�i�s�zc�klerine sahip g�venli kullan�c� alanlar�, ki kullan�c�lar
sisteme giri� yapabilsin. Sisteme girdikleri zaman, 127.0.0.1:2322'de
�al��acak ve ger�ek sisteme girmelerini sa�layacak ikinci bir ssh sunucusunu
ayarlaman�z gerekecektir. �kinci ssh suncusu SADECE loopback ayg�t�ndan gelen
ba�lant�lara izin veriyor olmas� gerekmektedir. Biz bunu yapmayaca��z.
Bizim burada yapaca��m�z tek �ey, ssh'y� chroot ortam�na ta��makt�r.
Sshd sunucusunu root d���nda bir kullan�c� olarak
�al��t�rmak ve ikinci bir sshd sunucusunu loopback ayg�t�n� dinleyecek
�ekilde ayarlamak, okuyucuya �dev olarak b�rak�lm��t�r.
Tekrar s�ylemek gerekirse, biz burada sadece sshd sunucusunu chroot
ortam�na ta��yaca��z ve olu�acak sonu�lar (E�er, sadece bunu yaparsan�z, t�m
sisteminize ula�amayacaks�n�z.) hakk�nda d���nmenizi sa�layaca��z.
Ayr�ca, en iyisi, bunu loglar� bilgisayar�n d���na alabilmek i�in ayarlamakt�r.
Siz b�y�k bir olas�l�kla OpenSSH kullan�yor olacaks�n�z. Ben kolay olsun diye
SSH'n�n ticari s�r�m�n� kullan�yorum (Bu bir �z�r de�il tabii.).
Kaynak:
http://www.ssh.com/products/ssh/download.cfm
Ssh'y� /usr/local/ssh_chroot dizinine y�kleyiniz. Daha sonra perl program�n� kullan�n�z.
cd /chroot
# E�er, benim yap�land�rma dosyam� kullanm�yorsan�z,
# a�a��daki sat�r�n # ni kald�r�n.
# ./Config_Chroot.pl config sshd
./Config_Chroot.pl install sshd
./Config_Chroot.pl start sshd
E�er, ftp sunucusunu ssh ile de�i�tirmek istiyorsan�z, bence en iyisi
sshd'yi chroot ortam�nda �al��t�rman�zd�r. Dolay�s�yla, kullan�c�lar�n
sisteme ula��mlar� k�s�tlanm�� olacakt�r. Rsync ve SCP bilgisayara dosya
aktarmak i�in �ok uygun. Bir�ok ftp sunucusu chroot ortam�nda �al��abilmektedir,
ancak ben, metin bi�iminde kullan�c� ad� ve ge�i�s�zc�klerinin gidip gelmesinden
rahats�zl�k duyuyorum.
Chroot ortam�nda PostgreSQL
Bu, perl kadar kolay oldu, sadece daha fazla k�t�phane dosyas� aktarmak gerekti.
Sonu� olarak bu o kadar da zor bir i� olmad�. Fazladan tek yapmam gerek,
PostgreSQL veritaban�n� a� loopback ayg�t� �zerinden a�makt�r. Chroot ortam�nda
yer ald���ndan, sanaldoku sunucusu gibi di�er sunucular�n ona ula�mas�
m�mk�n olmayacakt�. PostgreSQL'e bir de Perl derledim. B�ylece yap�land�rma dosyamda
bir�ok Perl ile ilgili komut yer ald�.
Kaynak:
ftp://ftp.us.postgresql.org/source/v7.1.3/postgresql-7.1.3.tar.gz
Apache'yi derleyerek /usr/local/postgres dizinine y�kleyiniz. Daha sonra
perl program�n� kullan�n�z.
cd /chroot
# E�er, benim yap�land�rma dosyam� kullanm�yorsan�z,
# a�a��daki sat�r�n # ni kald�r�n.
# ./Config_Chroot.pl config postgres
./Config_Chroot.pl install postgres
./Config_Chroot.pl start postgres
Chroot ortam�nda Sendmail
Devam edim ve benim perl program�m� �al��t�r�n.
cd /chroot
# E�er, benim yap�land�rma dosyam� kullanm�yorsan�z,
# a�a��daki sat�r�n # ni kald�r�n.
# ./Config_Chroot.pl config sendmail
./Config_Chroot.pl install sendmail
./Config_Chroot.pl start sendmail
Evet, �imdi bir�eyler fark edebildiniz mi? Evet, ger�ekten root
kullan�c�s� olarak �al��maktad�r. Ayr�ca, /etc/rc.d/init.d/sendmail �al��t�r�ld���nda,
baz� dosyalar tekrar yarat�ld�. Benim program bunlar� yapmamaktad�r.
/etc/mail dizininde yapaca��n�z her de�i�iklikten sonra, dosyalar� /chroot/senmail/etc
alt�na kopyalamay� unutmay�n�z. Ayr�ca, kullan�c�lar sisteme
giri� yapt�klar�nda e-iletilerini okuyabilmeleri i�in, /var/spool/mail dizinini,
/chroot/sendmail/var/spool/mail dizinine y�nlendirmeniz gerekmektedir.
�yi haber, e-ileti g�ndermek i�ini herzaman yapabilirsiniz. Sorun yaratan ileti alma
i�levidir. Dolay�s�yla, apache ve sendmail'i y�kleme s�ras�nda hi�bir sorun ya�amad�m.
Baz� Perl programlar�m e-ileti g�ndermektedir. Dolay�s�yla sendmail dosyalar�n�
apache'nin bulundu�u chroot ortam�na kopyalamam gerekti.
Chroot ortam�nda �al��t�r�lmas� gereken ba�ka sunucular.
��te benim felsefem:
-
Sendmail, ssh, apache, postgresql, syslog dahil olmak �zere, bilgisayarda
�al��an t�m sunucular chroot ortam�nda �al��t�r�lmal�d�r.
- Her sunucu root kullan�c�s� d���ndaki ba�ka bir kullan�c� olarak
�al��t�r�lmal�d�r (Bunun i�in 1024'�n alt�ndaki, korumal� ba�lant� noktalar�n�
1024 �st�ndeki ba�ka ba�lant� noktalar�na y�nlendirmen�z gerekebilir.)
Sendmail ve syslogd i�in bunu zaten yapman�z gerekir.
- Loglar� bilgisayar d���na g�ndermeniz gereklidir.
- Her sunucu i�in ayr� bir disk b�lmesi (partition) kullan�lmal�d�r.
B�ylece, sisteme girebilecek korsanlar�n, dosya yazmak veya olu�turmak
istediklerinde s�n�rl� alanlar� olacakt�r. E�er, yeterli say�da disk
b�lmesine sahip de�il iseniz, loopback ayg�tlar�n� mount edip kullanabilirsiniz.
- De�i�meyen t�m dosyalar�n sahibi root olmal�d�r.
Sendmail ve syslogd sunucular�na gelince. Ben hala bunlar�n da root
olmayan kullan�c�lar olarak �al��t�r�lmas� taraftar�y�m.
Sendmail i�in bunun m�mk�n olmas� gerekmektedir, ancak ben hen�z ba�aramad�m.
Bunu yapman�n sak�ncal� taraflar� oldu�unu biliyorum, ancak dosya eri�im
haklar� da g�z�n�nde bulundurularak bunlar�n �stesinden gelinebilir diye d���n�yorum.
Belkide benim g�remedi�im baz� sebepler vard�r. Ancak, bunlar�n a��labilece�i
d���ncesindeyim.
Syslogd'yi denemedim. Ancak, sistem loglar�n�n root olmayan kullanc� olarak
saklanmas�n�n m�mk�n olaca��n� d���n�yorum. En az�nda syslogd'yi chroot ortam�nda
�al��t�rabilmi�tim.
T�m sunucular root olmayan kullan�c�lar olarak �al��t�r�lmal�d�r. Buna NFS dahil. Her�ey.
�neriler
- Ssh i�in iki ayr� suncu ve giri� kullan�n.
- Sendmail veya ba�ka bir mail program�n�n root olmayan kullan�c� olarak
nas�l �al��t�r�labilece�ini bulmaya �al���n.
- /lib alt�nda yer alan t�m k�t�phanelere gereksiniminiz yoktur. Ben kolayl�k olsun diye
hepsini kopyalam��t�m. �o�una gereksiminiz yoktur.
- Syslogd'nin loglar�n� uzaktaki ba�ka bir bilgisayara aktar�n. Syslogd'yi bir
ba�lant� noktas�nda yer almas�n� ve buradan yerel loopback ayg�t� �zerinden ba�ka bir bilgisayara
loglar�n aktar�lmas� i�in bir yol bulun. Syslogd'nin root olmayan kullan�c� olarak
�al��t�rma yollar�n� ara�t�r�n.
Sonu�
Bence chroot ortam� t�m sunucular i�in yap�lmal�d�r. �nanc�ma g�re, root olmayan kullan�c�
olarak, chroot ortam�nda �al��t�r�lmayan sunucular �ok hatal�d�r.
Umar�m b�y�k Linux da��t�c�lar� bunu yaparlar, veya k���kleri, veya HERHANG�B�R da��t�c�.
Mandrake, RedHat'ten esinlenerek i�i daha da ileriye g�t�rd�. Belkide birileri
Mandrake'den esinlenerek ve sunucular� chroot ortam�na ta��yarak daha da ileriye
g�t�rebilirler. GNU/Linux ortam�nda, ba�kalar�n�n yapt�klar�n� bir ba�kas�n�n
yeniden yapmas�n� engelleyecek hi� bir �ey yoktur. Dolay�s�yla bence bu m�mk�n.
E�er, herhangibir �irket, chroot ortam�n� sa�lay�c� sistematik ve
kolay bir y�ntem olu�turursa, bence bu harika olur! Her�eyin grafik ortamlarda
yap�ld��� �u g�nlerde, b�yle bir�eyin de KGA olarak yap�lmas� bir�ok insan�n
i�ini kolayla�t�racakt�r. Bir�ok ki�i i�in, komut sat�r�ndan ayarlamalar yapmak
pek �ekici gelmemektedir. KGA arac�l�yla yap�land�rma yapabilmeleri ve sunucular�n
d�zg�n �al��mas� onlar i�in yeterli olmaktad�r. Arka tarafta nelerin d�nd���
onlar� pek ilgilendirmemektedir!
Ben, t�m sunucular�n chroot ortam�nda root olmayan kullan�c�lar
olarak ayarlanmas� fikrini %100 olarak desteklemekteyim ve
bunu yapmayan da��t�mlar bana uygun olmayacakt�r ve onlar� �retim ortamlar�nda kullanmay�
hi� d���nm�yorum. Her�eyi chroot ortam�na ta��may� hedefliyorum. Sonunda
bunu ba�araca��m.
Chroot konusunda NASIL belgesi olu�turmay� planl�yorum. Bu yaz�y� LyX bi�imine
�evirebilecek birisi varsa, bana yard�m etmesini istiyorum. Bunu Linux NASIL belgeleri
aras�na koymak m�mk�n olabilir.
Kaynaklar
-
E�er, bu yaz� de�i�irse, onu
http://www.gnujobs.com/Articles/23/chroot.html adresinde bulabilirsiniz.
Bu yaz� i�in g�r�� bildiriminde bulunabilirsiniz
Her yaz� kendi g�r�� bildirim sayfas�na sahiptir. Bu sayfaya yorumlar�n�z� yazabilir ve di�er okuyucular�n yorumlar�na bakabilirsiniz.
2002-01-15, generated by lfparser version 2.21