前提:有root权限
本质是修改/etc/sudoers
文件,但直接编辑这个文件容易改错造成系统异常,因此一般使用sudo visudo
命令修改,这个命令保存时会检查文件格式,该命令会使用默认文本编辑器把/etc/sudoers
读到一个临时文件/etc/sudoers.tmp
中,保存时再写入/etc/sudoers
临时切换默认文本编辑器
个人还是更熟悉vim,默认文本编辑器一般是nano,要设置成vim要设置环境变量
export VISUAL="vim"
export EDITOR="VISUAL"
执行
sudo -E visudo
此时必须使用-E,-E会读取用户的环境变量,否则visudo还是使用nano
修改sudoers文件
配置sudo免密
执行sudo -E visudo ,此时将用vim打开/etc/sudoers ,文件默认内容如下
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
因为我是个人使用,用户属于sudo用户组(查看自己的用户组执行groups
命令),直接将sudo用户组设为不需要密码就行了,即第24行改为
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
保存退出后,正常使用sudo执行具有root权限的命令就不需要密码了
这种修改方式会令sudo用户组的用户都能免密获得root权限,个人用户无所谓,如果要指定某个用户免密,就添加一行只给这个用户免密
soda ALL=(ALL:ALL) NOPASSWD:ALL
soda就是这里指定的用户名,可以替换为实际的用户名
设置默认文本编辑器
经过前面的设置,默认编辑器暂时切换到vim,但下次登录再执行sudo -E visudo
还是变回默认的nano编辑器,要永久生效有以下几种方法:
- 直接卸载nano,比较直接,没了nano,就只剩vim了,卸载命令
sudo apt remove --purge nano
- 把环境变量添加到
~/.bashrc
用户环境变量文件中,这种情况下如果nano没有卸载执行visudo必须用-E选项,这个选项会读取设置的环境变量 - 直接把默认文本编辑器用
sudo -E visudo
设置到/etc/sudoers
,一劳永逸,在文件顶部Defaults配置添加一行把设置editor把vim的全路径写上保存,此时环境变量就不用管了:
Defaults editor="/usr/bin/vim"
如果使用的是vim编辑器,/etc/sudoers
文件会有高亮提示,如editor写成了editors则高亮消失,更容易发现编辑错误
参考
- vim - 在visudo时更改默认编辑器