web-dev-qa-db-ja.com

Ubuntu Touch開発:apparmor-template = unconfinedによるDBus接続?

Ubuntu Touch C++アプリケーションを介してDBusメッセージを送信しようとしています。 Apparmorファイルのデフォルトテンプレート(unconfinedでエラーなし)を構成すると、アプリケーションは返信として次のエラーを受け取ります。

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

私の質問:Ubuntuのレビューでアップロードパッケージが拒否される場合でも(おそらく手動でレビューする場合でも)、unconfinedの値でApparmorテンプレートを構成する必要がありますか?または、Ubuntu Touchクリックパッケージ用の独自のテンプレートを作成する方法はありますか?

2
tecsurf

ご回答有難うございます。これは私がやったことです。見る manifest.json.in

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

したがって、Ubuntu TouchアプリケーションでBQ電話をミュートするには、次の方法が機能しましたが、セキュリティテンプレートを制限されていないものとして指定することによってのみ機能しました。

  1. パルスオーディオコマンドを起動:

    [...]
    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. 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)));
    

私の考えでは、DBusメッセージを送信するための特定のテンプレート(「広い」制限のないテンプレート以外)を用意するほうがよいでしょう。または、独自のセキュリティテンプレートを定義することは可能ですか?

1
Peter Sasse