Eu tenho um programa que escrevi e ele acessa hardware (arquivos de dispositivo) e requer permissões de root para ser executado. Gostaria que este programa fosse executável por um usuário não privilegiado, sem a necessidade de senha de root. Eu tentei modificar as permissões com a sudo chmod u+s programName
reinicialização, mas o programa então o programa não será executado comsudo ./programName
Lembro-me de fazer isso, há 12 anos, mas não consigo descobrir agora. Alguma dica?
Se você definir o proprietário do arquivo executável do seu programa
root
come, em seguida, defina seu bit setuid com
então você não precisa reiniciar depois nem usar
sudo
. Iniciar o programa normalmente pelo nome irá executá-lo com privilégios de root. No entanto, isso permitirá que qualquer usuário execute o programa com privilégios de root, portanto, você deve ter certeza de que o programou de forma que não possa ser abusado para executar outras ações além das pretendidas com privilégios de root.O primeiro passo é essencial. A função do bit setuid é fazer com que o programa seja executado com o UID do proprietário do arquivo. Se esse proprietário não for
root
, o programa não terá privilégios de root, mesmo se você executá-lo comsudo
, já que o bit setuid substitui o efeito desudo
.Portanto , execute seu programa com
sudo
ou defina o bit setuid comchmod u+s
, mas não ambos.NB: Em vez de executar seu programa com privilégio de root, pode ser melhor definir as permissões dos arquivos do dispositivo que ele acessa para permitir que o usuário regular que o executa o acesso necessário.