在Linux或类似Unix的系统上,如何在没有密码的情况下使用sudo命令?
配置步骤
- 备份sudoers文件
sudo cp /etc/sudoers /root/sudoers.bak
- 进入sudoer交互命令
$ visudo
或
$ sudo visudo
- 在
/etc/sudoers
文件中,在名为xiexianbin
的用户添加/编辑以下行,以运行/bin/kill
和systemctl
命令:
xiexianbin ALL=NOPASSWD:/bin/systemctl restart httpd.service,/bin/kill
或
cat >> /etc/sudoers.d/xiexianbin << EOF
xiexianbin ALL = (root) NOPASSWD:ALL
EOF
- 保存退出
测试
运行 /bin/kill
时并不需要输入密码即可杀掉进程:
$ sudo /bin/kill <pid>
重启服务也不需要数据密码
$ sudo /bin/systemctl restart httpd.service
F&Q
sudo must be owned by uid 0 and have the setuid bit set
执行 sudo 命令报错:
$ sudo xxx
sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set
su 登录 root 用户,执行命令
chmod 4755 /usr/bin/sudo
chmod 755 /usr
sudo 执行命令 env 不生效问题
原因:/etc/sudoers
配置了 env_reset
默认重置环境变量(安全原因)
解决方法:参考
方法一:可以修改为 Defaults !env_reset
即可实现不重置环境变量
$ cat /etc/sudoers | grep env_reset
Defaults env_reset
方法二:在 ~/.profile
或 ~/.bashrc
中使用 alias
添加环境变量,重新退出后执行即可生效。示例如下
export ABC="abc"
alias sudo='sudo env ABC=$ABC'