openEuler 操作系统用户权限管理——sudo 权限的授予与限制案例

openEuler 操作系统用户权限管理——sudo 权限的授予与限制案例

闫志聪
2024-08-12 / 0 评论 / 325 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年08月12日,已超过283天没有更新,若内容或图片失效,请留言反馈。

sudo.png

说明:

本文旨在分享记录在 openEuler 操作系统中,如何对普通用户进行权限授予与限制

所有操作演示基于 openEuler 22.03 LTS SP1 版本

汇总多种权限授予与限制的案例

1 sudo 权限

本节内容摘自官方文档:管理用户和用户组 (openeuler.org)

使用 sudo 命令可以允许普通用户执行管理员帐户才能执行的命令

sudo 命令允许已经在 /etc/sudoers 文件中指定的用户运行管理员帐户命令。例如,一个已经获得许可的普通用户可以运行如下命令:

sudo /usr/sbin/useradd newuserl

/etc/sudoers 的配置行如下所示:

  • 空行或注释行(以 # 字符打头):无具体功能的行
  • 可选的主机别名行:用来创建主机列表的简称。必须以 Host_Alias 关键词开头,列表中的主机必须用逗号(,)隔开,如:
Host_Alias     FILESERVERS = fs1, fs2
  • 可选的用户别名行:用来创建用户列表的简称。用户别名行必须以 User_Alias 关键词开头,列表中的用户名必须以逗号(,)隔开。其格式同主机别名行:
User_Alias ADMINS = jsmith, mikem
  • 可选的命令别名行:用来创建命令列表的简称。必须以 Cmnd_Alias 开头,列表中的命令必须用逗号(,)隔开:
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
  • 可选的运行方式别名行:用来创建用户列表的简称。不同的是,使用这样的别名可以告诉 sudo 程序以列表中某一用户的身份来运行程序
  • 必要的用户访问说明行:
user    host=[ run as user ]    command list

以上字段的含义及说明如下表所示:

字段含义说明
user要授予 sudo 权限的用户指定一个真正的用户名或定义过的别名
host该用户可以在哪个主机上执行命令指定一个真正的主机名或者定义过的主机别名
run as user该用户以什么身份执行命令默认情况下,sudo 执行的所有命令都是以 root 身份执行
command list该用户可以执行哪些命令可以是以逗号(,)分隔的命令列表,也可以是一个已经定义过的别名

说明:

  • 可以在一行定义多个别名,中间用冒号 (:) 隔开
  • 可在命令或命令别名之前加上感叹号 (!),使该命令或命令别名无效
  • 有两个关键词:ALL 和NOPASSWD。ALL 意味着“所有”(所有文件、所有主机或所有命令),NOPASSWD 意味着不用密码
  • 通过修改用户访问,将普通用户的访问权限修改为同 root 一样,则可以给普通用户分配特权
  • 对于 /etc/sudoers 文件的修改,推荐使用 visudo 命令,能够在保存时检查语法是否有误

/etc/sudoers 文件预先添加了一个用户(root)和一个用户组(wheel):

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

基于以上知识,可以实现对普通用户各种各样的授权与限制

2 案例汇总

2.1 案例一

目标:授予普通用户创建用户,并修改用户密码的权限,但是禁止该用户修改 root 用户密码

在 /etc/sudoers 文件中添加以下内容:

user1    ALL=(ALL)    /usr/sbin/useradd, /usr/bin/passwd, !/usr/bin/passwd "", !/usr/bin/passwd root

配置说明:

/usr/bin/useradd :允许 user1 用户执行 useradd USER 命令创建普通用户

/usr/bin/passwd :允许 user1 用户执行 passwd USER 命令修改用户密码

!/usr/bin/passwd root :禁止 user1 用户执行 passwd root 命令修改 root 用户密码

!/usr/bin/passwd "" :禁止 user1 用户执行 passwd 命令修改 root 用户密码,因为 passwd 命令后边为空则默认为 root 用户

效果演示:

image-20240328155810366

2.2 案例二

目标:授予普通用户执行任何命令的权限

方法一:可以将普通用户加入 wheel 组

$ usermod -a -G wheel user1

$ id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1),10(wheel)

方法二:在 /etc/sudoers 文件添加以下内容

user1    ALL=(ALL)    ALL

这两种方法的授权结果是有差异的,例如使用 su 命令的权限不同:

将普通用户加入 wheel 组后,在该用户密码强度足够的前提下,该用户可以直接使用 su -su - root 命令切换到 root 用户,而不必使用 sudo su -sudo su - root 命令

image-20240328142425304

直接在 /etc/sudoers 文件中授予普通用户执行所有命令的权限后,该用户并不能直接使用 su -su - root 命令切换到 root 用户,而必须要使用 sudo su -sudo su - root 命令

image-20240328144739876

之所以出现这两种差异,是因为 /etc/pam.d/su 文件中有以下配置:

auth            required        pam_wheel.so use_uid

这一行配置的意思是:只允许只允许 root 用户和 wheel 群组的帐户使用 su 命令,限制其他帐户使用。openEuler 默认开启此配置,因此导致普通用户即使拥有执行所有命令的权限,也不能使用 su 命令

2.3 案例三

目标:授予普通用户执行任何命令的权限,但是禁止该用户切换到 root 用户

在 /etc/sudoers 文件中添加以下内容:

user1    ALL=(ALL)    ALL, !/usr/bin/su - root, !/usr/bin/su - , !/usr/bin/bash

配置说明:

ALL :允许 user1 用户执行所有命令

!/usr/bin/su - root :禁止 user1 用户执行 sudo su - root 命令切换到 root 用户

!/usr/bin/su - :禁止 user1 用户执行 sudo su - 命令切换到 root 用户,因为 su - 命令后边为空则默认为 root 用户

!/usr/bin/bash :禁止 user1 用户执行 sudo -isudo -i rootsudo /bin/bash 等方式切换到 root 用户

效果演示:

image-20240328154957224

0

评论

博主关闭了当前页面的评论