12 KiB
#Lider - Ahenk Mesaj Tipleri ve JSON Yapıları
##Mesaj Tipleri
Ahenk ile Lider birbirlerine Ejabberd üzerinden mesaj göndererek haberleşir. Bu mesaj JSON formatındadır. Ve mesajlar farklı tiplerde olsa da type ve timestamp alan isimleri her mesajda bulunur.
Ahenk kurulu olduğu bilgisayarda ilk kez çalışırken kendini Ejabberd server, veri tabanına ve ldap'a kaydetmesi üzere bir takım bilgiyi Lider'e gönderir. Bu işlem Registration'dır ve mesaj tipi REGISTER'dır. Registration mesajına Lider REGISTRATION_RESPONSE tipinde bir json mesajı döndürür.
Ahenk kurulu bilgisayarlarda kullanıcılar LDAP üzerinden authenticate olurlar. Oturum açma işlemi sırasında Ahenk, Lider'e 2 adet mesaj gönderir. Bunlar LOGIN ve GET_POLICIES mesajlarıdır. LOGIN mesajında Lider'e hangi kullanıcının oturum açtığını bildirilir. GET_POLICIES mesajında (varsa önceden gönderilmiş politikanın bilgisi gönderilir) giriş yapan kullanıcı ile çalışmakta olan ajan bilgisayar üzerine önceden tanımlanmış politikaları Lider'den ister.
GET_POLICIES tipindeki mesaja Lider, EXECUTE_POLICY tipinde mesaj gönderir. Bu mesaj varsa kullanıcı ve ajan bilgisayar üzerinde tanımlı olan politikaların içeriği hakkında cevap döndürür. Burada dikkat edilmesi gereken nokta; Ahenk GET_POLICIES mesajıyla hali hazırda kayıtlı kullanıcı ve ajan politikalarının versiyonlarını Lidere gönderir. Lider bu kullanıcı-ajan üzerinde bu versiyondan daha yeni bir versiyon politika olmadığını görürse profili null olarak döndürür fakat geçerli politika versiyonunu yazar. Ahenk, Liderden dönen EXECUTE_POLICY mesajı ile gelen politikalara bakıp, yeni politika geldi ise veritabanını günceller. Ahenk güncel politikaları çalıştırmaya başlar. Eğer politika versiyonları null ise bu kullanıcı ya da ajan için politika tanımlanmamış demektir.
EXECUTE_TASK tipindeki mesajlar ise o anda çalıştırılması gereken görev için kullanılan gereklili parametreleri barındıran mesajdır.
Çalıştırılan her görev ya da Politika Profili sonunda Ahenk, Lidere RESPONSE gönderir. Response mesajı ile çalıştırılan görev/politikanın başarı durumu, varsa döndürülen data bu mesaj ile iletilir.
Ahenk bir görev ya da politika çalıştırmayı denediğinde eğer ilgili eklentiyi bulamazsa MISSING_PLUGIN tipinde bir mesaj gönderir.
Lider'e MISSING_PLUGIN tipinde mesaj eriştiğinde eğer ilgili eklentinin Lider tarafındaki yapılandırma dosyasında bu eklentinin ahenk tarafının deb versiyonuna nasıl erişilebileceği hakkında distro bilgileri tanımlandıysa INSTALL_PLUGIN tipinde bir mesaj döndürür.
###REGISTER (A>>>L)
from: alınmak istenen ejabberd jid.
password: alınacak ejabberd hesabının şifresi.
hostname,ipAddresses,macAddresses makine temel bilgileri..
data: çalışan işletim sistemi, donanım, oturumlar, vs... hakkında genişleyebilir veriler. Bu verilerin miktarı değişebilir ve Lider tarafında gruplandırma vs.. gibi işlemlerde gerekli olabilir.
{
"type":"REGISTER",
"timestamp":"07-06-2016 09:58",
"from":"2559305d-a415-38e7-8498-2dbc458662a7",
"password":"41b6eeb5-1927-459a-b596-3115a40dfade",
"hostname":"volkansahin",
"ipAddresses":"'192.168.1.121', '192.168.56.1'",
"macAddresses":"'74:d4:35:0c:74:2c', '0a:00:27:00:00:00'",
"data":{
"hardware.disk.used":86574,
"hardware.cpu.architecture":"x86_64",
"hardware.disk.partitions":[
["/dev/sda2","/","ext4","rw,errors=remount-ro"],
["/dev/sda1","/boot/efi","vfat","rw"]],
"os.name":"Linux",
"hostname":"volkansahin",
"ipAddresses":"'192.168.1.121', '192.168.56.1'",
"sessions.userNames":["volkan"],
"hardware.cpu.physicalCoreCount":2,
"os.distributionVersion":"17",
"macAddresses":"'74:d4:35:0c:74:2c', '0a:00:27:00:00:00'",
"hardware.memory.total":7112,
"hardware.disk.total":104790,
"os.kernel":"3.13.0-24-generic",
"hardware.disk.free":12869,
"os.architecture":"64bit",
"os.version":"#47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014",
"os.distributionName":"LinuxMint",
"hardware.network.ipAddresses":[
"192.168.1.121",
"192.168.56.1"],
"hardware.cpu.logicalCoreCount":4,
"os.distributionId":"qiana"
}
}
###REGISTRATION_RESPONSE (L>>>A) status: Kayıt işleminin sonucu. (status REGISTERED, REGISTERED_WITHOUT_LDAP, ALREADY_EXISTS, REGISTRATION_ERROR değerlerinden biri olabilir)
message: Kayıt işleminin sonucu (text alan)
agentDn: LDAP kayıtı gerçekleştirdiyse LDAP kaydının DN değeri.
REGISTRATION_ERROR mesajı dönerse Ahenk belli miktarda tekrar REGISTRATION isteği gönderir. Deneme sayısı biterse hata mesajı oluşturup kendisini kapatır.
{"type":"REGISTRATION_RESPONSE",
"status":"ALREADY_EXISTS",
"message":"cn=2559305d-a415-38e7-8498-2dbc458662a7,ou=Uncategorized,dc=mys,dc=pardus,dc=org already exists! Updated its password and database properties with the values submitted.",
"agentDn":"cn=2559305d-a415-38e7-8498-2dbc458662a7,ou=Uncategorized,dc=mys,dc=pardus,dc=org",
"timestamp":1465282735658}
###LOGIN (A>>>L) username: Giriş yapan kullanıcının adı.
{"type": "LOGIN",
"username": "volkan",
"timestamp": "07-06-2016 10:01"}
###LOGOUT (A>>>L) username: Çıkış yapan kullanıcının adı.
{
"type":"LOGOUT",
"username":"volkan",
"timestamp":"07-06-2016 11:11"
}
###GET_POLICIES (A>>>L)
userPolicyVersion: Kayıtlı kullanıcı politikası versiyonu
agentPolicyVersion: Kayıtlı ajan politikası versiyonu
username: İstenilen politikanın sahibi. (aşağıdaki örnekte kayıtlı bir versiyon bulunmadığı için değerler null atanmış)
{
"type":"GET_POLICIES",
"userPolicyVersion":null,
"agentPolicyVersion":null,
"username":"volkan",
"timestamp":"07-06-2016 10:01"
}
###EXECUTE_POLICY (L>>>A) username: Kullanıcı politikasının sahibinin kullanıcı adı.
userPolicyProfiles: Kullanıcı politikasının barındırdığı profillerin içeriği. Json array formatındadır.
userPolicyVersion: Kullanıcı politikasının versiyonu
userCommandExecutionId: Kullanıcı politikasının çalıştırma id'si
agentPolicyVersion: Ajan politikasının versiyonu
agentPolicyProfiles: Ajan politikasının barındırdığı profillerin içeriği. Json array formatındadır.
agentCommandExecutionId: Ajan politikasının çalıştırma id'si
Aşağıdaki örnekte userPolicyProfiles ve userPolicyVersion değerleri null atanmış; çünkü gelen GET_POLICIES mesajındakinden daha gündel bir versiyon bulunmamakta.
userPolicyProfiles ve agentPolicyProfiles aynı formattadırlar ve barındırdıkları profillerde id,çalışacakları plugin hakkında bilgileri, profil adı, tanımı, console'da oluşturulan parametreler (profileData)bulunur.
{
"type":"EXECUTE_POLICY",
"username":"volkan",
"userPolicyProfiles":null,
"userPolicyVersion":null,
"userCommandExecutionId":null,
"agentPolicyVersion":"2701-1",
"agentCommandExecutionId":2454,
"agentPolicyProfiles":[
{
"id":2651,
"plugin":{
"id":1801,
"name":"browser",
"version":"1.0.0",
"description":"Lider Browser Plugin",
"active":true,
"deleted":true,
"machineOriented":false,
"userOriented":true,
"policyPlugin":true,
"xBased":false,
"createDate":1464254239000,
"modifyDate":1465203376000
},
"label":"volkan_t",
"description":"anasayfa",
"overridable":false,
"active":true,
"deleted":false,
"profileData":{
"preferences":[
{
"preferenceName":"extensions.BlockSite.enabled",
"value":"false"
},
{
"preferenceName":"extensions.BlockSite.showWarning",
"value":"false"
},
{
"preferenceName":"extensions.BlockSite.removeLinks",
"value":"false"
},
....
]
},
"createDate":1464263525000,
"modifyDate":null
}
],
"timestamp":1465282879781
}
###EXECUTE_TASK (L>>>A)
task: Çalıştırılacak görev hakkında bilgiler bulunur. Yapısı (user/agent)PolicyProfiles' e benzerdir. Konsoldan gelen parametreler parameterMap'tedir.
{
"type":"EXECUTE_TASK",
"task":{
"id":21856,
"plugin":{
"id":1951,
"name":"network-inventory",
"version":"1.0.0",
"description":"Lider Network Inventory Plugin",
"active":true,
"deleted":false,
"machineOriented":true,
"userOriented":false,
"policyPlugin":false,
"xBased":false,
"createDate":1464254876000,
"modifyDate":1465283994000
},
"commandClsId":"SCANNETWORK",
"parameterMap":{
"timingTemplate":"3",
"ipRange":"192.168.1.100-101",
"executeOnAgent":true
},
"deleted":false,
"cronExpression":null,
"createDate":1465285670481,
"modifyDate":null
},
"timestamp":"07-06-2016 10:47"
}
###POLICY RESPONSE (A>>>L)
policyVersion: Çalıştırılan politika versiyonu
commandExecutionId: Polikanın çalıştırılma id'si
responseMessage: Sonuç mesajı(free text)
responseCode:Politikanın çalıştırılma durumuna göre POLICY_ERROR,POLICY_KILLED,POLICY_PROCESSED,POLICY_RECEIVED,POLICY_TIMEOUT,POLICY_WARNING değerlerini alabilir.
responseData: Varsa politika sonucu döndürülmek istenen data.
contentType: Data'yı tanımlayan tip. Bu tipler şimdilik şunlar olabilir: APPLICATION_MS_WORD,APPLICATION_PDF,APPLICATION_VND_MS_EXCEL,IMAGE_JPEG,IMAGE_PNG,TEXT_HTML,TEXT_PLAIN,APPLICATION_JSON
{
"timestamp":"07-06-2016 03:43",
"type":"POLICY_STATUS",
"policyVersion":"2551-1",
"commandExecutionId":"2502",
"responseMessage":"/opt/thunderbird/thunderbird | Unprivileged | Successful, /opt/firefox/firefox | Privileged | Successful, /usr/bin/kate | Unprivileged | Successful, /usr/bin/gedit | Privileged | Successful, ",
"responseCode":"POLICY_PROCESSED",
"responseData":null,
"contentType":null
}
###TASK RESPONSE (A>>>L)
taskId: Çalıştırılan görevin id'si responseMessage: Sonuç mesajı(free text) responseCode:Görevin çalıştırılma durumuna göre TASK_ERROR,TASK_KILLED,TASK_PROCESSED,TASK_TIMEOUT,TASK_WARNING,TASK_RECEIVED değerlerini alabilir. responseData: Varsa görev sonucu döndürülmek istenen data. contentType: Data'yı tanımlayan tip. Bu tipler şimdilik şunlar olabilir: APPLICATION_MS_WORD,APPLICATION_PDF,APPLICATION_VND_MS_EXCEL,IMAGE_JPEG,IMAGE_PNG,TEXT_HTML,TEXT_PLAIN,APPLICATION_JSON
{
"timestamp":"07-06-2016 03:43",
"type":"POLICY_STATUS",
"taskId":"2502",
"responseMessage":"/opt/thunderbird/thunderbird | Unprivileged | Successful, /opt/firefox/firefox | Privileged | Successful, /usr/bin/kate | Unprivileged | Successful, /usr/bin/gedit | Privileged | Successful, ",
"responseCode":"POLICY_PROCESSED",
"responseData":null,
"contentType":null
}
###MISSING_PLUGIN (A>>>L) pluginName: Eksik ahenk eklentisinin adı. pluginVersion: Eksik ahenk eklentisinin versiyonu.
{
"pluginVersion":"1.0.0",
"type":"MISSING_PLUGIN",
"pluginName":"browser"
}
###INSTALL_PLUGIN (L>>>A) pluginName: Kurulacak Ahenk eklentisinin adı. pluginVersion:Kurulacak Ahenk eklentisinin versiyonu. protocol: Kurma yönteminin protokolu. (ssh,htttp,torrent) parameterMap: Seçilen protokole bağlı parametre isterleri
{
"type":"INSTALL_PLUGIN",
"pluginName":"browser",
"pluginVersion":"1.0.0",
"protocol":"HTTP",
"parameterMap":{
"url":"http://www.liderahenk.org"
},
"timestamp":1465282879968
}
(L>>>A) Liderden Ahenk' e giden mesaj tipleri
(A>>>L) Ahenk'ten Lider'e giden mesaj tipleri