Wie führe ich eine Anwendung mit bestimmten Gruppenberechtigungen aus?

Wie führe ich eine Anwendung mit bestimmten Gruppenberechtigungen aus?

Ich habe einen 3D-Drucker, mit dem mein PC über folgende Kanäle kommunizieren kann /dev/ttyACM0:

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

Die 3D-Druckanwendung repetierHostbenötigt Lese-/Schreibzugriff auf dieses Gerät, um zu funktionieren. Wenn ich die Anwendung „naiv“ ohne jegliche Vorbereitung starte, funktioniert die Anwendung nicht.

Wenn ich die Anwendung als Root ausführe, funktioniert es.

Wenn ich die Anwendung als normaler Benutzer mit (zusätzlicher) Gruppe ausführe uucp, funktioniert es immer noch nicht.

Wenn ich /dev/ttyACM0die Berechtigungsflags gebe rw-rw-rw-und es mit meinem normalen Benutzer ausführe, funktioniert es.

(Warum) wird meine Zustimmung aus der uucpGruppe nicht an die Anwendung weitergegeben?

Ich hätte nichts dagegen, einfach die Dateiberechtigungen zu erteilen rw-rw-rw-, aber diese werden zurückgesetzt, wenn das Gerät getrennt und wieder verbunden wird. Wenn ich das nicht über die Gruppe hinbekomme uucp, wie kann ich dann stattdessen die Änderung der Berechtigungsflags dauerhaft machen?

Antwort1

Ich würde die Gruppe der repetierHostAnwendung festlegen uucpund dann das SGID-Bit setzen (solange es eine echte Binärdatei und kein Skript ist):

chgrp uucp repetierHost
chmod g+s repetierHost

Wenn der RepetierHost ein Skript ist, könnten Sie erwägen, es dorthin zu verschieben repetierHost.shund einen kleinen C-Programmier-Wrapper zu schreiben, repetierHostder aufruftrepetierHost.sh

Z.B:

#include <stdlib.h>

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

Antwort2

ich fand diesgBefehl, der genau das zu sein scheint, was ich brauchte:

sg- Befehl als andere Gruppen-ID ausführen

Also schreibe ich einfach einen minimalen Wrapper wie folgt:

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

Das funktioniert perfekt.

verwandte Informationen