为什么在rc.local中使用sudo时不需要密码?
我已经添加了
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:
但如果我重新启动,这个脚本运行并按预期工作,没有密码,为什么?
正如Javier在评论中指出的那样,rc.local(和init.d)中包含的脚本由root
运行,然后其中一些删除权限或更改用户,因为使用root帐户运行服务通常是一个安全漏洞。 如果您希望您的脚本在root用户运行时即使手动调用它们,也可以使用SETUID :
sudo chown root /home/victor/startupAP.sh sudo chmod +s /home/victor/startupAP.sh
但请记住, 如果使用shebang,则会忽略setuid 。