如何以特定组权限运行应用程序?

如何以特定组权限运行应用程序?

我有一台 3D 打印机,我的电脑可以通过它进行通信/dev/ttyACM0

crw-rw---- 1 root uucp 166,  0 16 nov 14:58 ttyACM0

3D 打印应用程序repetierHost需要对该设备进行读/写访问才能运行。如果我在没有任何准备的情况下“天真地”启动应用程序,则该应用程序将无法运行。

如果我以 root 身份运行该应用程序,它就可以工作。

如果我以(补充)组的普通用户身份运行应用程序uucp,它仍然无法工作。

如果我给出/dev/ttyACM0权限 flagsrw-rw-rw-并使用普通用户运行它,它就可以工作。

(为什么)我通过uucp群组获得的许可没有传递到应用程序?

我不会反对只授予文件rw-rw-rw-权限,但当设备断开连接并重新连接时,这些权限会被重置。如果我无法通过uucp组完成这项工作,我怎样才能使权限标志的更改持久化?

答案1

我会将应用程序组设置repetierHostuucp,然后设置 SGID 位(只要它是真正的二进制文件而不是脚本):

chgrp uucp repetierHost
chmod g+s repetierHost

如果 repetierHost 是一个脚本,您可以考虑将其移至repetierHost.sh并编写一个小型 C 编程包装器repetierHost来调用repetierHost.sh

例如:

#include <stdlib.h>

int 
main(int argc, char *argv[])
{
    system("/path/to/repetierHost.sh");
}

答案2

我找到了sg命令,这似乎正是我所需要的:

新加坡- 以不同的组ID执行命令

所以我只写了一个最小的包装器,如下所示:

#!/bin/bash
sg uucp /usr/bin/repetierHost.sh

这非常有效。

相关内容