Você pode definir o setuid sinalizador para o script e definir o proprietário para a raiz (ou melhor, alguém que tenha permissões necessárias ). O sinalizador setuid significa que quando o script é executado por qualquer pessoa que possa executá-lo, o UID do processo é definido como seu proprietário.
Por exemplo, você pode ter um script de propriedade de joe , com sinalizador setuid ativado, então quando alice o executa, o próprio script tem privilégios de joe (como se Joe o executasse, mesmo que ele não esteja logado agora).
IIUC você quer rodar isto sob um servidor HTTP. Não tenho certeza se isso se aplica a todos os servidores, mas pelo menos o Apache no Debian se recusará a executar o script setuid'd. Permitirá apenas o executável binário. Eu resolvi isso criando um wrapper simples em C, que seria exec()
do script usando caminho codificado.
No entanto, eu definitivamente tentaria evitar executar qualquer coisa como root remotamente: uma maneira muito mais segura é criar um usuário especial apenas para a tarefa específica, não tendo nenhum mais privilégios do que o necessário, e use a técnica acima. (Não tenho certeza, mas isso pode significar que a parte sobre o Apache não será aplicada - pode se aplicar apenas aos scripts do root).
Basicamente, como você atribui privilégios é tornando membro do usuário de determinado grupo. Muitas distribuições criam grupos específicos de dispositivos (como "cdrom", "fax" ...) para você. Veja se existe um grupo "bluetooth" no seu sistema; se houver, crie um novo usuário e torne-o membro desse grupo.