为什么在 rc.local 中使用 sudo 不需要密码?

为什么在 rc.local 中使用 sudo 不需要密码?

我已经添加了

sh /home/victor/startupAP.sh

进入/etc/rc.localstartupAP.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: 

但是如果我重新启动,该脚本就会运行并按预期工作,无需密码,为什么?

答案1

正如 Javier 在评论中指出的那样,rc.local(和 init.d)中包含的脚本由 root 运行root,然后其中一些会放弃权限或更改用户,因为使用 root 帐户运行服务通常是一个安全漏洞。如果您希望脚本即使在手动调用时也由 root 运行,您可以使用设置用户识别码

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

但请记住如果你使用 shebang,setuid 将被忽略

相关内容