Linux下给普通用户部分执行权限添加为root权限

583 阅读2分钟

1/背景

我们使用Linux系统时候会提示Access denied,或者提示You need to be root to perform this command。
这是由于当前用户的权限不够,这也是为了安全考虑。
一般我们的做法可能就是在执行命令前添加sudo来短暂获取到root权限来执行命令,
但是有些时候我们完全可以将该命令放开到普通用户,此次文章将以普通用户登陆mysql命令来说明。

2/sudoers和sudoers.d

首先我们来认识下/etc 目录下的sudoers和sudoers.d
其中sudoers是一个readonly文件,操作权限是root,
sudoers.d是一个目录,操作权限也是root,进入sudoers.d目录查看,里面默认就放着一个README文件,并且是root权限的readonly文件。
我们使用cat命令可以查看一下sudoers文件内容可以发现最先面有一个被注释的一行指向了sudoers.d目录。

image.png image.png

3/sudoers文件的作用

sudoers文件是用来控制用户的sudo权限的。

比如说,我以root身份安装了mysql服务,我现在在eff_server用户上。
我现在登陆mysql,mysql -u root -p,提示没有权限去执行mysql命令。
接下来我们将mysql这条命令赋予当前用户eff_server

首先使用vi命令修改sudoers文件,sudo vi /etc/sudoers,进入编辑模式
然后在root用户下添加一条: eff_server ALL=(root) /usr/local/mysql/bin/mysql,
如下图
意思就是给eff_server这个用户的mysql命令赋予root权限
强制保存退出 :wq!

image.png

如果你想像root一样给eff_server这个用户所有权限,只需要像root一样写:
   eff_server ALL=(ALL:ALLALL
但是这样就没有意义了并且也不安全。
如果给eff_server放开多个命令权限直接在后面添加,以逗号隔开。

再次以eff_server普通用户的的身份登陆mysql直接就可以:mysql -u root -p 
然后输入密码登陆就OK了。

4/

/etc sudoers 文件默认给 root 用户定义了一条规则
root ALL=(ALL) ALL
root  表示 root 用户。
ALL  表示从任何的主机上都可以执行,也可以这样 192.168.100.0/24 。
(ALL)  是以谁的身份来执行, ALL就代表root可以以任何人的身份来执行命令。
ALL   表示任何命令。

那么整条规则就是:
      root 用户可以在任何主机以任何人的身份来执行所有的命令。
      
举个例子
eff_server 192.168.10.0/24=(root) / usr sbin useradd

上面的配置只允许eff_server这个用户,在 192.168.10.0/24 网段上连接主机并且以 root身份权限执行 useradd 命令。
www ALL=(root) NOPASSWD:ALL,!/usr / passwd [A Za z]*,!/ usr / passwd root,!/bin/ su
允许www 用户执行所有命令,除了 passwd 后加任意字符、 passwd rootsu 这三类操作。
%wheel ALL=(ALL) ALL
centos7默认已经开放 %wheel 这一行,之前的 centos 版本没有启用。
%wheel ALL=(ALL) NOPASSWD:ALL
NOPASSWD: ALL 不输入密码执行任何命令