sudo使用小技巧

写在前面

有时好久没更新。日常摆烂。本来想这个月更新(反正我已经默认月更了)一篇 Xbox Series S 的评测的,但是由于种种原因,还没受到货,所以就写点别的吧。


前天开始我把自己的两台电脑都刷成了Linux系统,开始正式以Linux作为主要的操作系统使用了。


作为一个Linux小白,同时由于我手头上设备都比较奇葩(一台陈年Macbook Air,一台用AMD APU的惠普笔电)所以我选择了兼容性好且对于普通用户而言相对友好的Ubuntu作为电脑的操作系统。同时,在惠普的笔电上,我还保留了(其实是重新刷入了)Windows系统,以备不时之需。


作为一个懒狗,不能接受普通用户在使用例如aptdocker等命令前需要加sudo并且输入密码,所以就有了这次小小的折腾。

sudo的简单介绍

sudo命令的含义其实就是superuser do,从字面意思上看我们就能知道,它的作用是通过安全的方式让用户提权使用特殊的权限执行程序。

而就像我上面提到的,如果想要使用sudo(Ubuntu)默认创建的用户,那么需要输入自己的密码才能提权,这还挺麻烦的。

此时我们就可以通过修改配置文件,让用户免密使用sudo,具体的配置文件以及配置文件夹有二:配置文件sudoers(位置在/etc/sudoers)和配置文件夹sudoers.d(位置在/etc/sudoers.d/)
通过修改或者添加自定义的配置就可以实现免密登陆。

sudoers配置应该怎么写

先来看看两个范例:

xianyu ALL=(root:root) NOPASSWD: /usr/bin/apt

以上配置的含义为:授权用户xianyu所有主机上,以用户root、组root的身份不需要密码直接执行/usr/bin/apt

%admin ALL=(ALL:admin) NOPASSWD: /usr/bin/docker,/usr/bin/tree

以上配置的含义为:授权用户组xianyu的用户在所有主机上,以所有用户身份,以组admin的身份不需要密码直接执行/usr/bin/docker/usr/bin/tree

解析

从上面的例子我们就可以知道格式为:

#用户的格式:
用户名 主机名或组=(提权后的用户名:提权后的用户组) NOPASSWD: 命令
用户名 主机名或组=(提权后的用户名:提权后的用户组) 命令


#用户组的格式:
%用户组 主机名或组=(提权后的用户名:提权后的用户组) NOPASSWD: 命令
%用户组 主机名或组=(提权后的用户名:提权后的用户组) 命令

命令可以在同一行写很多个。
可以在配置文件中写好主机列表、命令列表、用户列表、身份列表方便使用。
例如:

#主机列表
Host_Alias HOST_LIST=hostname1,hostname2,hostname3

#命令列表
Cmnd_Alias COMMAND_LIST=/usr/bin/apt,/usr/bin/docker

#用户列表
User_Alias USER_LIST=xianyu,yuxian,admin

#以什么身份运行
Runas_Alias RUNAS_LIST=root,adm

接着就可以直接引用了,比如

USER_LIST HOST_LIST=(RUNAS_LIST) COMMAND_LIST
USER_LIST HOST_LIST=(RUNAS_LIST) NOPASSWD: COMMAND_LIST

我将怎么用

首先当然是写sudoers配置文件。但是!由于Linux发行版的差异,需要修改的地方不一样,例如,Debian可以直接在配置文件sudoers中添加配置,而Ubuntu发行版需要进入sudoer.d文件夹中,新建一个文件,并将配置写入其中。我平时常用的有四个命令:aptapt-getdockersnap,所以我需要让普通用户免密使用以上命令,以下是我的配置文件内容:

#配置文件路径为/etc/sudoers.d/xianyu
xianyu ALL=(ALL:ALL) NOPASSWD: /usr/bin/apt,/usr/bin/apt-get,/usr/bin/docker,/usr/bin/snap

然后,我除了嫌输密码麻烦外,多打一个sudo也挺麻烦的。所以为了进一步减少工作量,接下去需要修改用户主目录下的.bashrc

什么是bashrc

Linux下默认使用的shell程序是bash.bashrc是用户登陆时会首先运行的文件(其实就是个shell脚本),所以我们只需要用alias命令将相关的规则写进.bashrc就可以一劳永逸了。

怎么用

上面我提到了四个命令,所以要在文件中添加四条

alias apt='sudo apt'
alias apt-get='sudo apt'
alias docker='sudo docker'
alias snap='sudo snap'

保存并退出文件,注销用户后重新登陆就能使用了。
alias命令的含义就是让等号前的等同于等号后的命令,所以在之后我以普通用户执行这些命令,不再需要加sudo输密码了。


sudo使用小技巧
https://blog.xianyu.one/2022/03/20/Linux/tutorial/sudoers/
作者
咸鱼
发布于
2022年3月20日
许可协议