Почему sudo не нужен пароль при использовании в rc.local?

Я добавил

sh /home/victor/startupAP.sh

в /etc/rc.local, и startupAP.sh содержит оператор, который нуждается в 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

Если я запускаю этот скрипт в терминале, ему нужен пароль,

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

, но если я перезагружаюсь, этот скрипт запускается и работает, как и ожидалось, без пароля, почему?

5
задан 13 October 2014 в 20:35

1 ответ

Как отметил Хавьер в комментариях, скрипты, включенные в rc.local (и init.d), запускаются root, а затем некоторые из них отбрасывают привилегии или меняют пользователей, так как запуск служб с учетной записью root обычно дыра в безопасности. Если вы хотите, чтобы ваш скрипт выполнялся пользователем root, даже при вызове их вручную, вы можете использовать SETUID :

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

Но помните, что setuid игнорируется, если вы используете shebang .

0
ответ дан 13 October 2014 в 20:35

Другие вопросы по тегам:

Похожие вопросы: