polkit
++++++
Polkit, Linux sistemlerinde yetkilendirme ve erişim kontrolü sağlayan bir altyapıdır. Polkit kuralları, belirli kullanıcıların veya kullanıcı gruplarının belirli işlemleri gerçekleştirmesine izin vermek veya engellemek için kullanılır.
Polkit kurallarını eklemek için aşağıdaki adımları izleyebilirsiniz:
Polkit kurallarının bulunduğu dizine gidin. Genellikle **/etc/polkit-1/rules.d/** ve **/usr/share/polkit-1/rules.d/** dizininde bulunur.
Bir metin düzenleyici kullanarak yeni bir dosya oluşturun veya mevcut bir dosyayı düzenleyin. Dosya adı, genellikle **XX-name.rules** formatında
olmalıdır. Burada XX, kuralların uygulanma sırasını belirten bir sayıdır ve name ise dosyanın açıklamasını temsil eder.
Dosyaya aşağıdaki gibi bir polkit kuralı ekleyin:
.. code-block:: shell
polkit.addRule(function(action, subject) {
if (action.id == "org.example.customaction" && subject.user == "username") {
return polkit.Result.YES;
}
});
Yukarıdaki örnekte, **org.example.customaction** adlı bir eylem için **username** kullanıcısına izin veriliyor. Bu kuralı ihtiyaçlarınıza göre düzenleyebilirsiniz.
Dosyayı kaydedin ve düzenlediğiniz kuralların etkili olması için Polkit servisini yeniden başlatın. Bu işlem için aşağıdaki komutu kullanabilirsiniz:
.. code-block:: shell
sudo systemctl restart polkit
Artık polkit kurallarınız etkinleştirilmiş olmalı ve belirlediğiniz yetkilendirmeler uygulanmalıdır.
Polkit kuralları, sistem yöneticilerinin belirli işlemleri kontrol etmesine ve kullanıcıların erişimini yönetmesine olanak tanır. Bu sayede sistem güvenliği ve yetkilendirme düzeyi daha iyi kontrol edilebilir.
Tüm Uygulamalarda İzin Verme
----------------------------
.. code-block:: shell
polkit.addRule(function(action, subject) {
return polkit.Result.YES;
});
Bir Gruba İzin Verme
--------------------
.. code-block:: shell
polkit.addRule(function(action, subject) {
if (subject.isInGroup("test")) {
return polkit.Result.YES;
}
});
Bir Grub-User-Uygulamaya İzin Verme
-----------------------------------
.. code-block:: shell
polkit.addRule(
function(action,subject)
{
if ( (action.id == "org.freedesktop.policykit.exec") &&
(action.lookup("user") == "root") &&
(action.lookup("program") == "/path/to/script") &&
(subject.isInGroup("someGroup") ) )
return polkit.Result.YES;
return polkit.Result.NOT_HANDLED;
}
);
Örnek Uygulama1
---------------
Bu örnekte /usr/bin/betikyukleyici ikili uygulamasını root yetkisisyle çalıştımak için aşağıdaki işlem adımları yapılır.
Policy Oluşturma
^^^^^^^^^^^^^^^^
/usr/share/polkit-1/action dizinine betikyuleyici.policy dosyası oluşturulur ve aşağıdaki kodlar içerisi eklenir ve kaydedilir.
.. code-block:: shell
Bu uygulamayı çalıştırmak için izin gereklidir.
auth_admin
auth_admin
auth_admin
/usr/bin/betikyukleyici
true
allow_any ayarları:
...................
Bu ayarların her biri için aşağıdaki seçenekler mevcuttur:
no : Kullanıcının işlemi gerçekleştirme yetkisi yoktur. Bu nedenle kimlik doğrulamaya gerek yoktur.
yes : Kullanıcı herhangi bir kimlik doğrulaması olmadan işlemi gerçekleştirme yetkisine sahiptir.
auth_self : Kimlik doğrulama gereklidir ancak kullanıcının yönetici kullanıcı olması gerekmez.
auth_admin : Yönetici kullanıcı olarak kimlik doğrulaması gerekiyor.
auth_self_keep : auth_self ile aynıdır ancak sudo gibi yetkilendirme birkaç dakika sürer.
auth_admin_keep : auth_admin ile aynıdır ancak sudo gibi yetkilendirme birkaç dakika sürer.
rules Oluşturma
^^^^^^^^^^^^^^^
/usr/share/polkit-1/rules.d dizinine betikyuleyici.rules dosyası oluşturulur ve aşağıdaki kodlar içerisi eklenir ve kaydedilir.
.. code-block:: shell
polkit.addRule(function(action, subject) {
if (action.id == "com.example.betikyukleyici") {
return polkit.Result.YES;
}
});
Çalıştırılması
^^^^^^^^^^^^^^
.. code-block:: shell
sudo systemctl restart polkit
pkexec /usr/bin/betikyukleyici
Örnek Uygulama2
---------------
Bu örnekte /usr/bin/test.py python scriptinin root yetkisisyle çalıştımak için aşağıdaki işlem adımları yapılır.
.. code-block:: shell
#!/usr/bin/pkexec /usr/bin/python3
# test.py
import os
def main():
print("Bu bir Polkit ile çalıştırılan Python dosyasıdır.")
os.system("mkdir /test") # Kökte test adında dizin oluşturur
if __name__ == "__main__":
main()
Policy Oluşturma
^^^^^^^^^^^^^^^^
/usr/share/polkit-1/action dizinine test.policy dosyası oluşturulur ve aşağıdaki kodlar içerisi eklenir ve kaydedilir.
.. code-block:: shell
Bu scripti çalıştırmak için yetki gereklidir.
auth_admin
auth_admin
< allow_active>auth_admin
/test.py
true
allow_any ayarları:
...................
Bu ayarların her biri için aşağıdaki seçenekler mevcuttur:
no : Kullanıcının işlemi gerçekleştirme yetkisi yoktur. Bu nedenle kimlik doğrulamaya gerek yoktur.
yes : Kullanıcı herhangi bir kimlik doğrulaması olmadan işlemi gerçekleştirme yetkisine sahiptir.
auth_self : Kimlik doğrulama gereklidir ancak kullanıcının yönetici kullanıcı olması gerekmez.
auth_admin : Yönetici kullanıcı olarak kimlik doğrulaması gerekiyor.
auth_self_keep : auth_self ile aynıdır ancak sudo gibi yetkilendirme birkaç dakika sürer.
auth_admin_keep : auth_admin ile aynıdır ancak sudo gibi yetkilendirme birkaç dakika sürer.
rules Oluşturma
^^^^^^^^^^^^^^^
/usr/share/polkit-1/rules.d dizinine test.rules dosyası oluşturulur ve aşağıdaki kodlar içerisi eklenir ve kaydedilir.
.. code-block:: shell
polkit.addRule(function(action, subject) {
if (action.id == "org.example.test") {
return polkit.Result.YES;
}
});
Çalıştırılması
^^^^^^^^^^^^^^
.. code-block:: shell
sudo systemctl restart polkit
pkexec /usr/bin/test.py
.. raw:: pdf
PageBreak