特定のグループ権限でアプリケーションを実行するにはどうすればよいですか?

特定のグループ権限でアプリケーションを実行するにはどうすればよいですか?

私は 3D プリンターを持っており、PC は次の方法でプリンターと通信できます/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

repetierHostがスクリプトである場合は、それを移動して、呼び出す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

これは完璧に動作します。

関連情報