PHP Laravel NGINX html css Bootstrap Python Symfony Apache Windows linux jquery Django ASP vanilla Slim vagrant docker Homestead MySQL Redis Git SVN ssh Root vim PhpStorm Pycharm sass less PHP Laravel android html css Vue Angular React NGINX html css Javascript

Ubuntu及CentOS系统修改Sudoers文件

原创

原创不易 ~ 转载请注明出处哦

Linux及类Unix系统下,用户权限的分别是该类系统下确保安全性的重要环节。普通用户拥有受限的权限,以限制他们在属于自己的环境范围内的操作带来的影响。

但是有一个特殊的用户,称为root,拥有“超级用户”特权。该用户拥有全局的管理权限,而非像普通用户一样受限。

本文会介绍如何如何正确安全地获取root权限,我们的注意力将会着重于修改/etc/sudoers文件。

文中的操作步骤都在Ubuntu 16.04服务器中进行,但是绝大多数现代Linux操作系统也可以使用相似的方式进行操作。


如何获取Root权限?

我们有三种基本的方法来获取Root权限,每一种的复杂性都不尽相同。

1. 以Root用户登录

最简单最直接的方法就是直接使用root用户名登录服务器:

$ ssh root@server_public_ip

如果你没有使用SSH key,那么在提示输入用户密码时,直接输入root密码即可。

2. 使用su转换成root用户

使用root用户登录是不推荐的,因为我们很容易就会开始对系统进行非管理性操作,这是有风险隐患的。

那么下面这种获取超级用户权限的办法让我们可以从任意用户切换到root用户。

我们只需要键入以下命令:

$ su

注意了,su命令不是super user的缩写,而是substitute user,即替换用户。

系统会提示我们输入root用户的密码,输入正确后我们将会切换到root身份。当我们完成了需要root权限的操作后,我们可以返回之前用户的shell

$ exit

3. 使用sudo执行Root权限命令

最后一种,也是最复杂的获取root权限的方法就是使用sudo这个命令。

sudo命令让我们可以使用root权限执行一次命令:

$ sudo command_to_execute

其中command_to_execute是我们想执行的命令。
使用sudo命令,我们需要输入当前用户的密码,而非像使用su时,输入root用户密码。

显而易见,sudo权限并不是默认给到普通用户的,我们需要经过一些设置才可以使用sudo


下面我们就来看一下要进行什么样的配置我们才可以使用sudo命令。(以下命令我们都是以root权限执行)

sudo的配置在/etc/sudoers文件里。如果要修改这个文件,我们很可能会输入下面的命令:

$ sudo vim /etc/sudoers

注意:千万不要使用普通的编辑命令来修改sudoers文件。由于该文件的特殊性,错误的语法将导致你无法在系统里获取提升权限。正确的修改方式是使用visudo命令。

visudo命令将打开一个文字编辑器,但是在保存文件的时候,将会验证sudoers文件的语法。这将防止你配置错误导致sudo命令受阻。

现在我们来看一下sudoers文件的具体内容:

$ sudo visudo

Ubuntu系统下,以上命令会使用nano打开/etc/sudoers文件:

#    
# This file MUST be edited with the 'visudo' command as root.    
#    
# Please consider adding local content in /etc/sudoers.d/ instead of    
# directly modifying this file.    
#    
# See the man page for details on how to write a sudoers file.    
#    
Defaults        env_reset    
Defaults        mail_badpass    
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"    
   
# Host alias specification    
   
# User alias specification    
   
# Cmnd alias specification    
   
# User privilege specification    
root    ALL=(ALL:ALL) ALL    
   
# Members of the admin group may gain root privileges    
%admin ALL=(ALL) ALL    
   
# Allow members of group sudo to execute any command    
%sudo   ALL=(ALL:ALL) ALL    
   
# See sudoers(5) for more information on "#include" directives:    
   
#includedir /etc/sudoers.d

其中我们主要关注的是以下这段配置:

# User privilege specification    
root    ALL=(ALL:ALL) ALL    
   
# Members of the admin group may gain root privileges    
%admin ALL=(ALL) ALL    
   
# Allow members of group sudo to execute any command    
%sudo   ALL=(ALL:ALL) ALL

我们来解读一下这些权限的配置:

  • root ALL=(ALL:ALL) ALL
    第一个字段代表这条规则适用的用户(这里是root

  • root ALL=(ALL:ALL) ALL
    第一个ALL代表这条规则适用于所有的主机(例如localhost100.100.188.125),即用户无论从哪里登录都可以。

  • root ALL=(ALL:ALL) ALL
    这个ALL代表root用户可以以任何用户的身份运行命令。

  • root ALL=(ALL:ALL) ALL
    这个ALL代表root用户可以以任何group身份运行命令。

  • root ALL=(ALL:ALL) ALL
    最后一个ALL代表这些规则适用于所有命令。

所以,root ALL=(ALL:ALL) ALL表示root用户可以使用sudo运行任何命令。

接下来我们看到

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

这两行与之前的用户权限规则类似,不过它们为groups指定了sudo规则。

%开头的名称表示的是组别名。

这里我们看到sudo用户组的规则是ALL=(ALL:ALL) ALL,即sudo组中的用户可以运行任何命令。


那么究竟如何给予一个用户sudo权限呢?

其实答案已经出来了,那就是将该用户添加至sudo分组中。

Ubuntu系统下,我们可以输入命令:

$ sudo usermod -aG sudo username

其中username我们用相应的用户名替换。

CentOS下,wheel组代替了sudo组,所以我们将用户添加至wheel组中:

$ sudo usermod -aG wheel username

注意:在CentOS下,请留意wheel组是否被注释,如果被注释,请将注释去掉:

%wheel ALL=(ALL) ALL

完成后,我们保存退出。现在返回到我们想要给予权限的用户,测试一下sudo命令:

$ sudo visudo

输入用户密码后,如果编辑器打开,那么我们就已经成功地给予了用户sudo权限了。


正在加载验证码......
请先完成验证