Dando poderes de root para executar determinados programas

A ferramenta ideal para isto é o sudo. Através dela é possível permitir um usuário comum executar um comando como root e registrar quando isto foi feito. É possível selecionar os usuários/grupos que terão acesso e quais aplicativos que poderão ser usados, estas configurações são feitas no arquivo /etc/sudoers.

Por exemplo, para o usuário "john" usar o comando shutdown para desligar o computador: sudo shutdown -h now.

O sudo é um programa muito completo, tomaria muitos Kilobytes neste guia. Recomendo dar uma lida na página de manual para entender como as variáveis do arquivo de configuração funcionam. Mesmo assim aqui vai um exemplo simples deste arquivo para iniciar rapidamente o uso do sudo:

# arquivo sudoers.
#
# Edite este arquivo com o comando 'visudo' como root 
# 
#

# Especificação de máquinas. O primeiro campo (Host_Alias) diz que a variável 
# LOCALSERVER será um nome/endereço de máquina
Host_Alias	LOCALSERVER=192.168.0.1

# Especificação de usuários. O primeiro campo (User_Alias) diz que a variável
# NETMASTERS armazenará nomes de usuários
User_Alias	NETMASTERS=gleydson, goodboy

# Comandos. O primeiro campo (Cmnd_Alias) diz que a variável 
# C_REDE contém comandos do sistema. Mais de um parâmetro
# deve ser separado por vírgulas
Cmnd_Alias	C_REDE=/sbin/ipchains, /sbin/iptables

# Padrões que se aplicam aos usuários da variável NETMASTERS. O parâmetro
# mail_always sempre envia um e-mail ao root avisando sobre o uso do 
# sudo
Defaults:NETMASTERS	mail_always

# As linha que começam com o nome de usuário ou variável "User_Alias" 
# definem o acesso aos recursos. O primeiro campo é o usuário, o segundo
# o endereço de acesso (opcionalmente seguido de um sinal "=" para 
# especificar opções adicionais) o terceiro o comando ou lista de comandos
#
# O usuário root não tem restrições
root	ALL=(ALL) ALL

# Permite que os usuários especificados na variável NETMASTERS 
# acessando dos locais em LOCALSERVER utilizem os comandos 
# em C_REDE (sem fornecer senha). 
NETMASTERS	LOCALSERVER=NOPASSWD: C_REDE

Edite este arquivo com o comando visudo, ele faz algumas checagens para detectar problemas de configuração. Para listar os comandos disponíveis para o usuário no sudo, utilize a opção -l, ex: sudo -l.