如何以特定群組權限運行應用程式?

如何以特定群組權限運行應用程式?

我有一台 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

這非常有效。

相關內容