Por que o sudo não precisa de senha quando usado em rc.local?

5

Eu adicionei

sh /home/victor/startupAP.sh

em /etc/rc.local e a startupAP.sh contém a declaração que precisa de sudo :

$ cat startupAP.sh 
#!/bin/bash
sudo hostapd -B /etc/hostapd/hostapd.conf 2>&1 >/home/victor/startupap.log
#sudo ifconfig wlan1 192.168.0.1 netmask 255.255.255.0; sudo dhcpd wlan1 -pf /var/run/dhcp-server/dhcpd.pid; sudo bash -c "echo 1 >/proc/sys/net/ipv4/ip_forward"; sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo ifconfig wlan1 192.168.0.1 netmask 255.255.255.0 2>&1 >>/home/victor/startupap.log
sudo dhcpd wlan1 -pf /var/run/dhcp-server/dhcpd.pid 2>&1 >>/home/victor/startupap.log
sudo bash -c "echo 1 >/proc/sys/net/ipv4/ip_forward" 2>&1 >>/home/victor/startupap.log
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 2>&1 >>/home/victor/startupap.log

Se eu executar este script no terminal, ele precisará de senha,

$ sudo ./startupAP.sh
[sudo] password for victor: 

mas se eu reiniciar, esse script funcionou e funcionou como esperado sem senha, por quê?

    
por Victor S 21.08.2013 / 17:27

1 resposta

6

Como Javier apontou nos comentários, os scripts incluídos em rc.local (e init.d) são executados por root e, em seguida, alguns deles descartam privilégios ou alteram usuários, já que executar serviços com a conta raiz é normalmente um buraco de segurança. Se você quiser que seu script seja executado por root, mesmo ao chamá-los manualmente, você pode usar o SETUID :

sudo chown root /home/victor/startupAP.sh
sudo chmod +s /home/victor/startupAP.sh

Mas lembre-se de que o setuid é ignorado se você usar um shebang .

    
por Braiam 21.08.2013 / 20:21