apache-realm
Posted on : 10-12-2008 | By : admin | In : Java, Yazılım
1
Realm yetkili kullanıcıları tesbit etmek amacıyla kullanıcı adları ve şifrelerinin barındırıldığı ayrıca kullanıcı ve rol eşleştirmelerinin tutulduğu bir veritabanıdır.
– Kullanıcı adı
– Şifreler
– Kullanıcı – Rol Eşleştirmeleri
• Tomcat 5, plug-in bileşenleri tarafından gerçeklenmesi için org.apache.catalina.Realm arabirimi geliştirmiştir.
• 5 çeşit standart realm plug-in’i bulunmaktadır.
– JDBCRealm
– DataSourceRealm
– JNDIRealm
– MemoryRealm
– JAASReaml
Realm apache konfigürasyon dosyaları içerisinde bulunan server.xml de tanımlanır.
– < Realm > tanimi < engine >,< context > ve ya < host > elemanlarının içinde yapilabilir.
– < Engine > elemani olarak tanimlanirsa tüm web uygulamaları tarafından paylaşılır.
– < Host > elemanı olarak tanımlanırsa tanımlandığı host altında bulunan tüm web uygulamaları tarafından paylaşılır.
– < Context > elemanı olarak yazılmışsa sadece o contextde bulunan web uygulaması tarafından kullanılır.
– Realm tanımları ezilebilir.
Şifre güvenliği
• Sisteminizde ya da veritabanında kullanıcıların şifrelerinin açık durması güvenli değildir.
• Realm ile şifrelerin sindirilmesi desteklenir.
• Şifrelerin sindirilmesi java.security.MessageDigest sınıfının desteklediği (SHA, MD2, ya da MD5) algoritmaları ile yapılabilir.
• Realm tanımı yapılırken sindirim algoritması digest özelliği ile tanımlanır.
•
Uygulama sırasında Realm’ın authenticate() metodu çağrıldığında şifre digest özelliği ile belirtilen şekilde sindirilir ve Realm’de tutulan şifre ile karşılaştırılır.
• Düz metin şifreler iki şekilde sindirilir.
– Uygulama içinden yazılıyorsa
org.apache.catalina.realm.RealmBase sınıfının Digest() methodu çağrılır.
– Komut satırında aşağıdaki komut çalıştırılır.
java org.apache.catalina.realm.RealmBase -a {sindirim algoritması} {düzmetin-şifre}
Realm tarafından basılan debug ve hata mesajları realmın
barındırıcısı ile ilişkili log konfigürasyonu tarafından saklanır.
– Context
– Host
– Engine
JDBC Realm
• JDBCRealm kullanıcıları JDBC sürücüsü ile erişilen bir ilişkisel veritabanında tutar.
• Kullanıcı adları, şifreler ve rollerle ilgili tabloların bulunduğu herhangi bir veritabanı Realm tarafından kullanılabilir.
• Kullanıcı tablosu en az kullanıcı adını ve şifresini barındıran iki kolondan oluşmalıdır.
• Kullanıcı adlarının ve rollerinin bulunduğu bir Rol tablosu tanımlanmalıdır.
• Bir kullanıcının bir ya da birden fazla rolu olabilir.
• Bir kullanıcının hiç rolü olmayabilir.
JDBC Realm kullanmak için aşağıdaki adımlar izlenmelidir.
– Veritabanında ilgili tablolar oluşturulmalıdır.
– Tomcat için bu tabloları okumaya yetkili kullanıcı oluşturulmalıdır.
– $CATALINA_HOME/server/lib yada $CATALINA_HOME/common/lib
dizini altına ilgili JDBC sürücüsü kütüphanesi konulmalıdır.
– $CATALINA_HOME/conf/server.xml dosyasında
yapılmalıdır.
– Tomcat yeniden başlatılmalıdır.
JDBC Realm için tablo yaratalım
create table KULLANICI (
KULLANICI_ADI varchar(15) not null primary key,
KULLANICI_SIFRESI varchar(15) not null
);
create table KULLANICI_ROLU (
KULLANICI_ADI varchar(15) not null,
ROL_ADI varchar(15) not null,
primary key (KULLANICI_ADI, ROL_ADI)
);
Server.xml deki tanım aşağıdaki gibi olmalıdır.
< Realm className="org.apache.catalina.realm.JDBCRealm"
debug=”99″
driverName=”org.gjt.mm.mysql.Driver”
connectionURL=”jdbc:mysql://localhost/authority?user=vtyskull
anicisi&password=vtyssifresi”
userTable=”KULLANICI”
userNameCol=”KULLANICI_ADI”
userCredCol=”KULLANICI_SIFRESI”
userRoleTable=”KULLANICI_ROLU”
roleNameCol=”ROL_ADI”/>
• Kullanıcı korunan bir kaynağa ulaşmak istediğinde Tomcat Realm’ın authenticate() methodunu çağırır. Yani veritabanında yapılan değişiklikler anında geçerli olur.
• Kullanıcı bir kere sisteme girdikten sonra bilgileri kullanıcının sistemde olduğu sürece Tomcatde cachelenir.Log-in olan kullanıcı için Veritabanında yapılan değişiklikler kullanıcı tekrar login olana kadar geçerli olmaz.
• Tomcat’de veritabanındaki kullanıcı tanımlarını yönetme özelliği bulunmamaktadır. Bu web uygulamalarının özelliğidir.
Data Source Realm
• DataSourceRealm kullanıcıları JDBC Verikaynağı olarak adlandırılan bir JNDI üzerinden erişilen bir ilişkisel veritabanında tutar.
• Kullanıcı adları, şifreler ve rollerle ilgili tabloların bulunduğu herhangi bir veritabanı Realm tarafından kullanılabilir.
DataSourceRealm kullanmak için aşağıdaki adımlar izlenmelidir.
– Veritabanında ilgili tablolar oluşturulmalıdır.
– Tomcat için bu tabloları okumaya yetkili kullanıcı oluşturulmalıdır.
– JDBC VeriKaynağı tanımlanmalıdır.
– DataSource f$CATALINA_HOME/conf/server.xml dosyasında
– Tomcat yeniden başlatılmalıdır.
Server.xml deki tanım aşağıdaki gibi olmalıdır.
< Realm className="org.apache.catalina.realm.DataSourceRealm"
debug=”99″
dataSourceName=”jdbc/authority”
userTable=”KULLANICI” userNameCol=”KULLANICI_ADI”
userCredCol=”KULLANICI_SIFRESI”
userRoleTable=”KULLANICI_ROLU” roleNameCol=”ROL_ADI”/>
• Kullanıcı korunan bir kaynağa ulaşmak istediğinde Tomcat Realm’ın authenticate() methodunu çağırır. Yani veritabanında yapılan değişiklikler anında geçerli olur.
• Kullanıcı bir kere sisteme girdikten sonra bilgileri kullanıcının sistemde olduğu sürece Tomcatde cachelenir.Log-in olan kullanıcı için Veritabanında yapılan değişiklikler kullanıcı tekrar login olana kadar geçerli olmaz.
• Tomcat’de veritabanındaki kullanıcı tanımlarını yönetme özelliği bulunmamaktadır. Bu web uygulamalarının özelliğidir.
JNDI REALM
• DataSourceRealm kullanıcıları JNDI üzerinden erişilen bir LDAP dizin sunucusunda tutar.
• Realm’in LDAP ile arasındaki bağlantı connectionURL konfigürasyonu ile kurulur.
• Kullanıcının bilgilerini almak için bağlantı kurulduğunda realm kendisini verilen kullanıcı adı ve şifresi ile tanıtır. Eğer bu bilgiler
yoksa bağlantı anonim bağlantı olur.
• Doğrulanabilen her kullanıcı connectionURL de LDAP da bağlantı cümleciğinde de belirtilen ayrı bir kayıt ile tanıtılabilmelidirler.
• Bu kullanıcı kaydı doğrulanmak için gereken kullanıcı adını barındırmalıdır.
• Realm’in LDAP ile arasındaki bağlantı connectionURL konfigürasyonu ile kurulur.
memory realm
• MemoryRealm’de kullanıcı adları şifreler ve roller $CATALINA_HOME/conf/tomcat-users.xml dosyasinda tutulur.
• MemoryRealm kullanıldığında Tomcat ayağa kalkarken bu dosyadaki verileri okur.
• Bu dosya yapılan değişiklikler Tomcat yeniden başlatılana kadar geçerli olmaz.
• Kullanici dosyasi kök elemanı
dosyadır.
• < tomcat-users> elemanı içinde her kullanıcı için aşağıdaki
bilgileri barındıran
– name – Kullanıcı adı
– password – Şifre
– roles – virgülle ayrılmış roller listesi.
< tomcat-users>
< user name="tomcat" password="tomcat" roles="tomcat" />
< user name="role1" password="tomcat" roles="role1" />
< user name="ikisi" password="tomcat" roles="tomcat,role1" />
tomcat-users>
JAAS REALM
• JAASRealm kullanıcıları Java Authentication & Authorization
Service (JAAS) çatısı ile doğrular.
• JAAS SDK 1.4 de bulunmaktadır.
• JAAS Java 2 SDK 1.3 de seçeneğe bağlı olarak bulunmaktadır
Sonraki konu : Apache Guvenlik Yöneticisi


[...] Kurulum ve Konfigurasyonu Apache Realm ve Yetkilendirme Apache Guvenlik [...]