Oracle’da Dosya Erişim Yetkileri
1 – Oracle Veritabanı Dosyalarının Erişim Yetkileri
Oracle veritabanı dosyaları, verilerimizin bulunduğu “datafile”lar, veritabanının kütüğü olarak isimlendirebileceğimiz “control file”lar ve veritabanındaki değişiklikleri tutan “redo log dosyalarıdır”. Oracle veritabanı için olmazsa olmaz bu dosyaların sağlıklı bir biçimde çalışması gerekmektedir. Bu nedenle bu dosyaların başka Unix kullanıcıları tarafından yazılamaz (silinemez) durumda oldukları kontrol edilmelidir.
Bu dosyalar veritabanı sahibi işletim sistemi kullanıcısı ve onun grubunca sahiplenilmeli ve
başkaları tarafından yazılamamalıdır.
Peki bu dosyaları nasıl bulabiliriz? Yerlerini öğrenmek için sqlplus ile veritabanına bağlanarak, aşağıdaki sorguları kullanabiliriz:
$ sqlplus / as sysdba SQL> select name from v$datafile;<br />NAME -------------------------------------------------------------------------------- /d1/data/ORNEK/sysORNEK01.dbf<br />/d2/data/ORNEK/sysORNEK02.dbf /d3/data/ORNEK/sysORNEK03.dbf<br />/d2/data/ORNEK/datORNEK01.dbf /d3/data/ORNEK/datORNEK02.dbf<br />/d3/data/ORNEK/rbsORNEK01.dbf SQL> 6 rows selected.
Yukarıdan da anlaşılacağı üzere datafile’larımız /d1/data/ORNEK, /d2/data/ORNEK vb yerlerde duruyor.
Aynı şekilde controlfile’ların yerini bulmak için:
SQL> select name from v$controlfile;
ve online redo logfile’ları bulmak içinse:
SQL> select member from v$logfile;
komutlarını verebiliriz.
Dosyaların yerlerini bulduktan sonra bunların kime ait olduğuna bakmamız gereklidir.
SQL>exit
diyerek sqlplus’tan çıkıp komut satırına düştükten sonra;
$ cd /d1/data/ORNEK
Komutuyla bu dizine gidebiliriz. (Sizin dosyalarınız farklı yerlerde olacağı için ilgili dizini yazmalısınız)
$ ls -al -rw-r----- 1 oracle dba 1859584 Mar 17 16:34 ctlORNEK01.dbf -rw-r----- 1 oracle dba 314580992 Mar 17 06:08 sysORNEK01.dbf
Yukarıdaki komutla ilgili dosyaların kime ait olduğunu ve kimlere yazma yetkisi verildiğini görüyoruz.
Bu örneğimizde yalnızca oracle kullanıcısına yazma yetkisi verildiğine dikkat edin. Eğer dba grubuna ya da tüm kullanıcılara yazma yetkisi verilmiş olsaydı şuna benzer bir durumla karşılaşırdık.
-rw-rw-rw- 1 oracle dba 1859584 Mar 17 16:34 ctlORNEK01.dbf -rw-rw-rw- 1 oracle dba 314580992 Mar 17 06:08 sysORNEK01.dbf
Bu ise ciddi bir güvenlik açığı oluşturmaktadır. Sisteme bağlı farklı bir kullanıcı bilerek ya da bilmeyerek bu dosyalardan birini silebilir, üzerine yazabilir. Bu durumda veritabanınız artık çalışmayacaktır.
Bu nedenle eğer yukarıdakine benzer bir durumla karşı karşıyaysanız vt’yi kapatın ve dosya haklarını değiştirin:
$ sqlplus / as sysdba SQL>shutdown immediate SQL>exit $ chmod 600 *.dbf
2 – “oracle” (oracle.exe) Binary Dosyasının Erişim Yetkileri
Oracle binary dosyaları diğer adıyla “executable” dosyaları oracle kurulumuyla gelen ve oracle servislerinin çalışmasını sağlayan dosyalardır. Bu dosyalar kurulumda belirlenen ORACLE_BASE ismi verilen dizinin altındaki /bin klasöründe bulunurlar. Kurulum sonrasında bazı binary dosyaların yetkilerinin değiştirilmesinde güvenlik açısından fayda vardır.
Bu dosyalardan en önemlisi unix sistemlerde “oracle” windows sitemlerde “oracle.exe” olarak bulunan dosyadır. Bu dosyanın erişim yetkileri kurulum sonrasında aşağıdaki gibidir.
$ cd $ORACLE_HOME/bin $ ls -l oracle -rwsr-s--x 1 oracle oinstall 69344968 Jun 10 14:05 oracle
Burada görünen -rwsr-s–x ifadesinin anlamı; dosya sahibi kullanıcının okuma,yazma ve çalıştırma, dosya sahibi gruptaki kullanıcıların okuma ve çalıştırma, diğer kullanıcıların ise sadece çalıştırma yetkilerinin bulunduğudur. Burada görünen “s” ifadesi ise özel bir anlam içerir. Bu “executable” dosyayı bir kullanıcı çalıştırdığında bu kullanıcının kim olduğundan bağımsız olarak, dosyanın sahibininin yetkileriyle çalıştırılır.
Veritabanına bağlantı kurmak isteyen istemcilere hizmet veren sunucu işlemi (server process) “oracle“ binary dosyasını kullanmaktadır. Bu nedenle sadece Oracle yazılım sahibi kullanıcının bu dosyayı çalıştırma hakkına ihtiyacı vardır. Diğer kullanıcılardan bu dosya üzerindeki erişim yetkilerini almak güvenlik açısından faydalı olacaktır. Aşağıdaki komut ile dosya erişim yetkileri sadece Oracle yazılım sahibi kullanıcıya verilir.
$ chmod 0700 $ORACLE_HOME/bin/oracle $ cd $ORACLE_HOME/bin $ ls -l oracle -rwx------ 1 orasoft oinstall 248754168 Oct 8 07:11 oracle
Bu değişimden sonra Oracle yazılım sahibi işletim sistemi kullanıcısı dışındaki kullanıcılar, oracle veritabanına sadece listener üzerinden bağlanabilirler. Aşağıdaki gibi bir bağlantı isteği bu kullanıcılar için hata mesajı verecektir.
$ sqlplus system/oracle ERROR:ORA-12546: TNS:permission denied Enter user-name:
Aşağıdaki bağlantı ise listener üzerinden gerçekleşeceği için başarılı olacaktır.
$ sqlplus system/oracle@BAG
3 – Dinleyici (Listener) Binary Dosyalarının Erişim Yetkileri
Listener binary dosyalarının kurulum sonrasında erişim yetkileri aşağıdaki gibidir.
-rwxr-x--x 1 orasoft oinstall 214720 Oct 25 01:23 lsnrctl -rwxr-xr-x 1 orasoft oinstall 214720 Oct 1 18:50 lsnrctl0 -rwxr-x--x 1 orasoft oinstall 1118816 Oct 25 01:23 tnslsnr -rwxr-xr-x 1 orasoft oinstall 1118816 Oct 1 18:50 tnslsnr0
Burada iki tip dosya bulunmaktadır. Bunlar:
tnslsnr -> Gerçek listener executable dosyası (Listener servisinin başlatılması, durdurulması için kullanılır.)
lsnrctl -> Listener’ın yönetilmesi için kullanılan binary
Bu dosyalar için aşağıdaki şekilde bir erişim düzenlemesi güvenlik açısından faydalı olacaktır.
$ chmod 700 lsnrctl tnslsnr $ chmod 000 lsnrctl0 tnslsnr0
4 – Diğer Binary Doyalarının Erişim Yetkileri
Bir önceki konuda dosya yetkileri incelendiğinde görülen “s” ifadesinin ne anlama geldiği belirtilmişti. “s” yetkisinin verildiği dosyalar SUID biti set edilmiş şeklinde de adlandırılırlar. Oracle binary dosyaları içerisinde SUID biti set edilen diğer dosyalar aşağıdaki gibidir.
-rwsr-s--x 1 orasoft dba 93300507 Jul 22 11:20 ./bin/oracleO -r-sr-s--- 1 root dba 0 Jul 1 23:15 ./bin/oradism -rwsr-s--x 1 orasoft dba 94492 Jul 22 11:22 ./bin/emtgtctl2 -rwsr-s--- 1 root dba 18944 Jul 22 11:22 ./bin/nmb -rwsr-s--- 1 root dba 20110 Jul 22 11:22 ./bin/nmo -r-sr-sr-x 1 nobody nobody 58302 Jul 22 11:23 ./bin/extjob
Bu dosyaların işlevleri ise aşağıdaki gibidir.
/bin/oracle0 -> ”oracle” binary dosyasının kopyasıdır. Potansiyel bir güvenlik riskidir. Bu nedenle tüm yetkilerin kaldırılması güvenlik açısından en iyi seçenektir.
/bin/oradism -> Dinamik İçiçe Paylaşımlı Hafıza (Dynamic Intimate Shared Memory) için kullanılır. Platformunuzda kullanıyorsa erişim yetkileri değiştirilmem
elidir.
/bin/emtgtctl2 -> Enterprise Manager ajanı için kullanılır. SUID bitinin set edilmesine gerek yoktur. “oracle” dosyası gibi erişim yetkileri 700 olarak set edilebilir.
/bin/nmb -> Oracle 10g Grid Control ajanının hedef sunucuda istatistik toplaması amacıyla kullanılır. Olduğu şekilde bırakmakta sakınca yoktur.
/bin/nmo -> Oracle 10g Grid Control ajanının hedef sunucuda istatistik toplaması amacıyla kullanılır. Olduğu şekilde bırakmakta sakınca yoktur.
/bin/extjob -> Enterprise Manager içerisinden harici görevler (External Job) çalıştırılması amacıyla kullanılır. Eğer harici görevler kullanılmıyorsa dosya sahibi Oracle yazılım sahibi olarak ve erişim yetkisi 700 olarak set edilebilir. Ayrıca extjob0 isimli bir dosya bulunması durumunda ise bu dosyanın erişim yetkileri tamamen kaldırılabilir.
5 – Umask Kullanılması
Umask Oracle’ın yaratacağı farklı dosyaların erişim yetkilerinin düzenlenmesi için güçlü ve efektif bir yoldur. Bir kullanıcıya atanan umask değeri 777’den çıkarılarak elde edilen değer bu kullanıcının yaratacağı tüm dosyalara erişim yetkisi olarak atanır. Oracle yazılım sahibi işletim sistemi kullanıcısının umask değeri 022 olmalıdır. Böylelikle bu kullanıcının yaratacağı dosyalar 755 yetkisinde (sahibi için okuma+yazma, diğer kullanıcılar için okuma yetkisi) olacaktır.
Ayrıca umask, kullanıcıya atandığı gibi bir dizine de atanabilir. Böylelikle belirli bir dizinde yaratılan dosyaların aynı erişim yetkisinde olması sağlanır. Aşağıdaki dizinler için 177 umask atanması güvenlik açısından faydalı olacaktır. Böylelikle bu dizinlerde yaratılacak dosyalar 600 yetkisine (sadece dosya sahibi için okuma+yazma) sahip olacaktır.
background_dump_dest: Bazı izleme dosyaları (trace files) ve alarm log dosyası (alert log) bulunur.
User_dump_dest: İzleme dosyaları (trace files) bulunur.
$ORACLE_HOME/rdbms/log: Bazı veritabanı log dosyaları burada yaratılır.
$ORACLE_HOME/rdbms/audit: audit_file_dest parametresi set edilmemişse veritabanı denetim iz dosyaları (audit trails) burada saklanır.
audit_file_dest: Veritabanı denetim iz dosyaları (audit trails) burada saklanır.
6 – UTL_FILE_DIR Parametresinin Kullanımı
SQL> show parameter utl_file_dir<br />utl_file_dir = '*'
Yukarıdaki ifadenin anlamı Oracle yazılım sahibinin okuma, yazma yetkisi olan her türlü dizinde veritabanı kullanıcılarının dosya açabilecekleridir. Bu yetkiyle Oracle veri dosyalarına, arşiv dosyaları hasar verilebilir, veritabanının çökmesi ve yedekten dönülememesi sağlanabilir. Bu gibi güvenlik açıklarına sebebiyet vermemek için veritabanımızda bu parametrenin kullanımına dikkat etmeliyiz.
• Uygulama kodunda şu ifadeyi arayın: utl_file.fopen
• İlk parametredeki isimleri kaydedin. Örneğin utl_file.fopen (‘/tmp’,'myfile.txt’,'W’) şeklinde bir ifade görüldüğünde “/tmp” değerini kaydedin.
• Sys kullanıcısı ile kaydettiğiniz tüm bu dizinler için veritabanında “directory” yaratın.
Örneğin /tmp dizini için TMPDIR isimli bir “directory”
• Bu “directory”lere erişim yetkilerini dizini kullanan veritabanı kullanıcısına atayın. Örneğin
grant read on directory TMPDIR to SCOTT;
• Uygulama kodu içerisindeki dizinleri “directory” isimleri ile değiştirin
Örneğin:
utl_file.fopen (‘/tmp’,'myfile.txt’,'W’)
yerine
utl_file.fopen (‘TMPDIR’,'myfile.txt’,'W’)
• Uygulamaları yeniden compile edin.
• “create any directory” sistem yetkisini PUBLIC’ten ve veritabanı yöneticileri dışında tüm kullanıcılardan alın.


