Intereting Posts
Diff, действующий очень странно, сообщает, что длинные блоки удалены, когда короткие биты по всему блоку были изменены, удалены или добавлены Какая программа сохранит заполняемый PDF-файл? Добавление метки времени в файл журнала? Как узнать, какой интерфейс я использую для подключения к Интернету? dag.repo переписан Ошибка: TCA_HTB_PAD не объявлен при создании ядра Как найти размер резидентной памяти процесса в busybox? Игнорировать изменения пробелов во всех командах git Извлечение некоторых файлов из папки и создание списка этих файлов Как я могу игнорировать функции энергосбережения KDE для определенных программ? Обращайтесь с несколькими источниками звука в качестве одного виртуального микрофона После удаления ошибки linux Grub VirtualBox 5.1 не запускается на Kali Linux 2016.2 Не удается записать на внутренний раздел HDD NTFS в Parrot OS SSH-Keygen -i Fails: uudecode не удалось. Что может вызвать это?

Как запустить приложение с определенными групповыми разрешениями?

У меня есть 3D-принтер, с которым мой компьютер может общаться через /dev/ttyACM0 :

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

Для использования функции repetierHost 3D-печати требуется доступ на чтение и запись для этого устройства. Если я «наивно» запускаю приложение без какой-либо подготовки, приложение не работает.

Если я запускаю приложение как root, он работает.

Если я запускаю приложение как обычный пользователь с (дополнительной) группой uucp , он все равно не работает.

Если я дам /dev/ttyACM0 флаги разрешения rw-rw-rw- и запустим его с моим обычным пользователем, он будет работать.

(Почему) мое разрешение через группу uucp не переходит к приложению?

Я бы не возражал против предоставления файлов rw-rw-rw- разрешений, но они сбрасываются, когда устройство отключено и повторно подключено. Если я не могу выполнить эту работу через группу uucp , как я могу вместо этого внести изменения в флаги разрешений?

Я бы установил группу приложения repetierHost на uucp а затем установил бит SGID (пока он является реальным двоичным, а не скриптом):

 chgrp uucp repetierHost chmod g+s repetierHost 

Если repetierHost – это скрипт, вы можете подумать о том, чтобы repetierHost.sh в repetierHost.sh и написать небольшую C-оболочку программирования repetierHost которая вызывает repetierHost.sh

Например:

 #include <stdlib.h> int main(int argc, char *argv[]) { system("/path/to/repetierHost.sh"); } 

Я нашел команду sg , которая, кажется, именно то, что мне нужно:

sg – выполнить команду как другой идентификатор группы

Поэтому я просто пишу минимальную упаковку следующим образом:

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

Это прекрасно работает.