web-dev-qa-db-fra.com

Développement Ubuntu Touch: connexion DBus via apparmor-template = non confiné?

J'essaie d'envoyer des messages DBus via l'application Ubuntu Touch C++. Avec la configuration du modèle par défaut (pas d'erreur avec unconfined) pour le fichier Apparmor, mon application reçoit l'erreur suivante comme réponse:

QDBusMessage(type=Error, service="", error name="org.freedesktop.DBus.Error.AccessDenied", error message="An AppArmor policy prevents this sender from sending this message to this recipient, 0 matched rules; type="method_call", sender=":1.278" (uid=32011 pid=28575 comm="/usr/lib/arm-linux-gnueabihf/qt5/bin/qmlscene $@ s") interface="org.bluez.Manager" member="DefaultAdapter" error name="(unset)" requested_reply="0" destination="org.bluez" (uid=0 pid=824 comm="/usr/sbin/bluetoothd ")", signature="", contents=([]) )

phablet@ubuntu-phablet:/etc/apparmor.d$ aa-easyprof  --policy-vendor=ubuntu --policy-version=1.2 --list-templates
default
ubuntu-Push-helper
ubuntu-scope-network
ubuntu-sdk
ubuntu-webapp
unconfined

Ma question: dois-je configurer le modèle Apparmor avec la valeur unconfined même si la révision Ubuntu rejettera le package de téléchargement (et fera probablement une révision manuelle)? Ou existe-t-il un moyen de créer un propre modèle pour les packages de clic Ubuntu Touch?

2
tecsurf

Merci pour votre réponse. C'est ce que j'ai fait. Voir manifest.json.in:

{
    "policy_groups": [
        "networking"
    ],
    "policy_version": 1.2,
    "template": "unconfined"
}

Ainsi, les méthodes suivantes ont fonctionné pour moi pour désactiver le téléphone BQ par n'importe quelle application Ubuntu Touch, mais uniquement en spécifiant le modèle de sécurité comme non confiné.

  1. Lancer la commande audio Pulse:

    [...]
    myProcess = new QProcess(this);
    connect (myProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(printOutput()));
    connect (myProcess, SIGNAL(readyReadStandardError()), this, SLOT(printError()));
    QString cmd("/usr/bin/pactl");
    QStringList arguments;
    arguments.append(QString("set-sink-mute"));
    arguments.append(QString("0"));
    arguments.append(QString(muted?"1":"0"));
    myProcess->start(QString(cmd), arguments);
    
  2. Envoyer un message DBus:

    QDBusInterface handlerPropertiesInterface("org.freedesktop.Accounts", "/org/freedesktop/Accounts/User32011", "org.freedesktop.DBus.Properties", QDBusConnection::systemBus());
    handlerPropertiesInterface.call("Set", "com.ubuntu.touch.AccountsService.Sound", "SilentMode", QVariant::fromValue(QDBusVariant(muted)));
    

À mon avis, il serait préférable d'avoir un modèle spécifique pour l'envoi de messages DBus (autre qu'un modèle non confiné "large"), non? Ou est-il possible de définir ses propres modèles de sécurité?

1
Peter Sasse