2023-05-24    2023-12-18    6539 字  14 分钟

用户相关概念

认识用户

Linux系统中,用户和组是用于管理和控制系统资源访问权限的重要概念。

用户(User):是指系统中的账号。每个用户都有一个唯一的用户名和用户IDUID)。用户可以拥有自己的个人文件和目录,并且可以在系统中执行特定的操作。

普通用户应用场景:

  1. 针对研发、测试等岗位的同事,我们通常会分配普通用户给他们,避免因root权限过大,误操作导致故障。
  2. 生产环境服务器通常会禁止使用root登录,管理人员需要使用普通用户登录系统后提权到root用户。
  3. 使用普通用户运行程序,规避因程序存在漏洞,导致黑客入侵后获取到较高的权限。

配置文件

创建用户时,系统会对/etc/passwd/etc/shadow文件进行变更,接下来让我们来认识这两个配置文件。

Linux系统会将用户信息存放在/etc/passwd中,/etc/passwd只记录用户信息,不记录密码。

1
2
[root@localhost ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash

/etc/passwd:为分隔符,共可分为7列。

第一列 第二列 第三列 第四列 第五列 第六列 第七列
root x 0 0 root /root /bin/bash
用户名 密码占位符 用户UID 组GID 注释信息 用户家目录 用户登陆shell

/etc/shadow用于记录用户的密码信息。

1
2
[root@localhost ~]# head -1 /etc/shadow
root:$xxx6:19489:0:99999:7:2:66275:

/etc/shadow:为分隔符,共可分为9列。

示例 说明
第一列 root 用户名。
第二列 $xxx6 密码密文,!!表示无密码。
第三列 19489 最近修改密码的日期,从1970年1月1日到现在过了多少天。
第四列 0 最小修改密码时间间隔。0表示随时可以修改,如果是n那么就表示设置了新密码以后n天之内都不能再修改这个密码。
第五列 99999 密码有效期。99999表示不强制在多少天内修改密码。如果改为 90,则表示密码被修改 90 天之后必须再次修改,否则该用户即将过期。
第六列 7 密码到期提醒。当账号的密码有效期限快要到的时候,系统会根据设定的数值发出警告信息提醒用户密码还有多少天就要过期了。
第七列 2 密码过期后的宽限天数。在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。
第八列 66275 账号失效日期。从1970年1月1日起,过多少天后,账户失效。
第九列 保留字段

可通过在线工具计算1970年1月1日距今已经过去了多少天。

用户ID

系统对用户的约定,在CentOS7系统之前,UID1-499用于系统用户,而500+则用于普通用户。

用户UID 系统中约定的含义
0 超级管理员,最高权限。
1~200 系统用户,用来运行系统自带的进程,默认已创建。
201~999 系统用户,用来运行用户安装的程序,所以此类用户无需登陆系统。
1000+ 普通用户,正常可以登陆系统的用户,权限比较小,能执行的任务有限。

用户管理

创建用户

useradd命令用于新增用户,常用选项及说明如下表。

选项 解释
-u 指定用户的UID。
-g 指定用户的默认组,只能有一个。
-G 指定用户的附加组,逗号隔开可以添加多个。
-d 指定要创建的用户的家目录。
-s 指定要创建用户的bash shell。
-c 指定要创建用户的注释信息。
-M 给创建的用户不创建家目录。
-r 创建系统账户,默认无家目录。

我们可以通过以下练习熟悉useradd的使用。

例1:创建snoopy用户,指定UID5001,基本组ops,附加组dev, 注释信息testUser,登陆shell/bin/bash

groupadd添加相关的用户组。

1
2
[root@localhost ~]# groupadd ops
[root@localhost ~]# groupadd dev

创建用户并验证

1
[root@localhost ~]# useradd snoopy -u 5001 -g ops -G dev -c "testUser" -s /bin/bash

检查用户

1
2
3
4
5
6
[root@localhost ~]# id snoopy
uid=5001(snoopy) gid=1000(ops) groups=1000(ops),1001(dev)
[root@localhost ~]# grep "snoopy" /etc/passwd
snoopy:x:5001:1000:testUser:/home/snoopy:/bin/bash
[root@localhost ~]# grep "snoopy" /etc/shadow
snoopy:!!:19667:0:99999:7:::

例2:创建mysql系统用户,不建立用户家目录,并指定nologin使用户无法登陆系统。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[root@localhost ~]# useradd mysql -r -s /sbin/nologin
# 检查用户
[root@localhost ~]# id mysql
uid=998(mysql) gid=996(mysql) groups=996(mysql)
[root@localhost ~]# grep "mysql" /etc/passwd
mysql:x:998:996::/home/mysql:/sbin/nologin
# 未创建用户家目录
[root@localhost ~]# ll /home/ | grep mysql
# 无法登录
[root@localhost ~]# su - mysql
su: warning: cannot change directory to /home/mysql: No such file or directory
This account is currently not available.

请自己尝试创建一个develop用户,uid6666,附加组为ops,用户家目录为/tmp/develop,登录shell/sbin/nologin

修改用户家目录需要关闭selinux。

用户创建流程

配置文件解读

在用户创建的过程需要参考/etc/login.defs/etc/default/useradd这两个文件。如果在创建用户时指定了参数,则会覆盖/etc/login.defs/etc/default/useradd相关内容。

/etc/login.defs相关配置内容。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
[root@localhost ~]# egrep -v "^$|#" /etc/login.defs
MAIL_DIR	/var/spool/mail      # 邮见存放目录。
PASS_MAX_DAYS	99999            # 密码最长使用天数。
PASS_MIN_DAYS	0                # 密码最短使用天数。
PASS_MIN_LEN	5                # 密码的长度。
PASS_WARN_AGE	7                # 密码到期前7天警告。
UID_MIN                  1000    # UID从1000开始。
UID_MAX                 60000    # UID从6w结束。
SYS_UID_MIN               201    # 系统用户UID从201开始。
SYS_UID_MAX               999    # 系统用户UID最大到999。
GID_MIN                  1000    # GID从1000开始。
GID_MAX                 60000    # GID最大到6w结束。
SYS_GID_MIN               201    # 系统GID从201开始。
SYS_GID_MAX               999    # 系统GID醉倒到999结束。
CREATE_HOME	yes                  # 默认给用户创建家目录。
UMASK           077				 # 建立的用户家目录的默认权限。
USERGROUPS_ENAB yes				 # 创建同名用户组;使用userdel删除用户时,默认连组一起删除。
ENCRYPT_METHOD SHA512 			 # 密码加密算法。

/etc/default/useradd相关配置内容。

1
2
3
4
5
6
7
8
[root@localhost ~]# egrep -v "^$|#" /etc/default/useradd
GROUP=100				 # 当创建用户时,不指定组,且/etc/login.defs中USERGROUPS_ENAB为no时,默认给用户分配到gid为100的组。
HOME=/home               # 用户默认的家目录。
INACTIVE=-1              # 密码过期后的宽限天数,也就是/etc/shadow文件的第七个字段。默认值是-1,表示没有强制密码过期。
EXPIRE=                  # 密码失效时间,也就是/etc/shadow文件的第八个字段,不设置表示永久有效。
SHELL=/bin/bash          # 默认登陆shell。
SKEL=/etc/skel           # 默认用户拷贝的环境变量。
CREATE_MAIL_SPOOL=yes    # 创建一个和用户同名的保存邮件信息的文件。

应用场景

我们使用rm时,可能会误删环境变量相关文件,登录后提示符如下。

1
2
3
[root@localhost ~]# su - snoopy
Last login: Tue Nov  7 00:19:58 CST 2023 on pts/2
-bash-4.2$

我们可以自己拷贝环境变量到家目录,重启登录后可恢复。

1
-bash-4.2$ cp /etc/skel/.bash* ./

修改用户

usermod命令用于更改用户信息,常用选项及说明如下表:

选项 解释
-a 更改用户组的时候,保存原有组不变,直接追加。
-m 将家目录内容移至新位置 (仅与 -d 一起使用)。
-l 指定要修改的用户的登录名。
-u 指定用户的UID。
-g 指定用户的默认组,只能有一个。
-G 指定用户的附加组,逗号隔开可以添加多个。常与-a配合使用。
-d 指定要创建的用户的家目录。
-s 指定要创建用户的bash shell。
-c 指定要创建用户的注释信息。

我们可以通过以下练习熟悉usermod的使用。

例1:将用户snoopyUID改为9999,并添加附属组dba

查看用户snoopy的信息。

1
2
[root@localhost ~]# id snoopy
uid=5001(snoopy) gid=1000(ops) groups=1000(ops),1001(dev)

添加用户组dba

1
2
3
4
5
[root@localhost ~]# groupadd dba
# 若不加-a选项,附属组不会保留原先设置的组,会直接变更为dba
[root@localhost ~]# usermod snoopy -u 9999 -aG dba
[root@localhost ~]# id snoopy
uid=9999(snoopy) gid=1000(ops) groups=1000(ops),1001(dev),1002(dba)

例2:将用户snoopy的用户名修改为snoopyops,家目录修改为/tmp/snoopyops

更改用户家目录时应加上-m选项,会将用户家目录移动到/tmp目录。

1
2
3
4
[root@localhost ~]# usermod snoopy -md /tmp/snoopyops -l snoopyops
[root@localhost ~]# id snoopyops
uid=9999(snoopyops) gid=1000(ops) groups=1000(ops),1001(dev),1002(dba)
[root@localhost ~]# su - snoopyops

更改用户家目录,没加-m选项,因为没有移动之前的家目录到/tmp/test目录,会提示家目录不存在。

1
2
3
4
[root@localhost ~]# usermod snoopyops -d /tmp/test
[root@localhost ~]# su - snoopyops
Last login: Mon Aug  5 15:45:28 CST 2019 on pts/1
su: warning: cannot change directory to /tmp/test: No such file or directory

删除用户

userdel命令用于删除用户,常用选项及说明如下表:

选项 解释
-r 删除用户的同时删除他的家目录。

删除用户snoopyops,不删除用户家目录等其他目录。

1
[root@localhost ~]# userdel snoopyops

之前将用于家目前修改成了/tmp/snoopyops/,我们发现用户相关目录还存在,没有被删除。

1
2
[root@localhost ~]# ll /tmp/snoopyops/
[root@localhost ~]# ll /var/spool/mail/snoopyops

删除用户snoopyops及其家目录。

1
[root@localhost ~]# userdel -r snoopyops

用户数据可能会放置于家目录内,-r选项删除用户时,会删除其家目录,慎用!!!

密码管理

设置密码

为新用户添加密码

只有root才能执行才能为新用户添加密码。添加密码非为交互式和非交互式两种。

  • 交互式添加密码。

    1
    2
    3
    4
    5
    6
    7
    
    [root@localhost ~]# useradd snoopy
    [root@localhost ~]# passwd snoopy
    Changing password for user snoopy.
    New password: 输入密码
    BAD PASSWORD: The password is a palindrome
    Retype new password: 确认密码
    passwd: all authentication tokens updated successfully.
    
  • 非交互式添加密码。

    1
    2
    3
    
    [root@localhost ~]# echo "qwert" | passwd --stdin snoopy
    Changing password for user snoopy.
    passwd: all authentication tokens updated successfully.
    

    通过脚本,批量添加用户。

    1
    2
    3
    4
    5
    6
    
    [root@localhost ~]# cat user.sh 
    for i in {1..100}
    do
    	useradd test$i
    	echo "123456" | passwd --stdin test$i
    done
    

修改密码

为别人修改密码(只用root才能执行)。

1
2
3
4
5
6
[root@localhost ~]# passwd test50
Changing password for user test50.
New password: 
BAD PASSWORD: The password is a palindrome
Retype new password: 
passwd: all authentication tokens updated successfully.

为自己修改密码(自己就可以)。

1
2
3
4
5
6
7
[test50@localhost ~]$ passwd 
Changing password for user test50.
Changing password for test50.
(current) UNIX password: 
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

随机密码

方式一$RANDOM可以生成随机数,将随机数通过md5加密,取加密后的6-15字符。

1
2
[root@localhost ~]$ echo $RANDOM | md5sum | cut -c 6-15
45de81b10c

方式二:可以通过mkpasswd随机生成密码。

安装扩展包。

1
[root@localhost ~]#  yum install expect -y

生成随机密码。

1
2
3
4
5
[root@localhost ~]# mkpasswd
7q~HfjM0g
# -l密码长度  -d数字个数  -c小写字母个数  -C大写字母个数  -s特殊字符个数
[root@localhost ~]# mkpasswd -l 10 -d 3 -c 2 -C 3 -s 2
6u36~LRSo&

其他用户相关命令

who命令

who命令用于查看目前登录系统的用户信息。

1
2
3
4
5
[root@localhost ~]# who
root     tty1         2023-11-05 23:06
root     pts/0        2023-11-06 22:14 (192.168.199.1)
root     pts/1        2023-11-06 22:17 (192.168.199.1)
root     pts/2        2023-11-06 23:06 (192.168.199.1)

whoami命令

whoami用于查看当前登陆系统的用户是谁。

1
2
[root@localhost ~]# whoami
root

w命令

w命令用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。

1
2
3
4
5
6
7
[root@localhost ~]# w
 23:34:44 up 1 day, 28 min,  4 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      Sun23    1:17m  0.02s  0.02s -bash
root     pts/0    192.168.199.1    22:14    1:20m  0.01s  0.01s -bash
root     pts/1    192.168.199.1    22:17    1:10m  0.07s  0.07s -bash
root     pts/2    192.168.199.1    23:06    4.00s  0.13s  0.00s w

说明:

显示信息 说明
23:34:44 当前系统时间。
up 当前系统运行的时长。
4 users 有多少用户登陆了系统。
load average 当前系统负载状态。
0.00 1分钟内平均负载。
0.01 5分钟内平均负载。
0.05 15分钟内平均负载
JCPU 该终端连接后所产生的进程占用的时间,不包括过去的后台进程所占用的时间。
PCPU 当前进程(即w项中显示的)所占用的时间。

用户组相关概念

认识用户组

组(Group):是一组相关用户的集合。每个组都有一个唯一的组名和组IDGID)。组可以用于简化权限管理,将一组用户归类,并将特定权限分配给整个组。用户组分为基本组和附加组。

基本组:用户只能有一个基本组,创建时可通过-g指定,如未指定则创建一个与用户同名的默认的组。

附加组:用户除了基本组还可以属于多个附加组。

配置文件

用户组信息保存在/etc/group/etc/gshadow两个文件中。

/etc/group文件是用户组的配置文件,即用户组的所有信息都存放在此文件中。

1
2
[root@localhost ~]# head -1 /etc/group
root:x:0:

/etc/group:为分隔符,共可分为4列。

第一列 第二列 第三列 第四列
root x 0
组名 组密码标志 组GID 组中附加用户,不显示基本成员

用户组的密码信息存储在/etc/gshadow文件中。

1
2
[root@localhost ~]# head -1 /etc/gshadow
root:::

/etc/gshadow:为分隔符,共可分为4列。

第一列 第二列 第三列 第四列
root
组名 组密码,通常不设置密码 组管理员,通常不设置 组中附加用户,不显示基本成员

用户组管理

创建用户组

我们可以通过groupadd命令创建一个用户组。

1
2
3
[root@localhost ~]# groupadd group_test
[root@localhost ~]# grep "group_test" /etc/group
group_test:x:5107:

创建GID666的用户组g1

1
2
3
[root@localhost ~]# groupadd -g 666 g1
[root@localhost ~]# grep "666" /etc/group
g1:x:666:

创建系统用户组g2

1
2
3
[root@localhost ~]# groupadd -r g2
[root@localhost ~]# grep "g2" /etc/group
g2:x:665:

修改用户组

g1GID改为777

1
2
3
[root@localhost ~]# groupmod -g 777 g1
[root@localhost ~]# grep "g1" /etc/group
g1:x:777:

g1的用户名修改为gg

1
2
3
[root@localhost ~]# groupmod g1 -n gg
[root@localhost ~]# grep "777" /etc/group
gg:x:777:

删除用户组

当我们删除用户时,系统默认会把用户的基本组删除。

可通过groupdel命令删除用户的附加组,需要先删除附加组内的所有用户后才可以删除附加组。

创建一个用户u1,属于附加组gg

1
2
3
4
5
6
[root@localhost ~]# useradd u1 -G gg
[root@localhost ~]# id u1
uid=5108(u1) gid=5108(u1) groups=5108(u1),777(gg)
[root@localhost ~]# grep "u1" /etc/group
gg:x:777:u1
u1:x:5108:

删除用户u1后,用户基本组u1也默认被删除,但是gg组还在。

1
2
3
4
[root@localhost ~]# userdel u1
[root@localhost ~]# grep "u1" /etc/group
[root@localhost ~]# grep "gg" /etc/group
gg:x:777:

可通过groupdel命令删除gg用户组。

1
2
[root@localhost ~]# groupdel gg
[root@localhost ~]# grep "gg" /etc/group

用户提权

因考虑到安全合规的需求,公司的服务器通常都会禁止root用户直接登录,所以我们通常使用的都是普通用户登录系统。当我们需要使用到root权限时,应如何提权呢?

su命令

su命令是Linux操作系统中用于切换用户身份的命令,全名为switch user。它允许当前用户切换到其他用户账户,包括超级用户root。除root外,使用改命令需要输入密码。

切换用户

su username可切换用户且不改变原用户的工作目录,属于非登录式shell

1
2
3
4
[snoopy@localhost ~]$ su root
Password:
[root@localhost snoopy]# pwd
/home/snoopy

su - username切换用户后,同时切换到新用户的工作环境中,加载root用户的全部的环境变量,属于非登录式shell

1
2
3
4
5
[snoopy@localhost ~]$ su - root
Password:
Last login: Mon Dec 11 01:15:18 CST 2023 on pts/1
[root@localhost ~]# pwd
/root

环境变量加载顺序

profile类的文件, 主要用于设定环境变量, 登陆前运行的脚本和命令。

bashrc类的文件, 主要用于设定本地变量, 定义命令别名。

非登录式shell配置文件执行顺序。

1
2
3
/etc/profile.d/*.sh
/etc/bashrc
~/.bashrc

登录式shell配置文件执行顺序。

1
2
3
4
5
/etc/profile.d/*.sh
/etc/profile
/etc/bashrc
~/.bashrc
~/.bash_profile

使用其他用户运行命令

使用指定用户执行命令,这里以使用root用户执行命令为例。

1
2
3
4
5
[snoopy@localhost ~]$ whoami
snoopy
[snoopy@localhost ~]$ su root -c "whoami"
Password:
root

su切换用户的缺点:需要知道用户名对应的密码,很不安全。

sudo命令

sudoLinux系统下的一个命令,全称为superuser do。它允许普通用户执行一些root命令,这样不仅减少了root的管理时间,同样也提高了安全性。

用户提权

普通用户执行yum命令,不能成功。

1
2
3
[snoopy@localhost ~]$ yum install wget
Loaded plugins: fastestmirror
You need to be root to perform this command.

使用sudo命令提权,提示用户不在sudoers文件中。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[snoopy@localhost ~]$ sudo yum install wget

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for snoopy:
snoopy is not in the sudoers file.  This incident will be reported.

我们需要修改/etc/sudoers文件,对snoopy用户授权,通常会使用visudo命令对配置文件进行修改。

通过root用户执行visudo命令,对用户进行权限设置。

添加如下内容。

1
2
3
[root@localhost ~]# visudo 
# 添加
snoopy  ALL=(ALL)       /usr/bin/yum

检查配置文件。

1
2
[root@localhost ~]# visudo -c
/etc/sudoers: parsed OK

登陆到snoopy用户,检查用户的权限。

1
2
3
4
5
[snoopy@localhost ~]$ sudo -l
[sudo] password for snoopy: 输入密码

User snoopy may run the following commands on localhost:
    (ALL) /usr/bin/yum

利用sudo执行yum命令,可以成功执行。

1
2
3
4
5
6
7
8
9
[snoopy@localhost ~]$ sudo yum install wget
[sudo] password for snoopy:
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.bupt.edu.cn
 * updates: mirrors.bupt.edu.cn
Package wget-1.14-18.el7_6.1.x86_64 already installed and latest version
Nothing to do

别名提权

可使用sudo中自带的别名操作, 将多个用户或多个命令定义成一个逻辑组。我们针对逻辑组进行提权配置。 用root用户执行visudo命令,对用户进行权限设置。

1
[root@localhost ~]# visudo 

添加如下内容设置用户组别名及命令别名。其中ops_user1ops_user2dev_user1dev_user2为用户,若系统中不存在,需要先创建。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
root    ALL=(ALL)       ALL
# 设置组别名,ops_user1和ops_user2为OPS组;dev_user1和dev_user2为DEV组。
User_Alias OPS = ops_user1,ops_user2
User_Alias DEV = dev_user1,dev_user2
# 设置命令别名
Cmnd_Alias NETWORKING = /sbin/ifconfig, /bin/ping
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/yum
Cmnd_Alias SERVICES = /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl status
# 将组的别名和命令别名对应起来
OPS ALL=(ALL) NETWORKING,SOFTWARE,SERVICES
DEV ALL=(ALL) NETWORKING

检查配置。

1
2
[root@localhost ~]# visudo -c
/etc/sudoers: parsed OK

ops_user1用户登陆系统,查看权限。

1
2
3
4
5
6
7
[ops_user1@localhost ~]$ sudo -l
    .......
    .......
User ops_user1 may run the following commands on localhost:
    (ALL) /sbin/ifconfig, /bin/ping, /bin/rpm, /usr/bin/yum,
        /usr/bin/systemctl start, /usr/bin/systemctl stop,
        /usr/bin/systemctl status

dev_user1用户登陆系统,查看权限。

1
2
3
4
5
[dev_user1@localhost ~]$ sudo -l
    .......
    .......
User dev_user1 may run the following commands on localhost:
    (ALL) /sbin/ifconfig, /bin/ping

用户组提权

sudo可针对系统的用户组进行提权,可使用groupadd将用户添加到用户组,然后给组分配sudo的权限。如果有新用户加入,直接将用户添加到该组。 将用户添加到对应的组中,若系统中不存在,需要先创建。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 创建用户组
[root@localhost ~]# groupadd ops_group
[root@localhost ~]# groupadd dev_group
# 修改用户附加组
[root@localhost ~]# usermod ops_user1 -aG ops_group
[root@localhost ~]# usermod ops_user2 -aG ops_group
[root@localhost ~]# usermod dev_user1 -aG dev_group
[root@localhost ~]# usermod dev_user2 -aG dev_group
[root@localhost ~]# id ops_user1
uid=5113(ops_user1) gid=5116(ops_user1) groups=5116(ops_user1),5121(ops_group)
[root@localhost ~]# id ops_user2
uid=5114(ops_user2) gid=5117(ops_user2) groups=5117(ops_user2),5121(ops_group)
[root@localhost ~]# id dev_user1
uid=5116(dev_user1) gid=5119(dev_user1) groups=5119(dev_user1),5120(dev_group)
[root@localhost ~]# id dev_user2
uid=5115(dev_user2) gid=5118(dev_user2) groups=5118(dev_user2),5120(dev_group)

修改配置文件。

1
[root@localhost ~]# visudo

visudo主要添加了以下的内容。

1
2
3
4
5
6
7
# 设置命令别名
Cmnd_Alias NETWORKING = /sbin/ifconfig, /bin/ping
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/yum
Cmnd_Alias SERVICES = /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl status
# %代表组,如果不加%,系统会认为是一个用户名
%ops_group ALL=(ALL) NETWORKING,SOFTWARE,SERVICES
%dev_group ALL=(ALL) NETWORKING

检查配置文件。

1
2
[root@localhost ~]# visudo -c
/etc/sudoers: parsed OK

登陆到ops_user2查看用户的权限。

1
2
3
4
5
6
7
[ops_user2@localhost ~]$ sudo -l
    .......
    .......
User ops_user2 may run the following commands on localhost:
    (ALL) /sbin/ifconfig, /bin/ping, /bin/rpm, /usr/bin/yum,
        /usr/bin/systemctl start, /usr/bin/systemctl stop,
        /usr/bin/systemctl status

dev_user2用户登陆系统,查看权限。

1
2
3
4
5
[dev_user2@localhost ~]$ sudo -l
    .......
    .......
User dev_user2 may run the following commands on localhost:
    (ALL) /sbin/ifconfig, /bin/ping

image-20231028232834657