关于sudoers用户权限控制的一些理解,白话叙述,浅显易懂。

前言

在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

参考

https://www.digitalocean.com/community/tutorials/how-to-edit-the-sudoers-file

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值