文章目录
- 前言
- 权限控制
- 合理的使用组
- 一些优化
- 参考
前言
在linux中,我们可以使用chmod
+ chown
来控制一个用户对某个文件的权限。简单的说就是某一个用户是否对某一个文件/文件夹有读/写/执行的权限。
但如果我就是想编辑或执行其他用户的文件怎么办(贱贱的感觉)
这时候可以使用sudo
命令
sudo ⇒ substitute user do 译为:代替某个用户去做。 语法sudo -u user
一般而言,我们都是替代root去做一些事情,所以-u
参数可以省略,即默认就是root
权限控制
前文提到,如果任意就去代替某个用户做某些事就太危险了,那还要文件权限控制干什么。所以,sudo有自己的权限控制系统,其实都维护在了/etc/sudoers
文件中。
就是箭头指出的那个文件,但可以看到,这个文件是只读的。你可以通过chmod
去改变权限,等修改完再改回来。但更优雅的方式是直接在命令行输入visudo
。
visudo ⇒ vi sudo 即使用vi
编辑sudoers的文件
使用以上命令便可以对这个文件进行编辑,这个文件大部分都是注释,我复制出来一部分我们会用到的关键配置
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
sudo权限配置是有语法规则的,如下:
root
ALL=(ALL:ALL) ALL
第一字段指出当前规则要适用于哪一个用户
root ALL
=(ALL:ALL) ALL
第一个ALL指明了当前规则要适用于哪一个主机,ALL就是所有主机。
root ALL=(ALL
:ALL) ALL
第二个ALL指出了root用户可以替代所有用户执行命令
root ALL=(ALL:ALL
) ALL
第三个ALL指出了可以替代所有组执行命令
root ALL=(ALL:ALL) ALL
最后一个ALL字段代表可以运行哪些命令,此处ALL即可以运行所有命令
总结来说:哪个用户可以替代哪些其他用户(组)执行哪些命令。
针对上面那句话就是root用户可以替代任意用户执行任意命令所以他的权限就是无限制的。
合理的使用组
根据上面的知识,我们可以将一个用户添加配置为类似root的用户,这样就可以使用sudo执行任意命令
# 让小明可以以sudo执行任意命令
root ALL=(ALL:ALL) ALL
xiaoming ALL=(ALL:ALL) ALL
但其实这不是很优雅,因为不希望每添加一个类似的账户就要到这里来配置。实际上Linux已经帮你想到了,所以他提供了一个用户组,这个组的名称可能在不同的linux发行版是不一样的,在centos中该组名称为wheel
,也就是我上面贴出的文中中的这一部分:
## Allows people in group wheel to run all commands : 允许改组的所有人替代任意人(主要是root)执行任意命令
%wheel ALL=(ALL) ALL
显然有了这句话,我们只需要将一个用户添加到wheel
这个组即可
# 对于新增用户
$ useradd xiaoming -g wheel
# 对于老用户
$ usermod -aG wheel xiaoming
之后便可以放肆的使用sudo
命令了
一些优化
在我上边粘贴出来的代码中,实际还有两个注意的点,分别说一下
- 指明使用su的时候可以不输入密码
## 取消下面一行的注释即可
# %wheel ALL=(ALL) NOPASSWD: ALL
- 在/etc/sudoers.d内编辑的文件同样生效,这样可以避免你直接修改sudoers文件。很多linux下的配置文件都是这样的。比如
etc/profile.d
或者nginx/conf.d
。
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment) 注意无须取消下面一行的注释。本身就是生效的。
#includedir /etc/sudoers.d