Linux Dbus中的ACL策略

D-Bus 是 Linux 系统中的一种通信机制,用于在进程之间进行通信。D-Bus 配置文件则是一种用于配置 D-Bus 的文件,其中包含有关系统总线 (system bus),会话总线 (session bus) 和各种系统服务的详细信息。 本文将解析 D-Bus 配置文件,侧重点则为权限的配置 配置文件的基本结构 D-Bus 配置文件使用 XML 格式进行编写,具有以下基本结构: xml 1 2 3 4 5 6 7 8 9 10 11 12 <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/D-Bus/1.0/busconfig.dtd"> <busconfig> <policy group="wheel"> <!-- policy rules go here --> </policy> <policy context="default"> <!-- policy rules go here --> </policy> <include filename="other-config.xml"/> <listen>unix:path=/var/run/D-Bus/system_bus_socket</listen> </busconfig> 什么是D-Bus Policy? D-Bus Policy是D-Bus配置文件中最重要的字段之一,用于定义D-Bus服务的访问控制策略。D-Bus Policy包含了一组规则,用于限制D-Bus服务的使用者对D-Bus服务的访问,确保D-Bus服务的安全性。...

 ·  · 

Linux高级IPC - DBus

What is IPC IPC [Inter-Process Communication] 进程间通信,指至少两个进程或线程间传送数据或信号的一些技术或方法。在Linux/Unix中,提供了许多IPC。Unix七大IPC: Pipe:无名管道,最基本的IPC,单向通信,仅在父/子进程之间,也就是将一个程序的输出直接交给另一个程序的输入。常见使用为 ps -ef|grep xxx FIFO [(First in, First out)] 或 有名管道(named pipe):与Pipe不同,FIFO可以让两个不相关的进程可以使用FIFO。单向。 Socket 和 Unix Domain Socket:socket和Unix套接字,双向。适用于网络通信,但也可以在本地使用。适用于不同的协议。 消息队列 Message Queue: SysV 消息队列、POSIX 消息队列。 Signal: 信号,是发送到正在运行的进程通知以触发其事件的特定行为,是IPC的一种有限形式。 Semaphore:信号量,通常用于IPC或同一进程内的线程间通信。他们之间使用队列进行消息传递、控制或内容的传递。(常见SysV 信号量、POSIX 信号量) Shared memory:(常见SysV 共享内存、POSIX 共享内存)。共享内存,是在进程(程序)之间传递数据的有效方式,目的是在其之间提供通信。 每种IPC都有不通的特点,每种方式对资源的使用及性能都是不通的 管道 I/O是最快的,但为单向通信,需要工作在 父/子 进程关系之间。 UNIX 套接字可以在本地连接不同的进程,并且具有更高的带宽,并且没有固有的消息边界。 TCP/IP套接字可以连接任何进程。并且可以通过网络连接,但是对资源会有更多的开销,同样的没有固定的消息边界。 Reference comparsion Unix/Linux IPC What is D-Bus 提到,D-Bus就不能不提一下freedesktop,而 D-Bus 仅仅作为freedesktop.org的一部分。 D-Bus 桌面总线 (Desktop Bus),的简写,也是Linux- IPC机制,不同于Unix 7大基础IPC的是,D-Bus是在这些IPC类型之上实现的中间件IPC,D-Bus使用了基础IPC中一种过多种,其设计的目的是在Linux桌面环境,提供服务的标准化。但目前并没有合入主线内核中。 作为中间件IPC,D-Bus的性能较低与其他IPC模式,因为在通信过程中会进行很多上下文切换,如果通过Dbus来发送消息,会先将其发送到内核,然后将其送回D-Bus。AF_BUS 补丁是新的套接字类型,用来减少D-Bus上下文的切换。 更多可参考:https://en.wikipedia.org/wiki/D-Bus D-Bus组成 D-Bus是 一个IPC的实现方式,在架构上分位三层。 Layer 1 libdbus:freedesktop机构提供的一个免费开源的一个由C语言编写的 low-level API 。是提供dbus功能的库。是高级API绑定的低级API。 Layer 2 dbus daemon:dbus实现的IPC守护进行,随Linux启动,通过不通进程对其的连接,实现了多进程间消息的路由(包含内核、网络、桌面等) Layer 3 Wapper libraries (high-level API): 对 low-level API libdbus的封装 ,例如 libdbus-qt libdbus-python github....

 ·  · 

使用firewalld dbus接口配置iptables

firewalld,一个基于动态区的iptables/nftables守护程序,自2009年左右开始开发,CentOS7基于 firewalld-0.6.3 , 发布于2018年10月11日。主要的开发人员是托马斯·沃纳,他目前为红帽公司工作。这是因为为Federal 18 的默认防火墙机制, 随后在 Rhel7 和 Centos 7 中使用。 firewalld比旧的 iptable 机制有许多优势。值得注意的是,它解决了 iptable 要求每次更改时重新启动防火墙的问题,从而中断了任何状态连接。它还提供了丰富的 D-Bus 方法、信号和属性。 这里并不是从firewalld操作使用方式来介绍firewalld的改名,想反,是介绍firewalld D-Bus API来检索信息或更改设置。 firewalld被配置为系统 D-Bus 服务,注意看 systemd file中的" Type=dbus “参数。 text 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 $ cat /usr/lib/systemd/system/firewalld.service [Unit] Description=firewalld - dynamic firewall daemon Before=network-pre.target Wants=network-pre.target After=dbus.service After=polkit.service Conflicts=iptables.service ip6tables.service ebtables.service ipset....

 ·  · 

通俗易懂的dbus数据结构

DBus中也是类似于静态语言,使用了“强类型”数据格式。在DBus上传递的所有数据都需要声明其对应的类型,下面整理了下,DBus中的数据类型,以及在DBus中声明的数据类型是什么意思。 dbus类型 说明 s string 字符串类型,可以声明 s: a array 数组,可以声明为 a: v variant,variant:: () 结构体,声明时为双括号中间的为类型,可以是多个,例如(ss) 即这个结构体内包含两个字符串属性 b 布尔值 SIGNATURE signature类型 y BYTE d DOUBLE t UINT64 x INT64 u UINT32 i INT32 q uint16 n INT16 {} 词典,这里声明为两个括号,中间为其对应的 key value,例如 {sv} 即 key是字符串类型,value是variant类型。 o OBJECT_PATH 对象路径 a{sv} : 是一个数组,为 一个键值对的词典,里面仅有一个 (ssssa{ss}as) 为一个结构体, 里面属性有7个 两个词典(数组),五个字符串类型 (sssbsasa(ss)asba(ssss)asasasasa(ss)b) 这个类型拆开为下:共16个属性 text 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ( s string s string s string b bool s string as array only one string a(ss) two string type in the array as array only one string b bool a(ssss) four string type in the array as array only one string as array only one string as array only one string as array only one string a(ss) two string type in the array b bool ) 对上述类型,python中就可以很灵活的声明...

 ·  · 

Linux dbus命令行套件

D-Bus是Linux使用的进程间通信机制,允许各个进程互相访问,而不需要为每个其他组件实现自定义代码。即使对于系统管理员来说,这也是一个相当深奥的主题,但它确实有助于解释linux的另一部分是如何工作的。 这里主要介绍 dbus-send 与 GDbus cli工具,其他的还有QtDbus , d-feet… 命令行工具dbus-send ,是freedesktoop提供的dbus包配套的命令客户端工具,可用于发送dbus消息。 GDbus GLib实现的dbus工具。较与 dbus-send,拥有更完整的功能。 d-feet: 可以处理所有D-Bus服务的GUI应用程序。 dbus-send dbus有两种消息总线 (message bus):system bus 和 session bus,通过使用 --system和 --session 选项来通过dbus-send 向系统总线或会话总线发送消息。如果两者都未指定,默认为**session bus*. 借此,顺道聊下 system bus 和 session bus: System Bus: 在桌面上,为所有用户提供一条总线. 专用于系统服务。 有关于低级时间,例如 网络连接,USB设备。 在嵌入式Linux系统中,system bus是唯一D-Bus类型。 Session Bus: 每个用户会话一个实例 为用户应用提供那个桌面服务。 连接到 X-session 参数选项 参数 说明 --dest=NAME 这个是必选的参数,指定要接收消息的接口名称。例如 org.freedesktop.ExampleName --print-reply 打印回复消息 --print-reply=literal 如选项一样,打印回复正文。如有特殊字符,如对象或 object 则按字面打印,没有标点符号、转义字符等。 --reply-timeout= 可选参数,等待回复的超时时长,单位为 毫秒。 --system --session --type=method_call signal 必须始终指定要发送的消息的对象路径和名称。以下参数(如果有)是消息内容(消息参数)。这些值作为类型指定的值给出,可能包括如下所述的容器(数组、dict和变体)。 支持参数 dbus-send 发送的消息,在调用方法需要传参数时,必须将这些值给出。dbus-send 支持传入的参数的类型,并不为D-Bus支持的所有的数据类型,仅为一些简单的类型:如...

 ·  ·