特定のグループ権限でアプリケーションを実行するには?

特定のグループ権限でアプリケーションを実行するには?

マイコンピュータが通信できる3Dプリンタがあります/dev/ttyACM0

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

3D印刷アプリケーションをrepetierHost実行するには、デバイスへの読み取り/書き込みアクセス権が必要です。準備なしに「素早く」アプリケーションを実行すると、アプリケーションは実行されません。

アプリケーションをrootとして実行すると機能します。

(セカンダリ) グループの一般ユーザーとしてアプリケーションを実行してもuucp動作しません。

/dev/ttyACM0権限フラグを提供しrw-rw-rw-、通常のユーザーとして実行すると機能します。

(なぜ)uucpグループを介して受け取った権限がアプリケーションに渡されないのですか?

単にファイル権限を付与することに反対するわけではありませんが、rw-rw-rw-デバイスの接続が切断されて再接続されると、その権限はリセットされます。グループでこれを行うことができない場合にuucp権限フラグを永久に変更するにはどうすればよいですか?

答え1

アプリケーショングループrepetierHostをに設定uucpし、SGIDビットを設定します(スクリプトではなく実際のバイナリの場合)。

chgrp uucp repetierHost
chmod g+s repetierHost

RepeatierHostがスクリプトの場合は、それを移動して呼び出すrepetierHost.sh小さなCプログラミングラッパーを作成することを検討できます。repetierHostrepetierHost.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

これは非常にうまく機能します。

関連情報