Oracle’da Dosya Erişim Yetkileri

Ekim 26 2009

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.

Emre Baransel tarafından yayınlandı

Bir Cevap Yazın