Hum, há uma pequena confusão sobre como o sudo funciona.
O Sudo permite que você se torne root (ou outro usuário) com a finalidade de executar um determinado comando. No entanto, ele não é invocado automaticamente quando você executa o comando apt-get; você precisa executar o sudo:
sudo apt-get install firefox
e não
apt-get install firefox
Caso contrário, você não está invocando o sudo! Você vê, o sudo não é uma coisa do sistema. É apenas um programa regular que funciona sempre com privilégios de root ( suid , em outras palavras).
~$ ls -l 'which sudo'
-rwsr-xr-x 2 root root 127668 2013-02-27 21:41 /usr/bin/sudo*
Veja esta estrela e o "s" nas permissões? É isso que significa - quem quer que execute sudo, o sudo é executado com as permissões de root; como se o root tivesse começado. E então ele olha em volta, vê que é você quem o executa, procura o arquivo sudoers e diz: tudo bem, você tem permissão para executar o apt-get como root, deixe-me executá-lo para você. E invoca apt-get
com permissões de raiz, que tem o mesmo efeito de se a raiz executou isso.
Se você não usa sudo, apenas digite
apt-get install firefox
Em seguida, apt-get
é executado como usuário comum e, naturalmente, não tem permissão para tocar nos arquivos que só podem ser abertos para gravação por root. Isso ocorre porque o apt-get não é um programa suado; ele é executado com a permissão desse usuário que o iniciou.
Programas Suid são perigosos, porque se houver algum erro no programa, ele poderá ser usado para escalonar os privilégios de um usuário não autorizado. É por isso que apenas um programa ( sudo
) existe para esses propósitos específicos.
Bem. Sobre essa coisa de senha: use a diretiva NOPASSWD
no arquivo sudoers (use visudo
para editá-la) e execute o comando com sudo
. Aqui está a entrada apropriada para o seu arquivo sudoers:
yourusername ALL = NOPASSWD: /path/to/the/program
Dessa forma, invocando
sudo /path/to/the/program
não precisará digitar uma senha e você poderá executá-la a partir de um script ou do cron.