
我有一台 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
我會將應用程式群組設定repetierHost
為uucp
,然後設定 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
這非常有效。