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目录。
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!
如果你想像root一样给eff_server这个用户所有权限,只需要像root一样写:
eff_server ALL=(ALL:ALL)ALL
但是这样就没有意义了并且也不安全。
如果给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 root 和 su 这三类操作。
%wheel ALL=(ALL) ALL
centos7默认已经开放 %wheel 这一行,之前的 centos 版本没有启用。
%wheel ALL=(ALL) NOPASSWD:ALL
NOPASSWD: ALL 不输入密码执行任何命令