Огромное приложение должно в одно конкретное время выполнить небольшое количество операций записи в файл, для которого требуются права суперпользователя. На самом деле это не файл, а аппаратный интерфейс, который представлен Linux как файл.
Чтобы избежать предоставления привилегий root всему приложению, я написал скрипт bash, который выполняет критические задачи. Например, следующий скрипт включит порт 17 аппаратного интерфейса в качестве вывода:
echo "17" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio17/direction
Однако, поскольку suid
в моей системе отключены скрипты bash, мне интересно, каков наилучший способ добиться этого.
Используйте некоторые обходные пути, представленные здесь
Вызовите сценарий
sudo
из основного приложения и измените список sudoers соответствующим образом, чтобы избежать вызова пароля при вызове сценария. Мне немного неудобно давать привилегии sudoecho
.Просто напишите программу на C
fprintf
и установите для нее suid root. Жестко закодируйте строки и имена файлов и убедитесь, что только root может их редактировать. Или прочитайте строки из текстового файла, убедившись, что никто не может редактировать файл.Какое-то другое решение, которое мне не пришло в голову и является более безопасным или более простым, чем представленное выше?