Raspberry pi 特权分离集gid程序
说到我的观点,我需要解释一下上下文: 我有一个守护进程,可以打开posix mq进行通信。客户端与守护进程位于同一组中,以便与之通信。客户端还打开posix mq并订阅守护进程。为了能够通信,客户机mq必须具有守护进程可以应答的相同组 到目前为止还不错,我设置了客户机set gid(chmod g+s client)。在基于Qt的桌面(LXQT)上,客户端按预期启动和工作。在基于gtk+的桌面(raspberry pi上的名称LXDE)上,它无法启动,因为gtk+阻止一组uid/gid程序使用它的库 因此,我将Raspberry pi 特权分离集gid程序,raspberry-pi,fork,posix,message-queue,daemon,Raspberry Pi,Fork,Posix,Message Queue,Daemon,说到我的观点,我需要解释一下上下文: 我有一个守护进程,可以打开posix mq进行通信。客户端与守护进程位于同一组中,以便与之通信。客户端还打开posix mq并订阅守护进程。为了能够通信,客户机mq必须具有守护进程可以应答的相同组 到目前为止还不错,我设置了客户机set gid(chmod g+s client)。在基于Qt的桌面(LXQT)上,客户端按预期启动和工作。在基于gtk+的桌面(raspberry pi上的名称LXDE)上,它无法启动,因为gtk+阻止一组uid/gid程序使用它
mq_open()
的创建提取到一个设置为gid(chmod g+s)的外部可执行文件中,并将setegid()
用于保存的集gid。
客户端创建一个socketpair()
,fork()
,execve()
,并通过socketpair(AF\u UNIX/SOCK\u流)将fd发送到客户端
我需要满足的要求:
SIGCHLD
和kill()
,wait()
。我只想对socketpair()执行readmsg()
,如果mq opener因任何原因死亡,则会得到一个错误。只是不为SIGCHLD写信号处理程序fork()
过程和与mq opener的连接相当大。有没有更简单的方法fork()
并断开与父级的父/子连接?父/子关系在什么时候终止 +-----------+ +------------+
|Daemon | |Client |
+-----------+ +------------+
|File | |File |
|User | |User |
|mqdaemon | |pi |
| | | |
|Group | |Group |
|mqdaemon | |pi |
| | | |
|Rights | +------------+ |Rights |
|a-s | |mq-opener | |a-s |
+-----------+ +------------+ +------------+
|Process | |File | |Process |
|User | |User | |User |
|mqdaemon | |mq-opener | |pi |
| | | | | |
|Group | |Group | |Group |
|mqclients | |mqclients | |pi |
+----+------+ | | +--+---------+
^ | |Rights | | ^
| | |g+s | | |
| | | | | |
| | +------------+ | |
| | fork() |Process | fork() | |
| +------------>|User |<---------+ |
| |(forked) | |
| send_fd() | | send_fd() |
+---------------+|Group |+------------+
|mqclients |
+------------+
+------------++------------+
|守护程序| |客户端|
+-----------+ +------------+
|文件| |文件|
|用户| |用户|
|mqdaemon | | pi|
| | | |
|组| |组|
|mqdaemon | | pi|
| | | |
|权利|+-------------+|权利|
|a-s | | mq开启器| | a-s|
+-----------+ +------------+ +------------+
|进程| |文件| |进程|
|用户| |用户| |用户|
|mqdaemon | | mq opener | | pi|
| | | | | |
|组| |组| |组|
|mqclients | | mqclients | pi|
+----+------+ | | +--+---------+
^| |权利| |^
|| | g+s | ||
| | | | | |
| | +------------+ | |
|| fork()| Process | fork()||
|+------------->|用户|