Решение было так же просто как вызов tar в файле спецификации и затем определении пути, к которому я хотел к untar.
Безопасный путь состоит в том, чтобы, вероятно, использовать sudo
на строках Вашего сценария тот вызов sixad
и rfkill
(Я принимаю оба полномочия пользователя root потребности). Затем настройте sudoers, чтобы позволить тем командам быть выполненными без пароля пользователем или группой, которая, как предполагается, запускает скрипт.
Можно установить флаг setuid на сценарий и владельца набора для укоренения (или лучше, кто-то, у кого есть полномочия, в которых Вы нуждаетесь). Флаг setuid означает, что, когда скрипт запущен любым, кто может выполнить его, UID процесса установлен на своего владельца.
Например, можно было владеть сценарием joe с флагом setuid на, поэтому когда alice выполняет его, сам сценарий имеет полномочия joe (так же, как если бы Joe выполнил его, даже если он не вошел в систему прямо сейчас).
IIUC Вы хотите выполнить это под сервером HTTP. Я не уверен, относится ли это к каждому серверу, но по крайней мере Apache на Debian откажется запускать setuid'd скрипт. Это позволит только двоичный исполняемый файл. Я решил это путем создания простой обертки в C, который будет exec()
сценарий с помощью трудно кодированного пути.
Однако я определенно постарался бы не выполнять что-либо как корень удаленно: намного более безопасный путь состоит в том, чтобы создать специального пользователя только для определенной задачи, не имея больше полномочий, чем необходимый, и использовать вышеупомянутую технику. (Я не уверен, но это могло бы означать, что часть о Apache не будет applu - это могло бы относиться к сценариям корня только.)
В основном, как Вы присваиваетесь, полномочия путем создания пользовательского члена определенной группы. Много дистрибутивов создают определенные для устройства группы (как "CD-ROM", "факс"...) для Вас. Посмотрите, если существует группа "Bluetooth" в Вашей системе; если существует, создайте нового пользователя и сделайте его членом той группы.