
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 repetierHost
benö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/ttyACM0
die Berechtigungsflags gebe rw-rw-rw-
und es mit meinem normalen Benutzer ausführe, funktioniert es.
(Warum) wird meine Zustimmung aus der uucp
Gruppe 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 repetierHost
Anwendung festlegen uucp
und 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.sh
und einen kleinen C-Programmier-Wrapper zu schreiben, repetierHost
der aufruftrepetierHost.sh
Z.B:
#include <stdlib.h>
int
main(int argc, char *argv[])
{
system("/path/to/repetierHost.sh");
}
Antwort2
ich fand diesg
Befehl, 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.