将用户加入sudoers后仍需密码的Ubuntu 16.04问题求助
搞定Ubuntu 16.04的sudo免密与开机自动执行命令问题
嘿,我来帮你解决这两个头疼的问题!先理清楚:一是用户aman加了sudoers但执行命令还需要密码,二是想让WiFi修复命令开机自动跑且不用输密码。咱们一步步来:
一、修复sudo仍需输入密码的问题
首先要敲黑板:绝对别直接用普通编辑器改/etc/sudoers,一定要用visudo命令,它会自动检查语法,防止你把系统搞崩(我见过不少人直接改sudoers导致连sudo都用不了的情况)。
- 打开sudoers配置文件:
sudo visudo - 拉到文件末尾,根据你的需求加一行配置:
- 要是想让aman执行所有sudo命令都免密,就加:
aman ALL=(ALL) NOPASSWD: ALL - 要是只想免密执行那台特定的WiFi修复命令(比如你的命令路径是
/usr/local/bin/fix-wifi.sh,记得换成你实际的命令路径),就加:aman ALL=(ALL) NOPASSWD: /usr/local/bin/fix-wifi.sh
- 要是想让aman执行所有sudo命令都免密,就加:
- 保存退出(visudo默认用nano编辑器,按
Ctrl+O保存,回车确认文件名,再按Ctrl+X退出)。 - 打开新终端测试一下:执行
sudo 你的命令,应该不用输密码了。
如果之前你已经直接编辑过sudoers,可能存在语法错误,用这个命令检查:
sudo visudo -c
如果输出/etc/sudoers: parsed OK就没问题,否则跟着提示修改错误就行。
二、让WiFi修复命令开机自动执行且免密
这里推荐用systemd服务,比老旧的rc.local更可靠(Ubuntu16.04已经全面支持systemd了):
第一步:创建systemd服务文件
sudo nano /etc/systemd/system/wifi-fix.service
把下面的内容粘进去,记得替换/usr/local/bin/fix-wifi.sh为你实际的WiFi修复命令路径:
[Unit] Description=自动执行WiFi修复命令 After=network.target # 确保网络服务启动后再执行 [Service] User=aman # 用aman用户执行 ExecStart=/usr/bin/sudo /usr/local/bin/fix-wifi.sh # 因为已经配置了免密,所以sudo不会要密码 Restart=no # 执行一次就够,不用重启 [Install] WantedBy=multi-user.target # 多用户模式下启动
第二步:启用并测试服务
sudo systemctl enable wifi-fix.service # 设置开机自启 sudo systemctl start wifi-fix.service # 立即执行一次,测试是否正常
要是执行start后没有报错,说明命令能正常跑。
验证效果
- 先手动测试:
sudo /usr/local/bin/fix-wifi.sh,确认不用输密码。 - 重启系统后,检查WiFi问题是否解决,或者用这个命令看服务状态:
sudo systemctl status wifi-fix.service
如果显示active (exited)且没有红色错误信息,说明开机时已经成功执行了命令。
如果你偏爱用rc.local的方式(Ubuntu16.04默认rc.local可能没启用),也可以这么做:
- 先启用rc.local服务:
sudo systemctl enable rc-local.service - 编辑
/etc/rc.local,在exit 0这一行之前添加:sudo -u aman /usr/local/bin/fix-wifi.sh
同样,前提是你已经在sudoers里配置了aman免密执行这个命令。
内容的提问来源于stack exchange,提问作者Anand Suthar
相关产品推荐
相关产品推荐

