说明:
本文旨在分享记录在 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
以上字段的含义及说明如下表所示:
说明:
- 可以在一行定义多个别名,中间用冒号(:)隔开
- 可在命令或命令别名之前加上感叹号 (!),使该命令或命令别名无效
- 有两个关键词:ALL 和NOPASSWD。ALL 意味着“所有”(所有文件、所有主机或所有命令),NOPASSWD 意味着不用密码
- 通过修改用户访问,将普通用户的访问权限修改为同 root 一样,则可以给普通用户分配特权
- 对于 /etc/sudoers 文件的修改,推荐使用 visudo 命令,能够在保存时检查语法是否有误
/etc/sudoers 文件预先添加了一个用户(root)和一个用户组(wheel):
基于以上知识,可以实现对普通用户各种各样的授权与限制
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 用户
效果演示:
2.2 案例二
目标:授予普通用户执行任何命令的权限
方法一:可以将普通用户加入 wheel 组
方法二:在 /etc/sudoers 文件添加以下内容
user1 ALL=(ALL) ALL
这两种方法的授权结果是有差异的,例如使用 su
命令的权限不同:
将普通用户加入 wheel 组后,在该用户密码强度足够的前提下,该用户可以直接使用 su -
或 su - root
命令切换到 root 用户,而不必使用 sudo su -
或 sudo su - root
命令
直接在 /etc/sudoers 文件中授予普通用户执行所有命令的权限后,该用户并不能直接使用 su -
或 su - root
命令切换到 root 用户,而必须要使用 sudo su -
或 sudo su - root
命令
之所以出现这两种差异,是因为 /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 -i
、sudo -i root
、sudo /bin/bash
等方式切换到 root 用户
效果演示: