Установите разрешения программы во время выполненияLinux

Ответить
Anonymous
 Установите разрешения программы во время выполнения

Сообщение Anonymous »

Я пытаюсь использовать модуль ядра Linux для аппаратного управления моим Raspberry Pi. Это довольно тривиальный код пользовательского уровня, но реализация некоторых функций в виде модуля ядра — необходимое академическое упражнение. Модуль ядра отправляет сигнал SIGIO коду пользовательского уровня при нажатии кнопки, который выводится на динамик, подключенный к макетной плате с помощью aplay. aplay подключается к серверу PulseAudio, который (справедливо) отказывается подключаться от имени пользователя root. Как мне сообщить моей программе, что я хочу запустить эту строку кода как обычный пользователь?
Это приблизительный скелет, основанный на коде уровня пользователя, а не на модуле ядра.< /p>

Код: Выделить всё

/* various includes */

void main() {
// stuff that requires sudo perms
fd = open("/dev/manager", O_WRONLY);

/* setup signal_handler() to handle signal from fd [omitted] */

close(fd);
}

void signal_handler(int signo) {
// None of this needs to be run with sudo privilege, and malfunctions if so
setgid(1000); setuid(1000);        // see https://stackoverflow.com/questions/3357737/dropping-root-privileges
setenv("HOME", "/home/raspi", 1);  // aplay uses $HOME, which was /root and inaccessible

/* generate output.wav [omitted] */
system("aplay /path/to/file/output.wav");
}
Вот минимальная компилируемая версия кода песочницы, чтобы вы могли лучше воспроизвести проблему самостоятельно. Он воспроизводится при запуске от имени обычного пользователя, но не от имени sudo. Если я смогу запустить приведенный ниже пример как sudo, исправить приведенный выше код станет несложно.

Код: Выделить всё

#include 
#include 
#include 

void main() {
setgid(1000);
setuid(1000);
setenv("HOME", "/home/raspi", 1);
system("aplay /path/to/file/output.wav");
}
Я даже не привязан к бедру, чтобы играть. Если кто-нибудь может дать мне какой-нибудь минимальный рабочий пример воспроизведения звука из программы на C при запуске от имени sudo с использованием любой имеющейся у вас аудиоутилиты, я был бы рад его увидеть.
Вопросы по теме:
[1] Удаление root-прав — это почти ответ на мой вопрос. Это должно ответить на мой вопрос. Когда я попробовал, это просто не сработало.
[2] Проблемы с разрешением sudo в программе на языке C — я знаю, что здесь требует sudo, а что нет. Что мне неясно, так это то, как переключаться с одного на другое во время выполнения.

Подробнее здесь: https://stackoverflow.com/questions/783 ... at-runtime
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»