用户与用户组及文件权限管理

四:用户与用户组管理及权限管理

4.1 用户与用户组管理

为什么用用户管理:

如果大家都是要root用户(超级管理员)进行操作系统,对系统都有超级操作权限,1. 当某个人无意间删除东西,无法追溯到哪个人操作的。2. 再者使用root用户运行程序,这个程序对操作系统有超级权限,很容易攻破系统,造成数据泄露风险。所以我们要使用用户进行管理。

4.1.0 用户与组的配置文件

用户与组有三个配置文件,分别是:

  • /etc/passwd: 用于存放用户的信息。如用户名,用户ID,家目录,shell
  • /etc/shadow: 用于存放密码及密码策略信息。如用户名,加密的密码,创建密码的天数,密码策略
  • /etc/group: 用于存放组信息。如:用户组名,用户组ID,用户组成员

三个配置文件的关系:

image-20260909161005655

4.1.0.1 /etc/passwd文件内容说明

wmn@study:~$ head -5 /etc/passwd
root:x:0:0:Super User:/root:/bin/bash
bin:x:1:1:bin:/bin:/usr/sbin/nologin
daemon:x:2:2:daemon:/sbin:/usr/sbin/nologin
adm:x:3:4:adm:/var/adm:/usr/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/usr/sbin/nologin
字段 含义 例子
1 用户的名称 root
2 密码占位符 x
3 用户的ID(UID) 0
4 用户主组的ID 0
5 描述信息 Super User
6 用户的家目录 /root、/home/wmn
7 用户的shell,登录用户第一个执行的程序 /bin/bash

用户的ID(UID)分配规则:

用户的ID 类型 说明
0 超级用户,如root 超级管理员
1-999 系统用户 用于启动进程的用户,不能登录,使用的shell是nologin或者是false
1000+ 普通用户 可以登录

4.1.0.2 /etc/shadow文件内容说明

wmn@study:~$ sudo tail -5 /etc/shadow
[sudo] wmn 的密码:
sshd:!:20701::::::
chrony:!:20701::::::
dnsmasq:!:20701::::::
tcpdump:!:20701::::::
wmn:$y$j9T$gNID7zqPQPG6mClmfN4g5Z4L$kVlZ9gsZxqRdAfaBn2GMXwj1akqgeSw6IXxgP9VmqFD::0:99999:7:::
字段 含义
1 用户名
2 加密密码,它是有三部分组成,$y$是加密使用的算法(在rocky9和ubuntu使用的sha-512($6$),rocky10使用的是yescrypt)。j9T$gNID7zqPQPG6mClmfN4g5Z4L 是加密使用的salt。加密的密码。 !是不允许登录
3 最后修改密码的天数(从1970-1-1开始算的天数)
4 密码的最小年龄,如果5,5天之内不允许修改密码
5 密码的最大年龄,如果是30,30天之后进行修改密码
6 过期之前多少天进行警告,如果7是过期前7进行警告修改密码
7 过期后锁定的天数
8 账号过期时间
9 保留字段

4.1.0.3 /etc/group文件内容说明

wmn@strudy:~$ sudo tail -5 /etc/group
gnome-initial-setup:x:976:
gdm:x:975:
lxd:x:114:wmn
wmn:x:1000:
gamemode:x:974:
字段 含义
1 组名
2 组密码占位符
3 组ID(GID)
4 组成员,记录是附加组成员,用逗号隔开,主成员默认不记录

组ID(GID)分配规则:

ID号 说明
0 超级用户组
1-999 系统用户组
1000+ 普通用户组

4.1.1用户与用户组管理命令

4.1.1.0 用户组管理命令:

4.1.1.0.1 groupadd创建组

创建用户组,默认是从1000开始,创建用户时想要加入组,组必须存在。

  • 参数:
参数 说明
g 指定Gid
r 创建系统用户组,GID从1-999
  • 例子:

创建一个op组:

wmn@strudy:~$ sudo groupadd op
wmn@strudy:~$ sudo groupadd devops
wmn@strudy:~$ tail -3 /etc/group
ops:x:973:
op:x:1001:
devops:x:1002:

创建一个系统组:

wmn@strudy:~$ sudo groupadd -r ops
wmn@strudy:~$ tail -1 /etc/group
ops:x:973:

创建一个指定GID为3000的用户组:

wmn@studry:~$ sudo groupadd -g 3000 dba
wmn@strudy:~$ tail -1 /etc/group
dba:x:3000:
4.1.1.0.2 groupmod修改组

groupmod修改组,他是修改的是/etc/group文件信息。

  • 参数:
选项 说明
-n [组新名] [组旧名] 修改组的名字
-g 修改组的ID(GID)
  • 例子:

把ops组名修改成opss:

wmn@strudy:~$ sudo groupmod -n opss ops
wmn@strudy:~$ grep "opss" /etc/group
opss:x:973:

修改opss组ID为3000:

wmn@strudy:~$ sudo groupmod -g 3001 opss
wmn@strudy:~$ !grep
grep "opss" /etc/group
opss:x:3001:
4.1.1.0.3 groupdel删除组

注意事项:删除用户的时候,默认和主组一块删除,首先确认删除的组是否有附加成员,如果有成员的组,删除用户不会把主组删除掉,再使用groupdel直接把组删除掉。

  • 例子:

删除用户的主组:

1)当删除有用户的主组,会报错,报错如下:
wmn@strudy:~$ sudo groupdel wmn2
groupdel:不能移除用户“wmn2”的主组
2) 删除用户的时候,默认会把主组删除掉:
wmn@studry:~$ id wmn2
uid=1001(wmn2) gid=3002(wmn2) 组=3002(wmn2)
wmn@studry:~$ tail -1 /etc/group
wmn2:x:3002:
wmn@studry:~$ sudo userdel wmn2
wmn@studry:~$ tail -1 /etc/group
opss:x:3001:
3)删除有成员的组:
当有成员组,删除用户不会把用户主组删除,只删用户,当把成员删除掉,才能删除组。
查看用户和组信息:
wmn@studry:~$ id wmn1
uid=1001(wmn1) gid=3002(wmn1) 组=3002(wmn1)
wmn@studry:~$ id wmn2
uid=1002(wmn2) gid=3003(wmn2) 组=3003(wmn2),3002(wmn1)
wmn@studry:~$ tail -2 /etc/group
wmn1:x:3002:wmn2
wmn2:x:3003:
删除wmn1用户,查看组会不会删除:
wmn@studry:~$ sudo userdel wmn1
userdel:组“wmn1”没有移除,因为它包含其它成员。
wmn@studry:~$ tail -2 /etc/group
wmn1:x:3002:wmn2
wmn2:x:3003:
wmn@studry:~$ id wmn1
id: "wmn1": 无此用户
这时wmn1组可以删除:
wmn@studry:~$ sudo groupdel wmn1
wmn@studry:~$ tail -2 /etc/group
opss:x:3001:
wmn2:x:3003:

删除没有用户主组和附加成员的组:

1)查看用户组信息:
wmn@strudy:~$ tail -3 /etc/group
devops:x:1002:
dba:x:3000:
opss:x:3001:
2)删除opss组:
wmn@strudy:~$ sudo groupdel opss
wmn@strudy:~$ !tail
tail -3 /etc/group
op:x:1001:
devops:x:1002:
dba:x:3000:
4.1.1.0.4 groups(查看用户所属组)
  • 例子:

查看wmn3用户所属组:

wmn@strudy:~$ groups wmn3
wmn3 : sudo
可以使用id进行查看:
wmn@strudy:~$ id wmn3
uid=1002(wmn3) gid=27(sudo) groups=27(sudo)
4.1.1.0.5 getent:查看组有哪些附加成员:
  • 例子:

查看wheel组有哪些附加成员:

wmn@study:~$ getent group wheel
wheel:x:10:wmn,wmn3

4.1.1.1 用户管理命令

在创建用户的时候,如果不指定主组,默认会创建和用户同名的主组。

如果把用户添加到附加组中,需要确认附加组是否存在,不存在则会报错。

创建用户后,会有一个主组,0个或多个附加组。主组是用户的默认组,附加组是用户附加的权限,在创建文件,默认所属组就是用户的主组。

4.1.1.1.0 useradd创建用户
  • 常用的选项参数
选项 说明 备注
-m 创建家目录 rocky非必须,自动会创建。Ubuntu必须
-s 指定shell rocky非必须,自动指定/bin/bash。Ubuntu不指定,默认使用/bin/sh
-M 不创建家目录 一般用于系统用户,用来管理程序进程
-u 指定用户的ID,UID
-g 指定主组 不加这个参数,默认是创建和用户同名的组。不建议使用
-G 指定附加组,加入附加组中 如果个,用逗号分开
-r 创建系统用户 它不创建家目录
-d 指定家目录的位置 通常要与-m配合使用
-c 添加描述信息
  • 例子:

创建的用户:

1)rocky默认是创建家目录及指定shell是/bin/bash
wmn@study:~$ sudo useradd wmn520
[sudo] wmn 的密码:
wmn@study:~$ ls /home/wmn520 -d 
/home/wmn520
wmn@study:~$ grep "wmn520" /etc/passwd
wmn520:x:1002:1002::/home/wmn520:/bin/bash
2)Ubuntu:
wmn@strudy:~$ sudo useradd wmn520
[sudo: authenticate] 密码:         
wmn@strudy:~$ ls /home/wmn520
ls: cannot access '/home/wmn520': No such file or directory
wmn@strudy:~$ grep "wmn520" /etc/passwd
wmn520:x:1003:1003::/home/wmn520:/bin/sh
wmn@strudy:~$ sudo su - wmn520
$ 
3)Ubuntu创建用户及指定shell是/bin/bash
wmn@strudy:~$ sudo useradd wmn521 -m -s /bin/bash
wmn@strudy:~$ ls /home/wmn521 -d 
/home/wmn521
wmn@strudy:~$ grep "wmn521" /etc/passwd
wmn521:x:1004:1004::/home/wmn521:/bin/bash
wmn@strudy:~$ sudo su - wmn521
wmn521@strudy:~$ 

指定UID:

wmn@study:~$ sudo useradd wmn521 -u 3001
[sudo] wmn 的密码:

wmn@study:~$ id wmn521
uid=3001(wmn521) gid=3001(wmn521) 组=3001(wmn521)

指定主组(不建议使用):

创建用户前需要确认主组是否创建,不存在则会报错:
wmn@study:~$ sudo groupadd wmn523
wmn@study:~$ sudo useradd wmn522 -g wmn523
wmn@study:~$ id wmn522
uid=3002(wmn522) gid=3002(wmn523) 组=3002(wmn523)

指定附加组:

1)查看组:
wmn@study:~$ tail -3 /etc/group
devops:x:2000:
ops:x:2001:
dba:x:2003:
2)创建用户:
wmn@study:~$ sudo useradd wmn524 -G devops,dba,ops
wmn@study:~$ id wmn524
uid=3003(wmn524) gid=3003(wmn524) 组=3003(wmn524),2000(devops),2001(ops),2003(dba)
wmn@study:~$ sudo groups wmn524
wmn524 : wmn524 devops ops dba

创建系统用户,不允许登录:

wmn@study:~$ sudo useradd wmn525 -r -s /sbin/nologin
wmn@study:~$ grep "wmn525" /etc/passwd
wmn525:x:983:981::/home/wmn525:/sbin/nologin
wmn@study:~$ sudo su - wmn525
su: warning: cannot change directory to /home/wmn525: 没有那个文件或目录
This account is currently not available.
wmn@study:~$ ls /home/wmn525
ls: 无法访问 '/home/wmn525': 没有那个文件或目录

创建用户,并且指定家目录:

wmn@study:~$ sudo useradd wmn526 -d /opt/wmn525
wmn@study:~$ ls /opt/wmn525 -ld 
drwx------. 3 wmn526 wmn526 78  9月 9日 17:56 /opt/wmn525
wmn@study:~$ grep "wmn526" /etc/passwd
wmn526:x:3004:3004::/opt/wmn  525:/bin/bash
4.1.1.1.1 usermod(修改用户)
  • 选项参数
选项参数 说明
-aG 把用户添加到附加组中
-g 修改用户的主组
-L 锁定用户,不让用户登录
-U 解锁用户
-u 修改用户的id
-s 修改用户的shell
-m 修改家目录时,创建家目录,与-d一起使用
-l [新的名称] [旧的名称] 修改用户的名称
-d 修改用户的家目录
  • 例子:

修改shell:

wmn@study:~$ sudo usermod  wmn520 -s /sbin/reboot
[sudo] wmn 的密码:
wmn@study:~$ grep "wmn520" /etc/passwd
wmn520:x:1002:1002::/home/wmn520:/sbin/reboot

把用户添加到附加组中:

wmn@study:~$ sudo usermod wmn520 -aG ops
wmn@study:~$ id wmn520
uid=1002(wmn520) gid=1002(wmn520) 组=1002(wmn520),2001(ops),2003(dba)

修改用户的家目录:

wmn@study:~$ sudo usermod wmn520 -m -d /opt/wmn520 

wmn@study:~$ sudo su -
root@study:~# cd /opt/
root@study:/opt# ls
wmn520 

修改用户名:

root@study:/opt# usermod -l wmn5200 wmn520
root@study:/opt# id wmn5200
uid=1002(wmn5200) gid=1002(wmn520) 组=1002(wmn520),2001(ops),2003(dba)

修改用户的ID:

root@study:/opt# usermod wmn5200 -u 1003
root@study:/opt# id wmn5200
uid=1003(wmn5200) gid=1002(wmn520) 组=1002(wmn520),2001(ops),2003(dba)

锁定与解锁用户:

1)锁定用户: 说明,如果没有密码,重新设置密码(root用户重新设置密码)会把锁定的用户自动解锁
root@study:/opt# usermod wmn5200 -L
root@study:/opt# grep "wmn5200" /etc/shadow
wmn5200:!:20705:0:99999:7:::
!是不让用户登录。
2)解锁用户:
root@study:/opt# usermod wmn5200 -U
说明:如果没有密码的用户,解锁需要设置密码才能解锁。

修改用的组主(不建议使用)

root@study:/opt# usermod wmn5200 -g dba
root@study:/opt# id wmn5200
uid=1003(wmn5200) gid=2003(dba) 组=2003(dba),2001(ops)
4.1.1.2 userdel(删除用户)

userdel默认不删除家目录,使用选项参数-r是删除家目录。

  • 选项参数:
选项 说明
-r 删除用户时,把家目录一同删除
  • 实例:

创建两个用户用于测试:

root@study:/opt# useradd user01
root@study:/opt# useradd user02
root@study:/opt# tail -2 /etc/passwd
user01:x:3005:3005::/home/user01:/bin/bash
user02:x:3006:3006::/home/user02:/bin/bash

删除user01用户,不删除家目录和邮箱文件:再次创建user01用户会使用同名的家目录。

root@study:/opt# userdel user01

root@study:/opt# ls /home/user01 -ld
drwx------. 3 3005 3005 78  9月 9日 20:49 /home/user01
root@study:/opt# ls -ld /var/spool/mail/user01
-rw-rw----. 1 3005 mail 0  9月 9日 20:49 /var/spool/mail/user01

删除user02用户,删除家目录和邮箱文件:

root@study:/opt# userdel user02 -r 
root@study:/opt# 
root@study:/opt# ls -dl /home/user02
ls: 无法访问 '/home/user02': 没有那个文件或目录
root@study:/opt# ls -dl /var/spool/mail/user02
ls: 无法访问 '/var/spool/mail/user02': 没有那个文件或目录
4.1.1.3 passwd 修改用户的密码

使用passwd修改密码,如果root及wheel或sudo组下的用户进行修改密码是没有限制,如果普通用户修改密码需要老密码,新密码需要满足复杂性要求。

普通用户无法给自己设置密码,只能修改密码。

  • 例子:

使用root给普通用户user01修改密码:

root@study:/home# passwd user01
新的密码: 
重新输入新的密码: 
passwd:已成功更新密码

普通用户修改自己设置密码:

root@study:/home# su user01 
user01@study:/home$ passwd
当前的密码: 
新的密码:   #需要符合密码的复杂性要求
无效的密码: 密码少于 8 个字符
1passwd:身份验证令牌操作错误
passwd:密码未更改

非交互式设置密码:

1)rocky设置密码:
方法一: 注意使用这种方式需要符合密码复杂性
root@study:/home# echo "123456" |passwd --stdin user01
无效的密码: 密码少于 8 个字符
root@study:/home# echo "wo211314" |passwd --stdin user01
方法二:
root@study:/home# echo "user01:123456"|chpasswd
2)Ubuntu修改密码: 需要符合密码复杂性
wmn@strudy:~$ echo "user01:wo211314"|sudo chpasswd
wmn@strudy:~$ echo "user01:123456"|sudo chpasswd
无效的密码: 密码少于 8 个字符
4.1.1.4 gpasswd组成员管理

gpasswd可以把用户添加到某个组中,也可以把用户从某个组中进行删除。

  • 常用的参数:
选项参数 说明
-a 把用户添加到某个组中
-d 把用户从某组中删除
  • 实例:

把user01用户添加到devops组中:

wmn@study:~$ sudo gpasswd -a user01 devops
正在将用户“user01”加入到“devops”组中
wmn@study:~$ sudo id user01
uid=3005(user01) gid=3005(user01) 组=3005(user01),2000(devops)

把user01用户从devops组中删除:

wmn@study:~$ sudo gpasswd devops -d user01
正在将用户“user01”从“devops”组中删除
wmn@study:~$ id user01
uid=3005(user01) gid=3005(user01) 组=3005(user01)

4.2 su切换用户与sudo命令提权

4.2.1 su 切换用户

su是用来切换用户,su [用户]:进行切换用户,它的环境变量及家目录或配置文件信息没有切换过去,还是使用前一个用户的。su - 是切换用户并且把环境变量及家目录、配置文件信息一并切换过去。

su 与su -对比:

对比项 su wmn su - wmn
切换用户 切换 切换
环境变量 不切换,使用上一个用户的 切换
家目录 不切换,在上一个用户的家目录 切换
配置文件 不加载 加载.bashrc .bash_profile等文件
  • 例子:

切换用户,保留了上一个用户的家目录:

wmn@study:~$ sudo su user01
[sudo] wmn 的密码:
user01@study:/home/wmn$ pwd
/home/wmn
user01@study:/home/wmn$ echo $PATH
/home/user01/.local/bin:/home/user01/bin:/sbin:/bin:/usr/sbin:/usr/bin

切换用户,不保留了上一个用户的家目录:

wmn@study:~$ sudo su - user01
上一次登录: 2026年09月09日 星期三 21:36:26 CST 于 pts/3
user01@study:~$ pwd
/home/user01
user01@study:~$ echo $PATH
/home/user01/.local/bin:/home/user01/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

使用su不切换到用户,执行命令:

wmn@study:~$ sudo su - -c "ls -la /"
总计 24
dr-xr-xr-x.  18 root root  257  9月 7日 17:42 .
dr-xr-xr-x.  18 root root  257  9月 7日 17:42 ..
dr-xr-xr-x.   2 root root    6 2025年 4月 2日 afs
lrwxrwxrwx.   1 root root    7 2025年 4月 2日 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096  9月 5日 08:51 boot
drwxr-xr-x.  20 root root 3460  9月 9日 14:59 dev
drwxr-xr-x. 134 root root 8192  9月 9日 21:20 etc
drwxr-xr-x.  10 root root  128  9月 9日 21:02 home
lrwxrwxrwx.   1 root root    7 2025年 4月 2日 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 2025年 4月 2日 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 2025年 4月 2日 media
drwxr-xr-x.   3 root root   18  9月 5日 08:20 mnt
drwxr-xr-x.   3 root root   20  9月 9日 20:29 opt
dr-xr-xr-x. 404 root root    0  9月 9日 14:59 proc
dr-xr-x---.   4 root root  140  9月 5日 08:50 root
drwxr-xr-x.  49 root root 1280  9月 9日 15:22 run
lrwxrwxrwx.   1 root root    8 2025年 4月 2日 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 2025年 4月 2日 srv
dr-xr-xr-x.  13 root root    0  9月 9日 14:59 sys
drwxrwxrwt.  27 root root 4096  9月 9日 21:41 tmp
drwxr-xr-x.  12 root root  144  9月 5日 08:17 usr
drwxr-xr-x.  20 root root 4096  9月 5日 08:50 var
lrwxrwxrwx.   1 root root   17  9月 7日 17:42 wmn_dir_backup -> /home/wmn/wmn_dir

切换root:

wmn@study:~$ sudo su -
上一次登录: 2026年09月09日 星期三 21:41:37 CST 于 pts/3

4.2.2 sudo提权

sudo是用来临时提权的,临时提权执行某个命令的,并且把执行的命令记录到/var/log/secure(rocky操作系统)或/var/log/auth.log(ubuntu操作系统)日志中。

  • Ubuntu与rockyLinux默认配置对比
发行版 管理员 默认sudoer配置
rockyLinux wheel %wheel ALL=(ALL) ALL
Ubuntu sudo %sudo ALL=(ALL:ALL) ALL
  • visudo配置说明
root@study:~# visudo
root    ALL=(ALL)       ALL
%wheel  ALL=(ALL)       ALL
#%wheel        ALL=(ALL)       NOPASSWD: ALL
字段 说明
1 指定使用的用户组或用户,%是用来指定用户组
2 第一个ALL是指所有主机,第二个是不管什么身份
3 ALL是可以执行所有命令。NOPASSWD:ALL:不输入密码进行确认,执行所有命令
  • sudo命令参数:
选项 参数
-l 列出sudo权限配置
-U 指定用户,一般是root用户使用的,普通用户不需要
  • visudo配置实例

给用户添加sudo权限,不管使用任何主机,不管以什么用户身份,可以执行所有指令:

user01 ALL=(ALL) ALL

给组添加sudo权限,不管使用任何主机,不管以什么用户身份,可以执行所有指令:

%devops         ALL=(ALL)       ALL

限制只能执行特定的命令:只能重启NGINX,只能查看NGINX的状态:

user02 ALL=(ALL)  NOPASSWD: /usr/bin/systemctl restart nginx,/usr/bin/systemctl status nginx  
#说明注意: 命令要写全路径,NOPASSWD:在执行指令的时候不输入密码进行确认。
如果user02 ALL=(ALL)  NOPASSWD: /usr/bin/systemctl  #这个意思是,user02使用sudo可以执行systemctl指令

限制某个组只能管理MySQL:

%dba   ALL=(ALL)  NOPASSWD: /usr/bin/systemctl restart mysql,/usr/bin/systemctl status mysql

禁止执行某些命令:

user03 ALL=(ALL)  NOPASSWD: !/usr/bin/passwd root,!/usr/bin/su -
  • sudo进行验证:

验证前先安装NGINX:

root@study:~# dnf install  nginx -y 

进行验证:

1)root用户查看user02的sudo权限
root@study:~# sudo -l -U user02
匹配 study 上 user02 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

用户 user02 可以在 study 上运行以下命令:
    (ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx
2)进入user02查看sudo的权限:
user02@study:~$ sudo -l
匹配 study 上 user02 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

用户 user02 可以在 study 上运行以下命令:
    (ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx
3)user02执行指令:
user02@study:~$ sudo systemctl restart nginx

4)开一个窗口,查看日志:
Sep  9 22:30:49 study sudo[7042]:  user02 : TTY=pts/4 ; PWD=/home/user02 ; USER=root ; COMMAND=/usr/bin/systemctl restart nginx
Sep  9 22:30:49 study sudo[7042]: pam_unix(sudo:session): session opened for user root(uid=0) by wmn(uid=3006)
Sep  9 22:30:49 study sudo[7042]: pam_unix(sudo:session): session closed for user root

4.3 实战案例:创建标准化用户

4.3.1 需求

为后台管理系统创建用户体系:

组名 组成员 权限需求
devops ruoyi-admin 可以重启NGINX
dba ruoyi-dba 可以管理MySQL
developer ruoyi-dev 可以查看日志

4.3.2 实施步骤

创建用户组:

1)进行创建
[root@studry ~]# groupadd devops
[root@studry ~]# groupadd dba
[root@studry ~]# groupadd developer
2)查看是否创建成功:
[root@studry ~]# tail -3 /etc/group
devops:x:1001:
dba:x:1002:
developer:x:1003:

创建用户组成员:

[root@studry ~]# useradd ruoyi-admin -G devops 
[root@studry ~]# id ruoyi-admin
uid=1001(ruoyi-admin) gid=1004(ruoyi-admin) 组=1004(ruoyi-admin),1001(devops)
[root@studry ~]# useradd ruoyi-dba -G dba
[root@studry ~]# id ruoyi-dba
uid=1002(ruoyi-dba) gid=1005(ruoyi-dba) 组=1005(ruoyi-dba),1002(dba)
[root@studry ~]# useradd ruoyi-dev -G developer
[root@studry ~]# id ruoyi-dev
uid=1003(ruoyi-dev) gid=1006(ruoyi-dev) 组=1006(ruoyi-dev),1003(developer)

给用户设置密码:

[root@studry ~]# echo "ruoyi-admin:wo211314.."|chpasswd
[root@studry ~]# echo "ruoyi-dba:wo211314.."|chpasswd
[root@studry ~]# echo "ruoyi-dev:wo211314.."|chpasswd

权限设置:

[root@studry ~]# vi /etc/sudoers.d/ruoyi
%devops  ALL=(ALL) NOPASSWD:/usr/bin/systemctl restart nginx
%dba     ALL=(ALL) NOPASSWD:/usr/bin/systemctl restart mysql,/usr/bin/systemctl status mysql,/usr/bin/systemctl stop mysql
%developer ALL=(ALL) NOPASSWD:/usr/bin/tail   /opt/ruoyi/logs/*,/usr/bin/cat /opt/ruoyi/logs/*

五:Linux基本权限

在Linux系统中,每个文件或目录都有一个属主和属组、其他人权限的概念。这三类组成了一套独立的权限,也就是UGO模型。

5.1 文件基本权限表示方法

查看文件权限:

wmn@study:~$ ll etc.tar 
-rw-r--r--. 1 root root 27146240  9月 7日 18:02 etc.tar

权限的类型:

权限的符号 对应的数字表示 对文件的含义 对目录的含义
r 4 只有读取文件权限,如cat、tail等查看文件权限 查看目录下的内容,比如ls等
w 2 可以编辑文件内容权限,如vim等 可以在目录中创建、删除、修改、重命名、等权限
x 1 可以运行文件(程序或者脚本) 可以切换到目录下,如cd

权限的表示

字符表示:

  • rw-前三位是文件或目录的所属主
  • r--中三位是文件或目录的所属组
  • --中三位是文件或目录的其他人

数字表示: 764

  • 将每组有权限的看成二进制1,没有权限的是0,在转换十进制

rwx-rw--r--:

rwx=111=7

rw-=110=6

r--=100=4

5.2 修改文件权限的命令

5.2.1 chown(修改文件或目录的所属主和所属组)

  • 参数:
选项参数 说明
-R 修改目录本身及递归修改目录下内容的权限
  • 实例:

创建用户和组:

root@study:~# groupadd qa
root@study:~# groupadd op
root@study:~# groupadd devops
root@study:~# useradd tianyun
root@study:~# useradd jinghui
root@study:~# 
root@study:~# touch  file1.txt
root@study:~# mkdir dir1
root@study:~# touch dir1/file{1..10}

chown命令:

1)把file1.txt文件所属主修改成tianyun:
root@study:~# chown tianyun file1.txt 
root@study:~# ls -l file1.txt
-rw-r--r--. 1 tianyun root 0  9月10日 07:38 file1.txt
2)把file1.txt文件属组修改成op:
root@study:~# chown :op file1.txt
root@study:~# ls -l file1.txt
-rw-r--r--. 1 tianyun op 0  9月10日 07:38 file1.txt
3)把file1.txt文件所属主修改成jinghui,属组修改成devops
root@study:~# ls -l file1.txt
-rw-r--r--. 1 jinghui devops 0  9月10日 07:38 file1.txt
4)递归修改dir1目录下所属主和属组:
root@study:~# chown -R jinghui:op dir1
root@study:~# ls -ld dir1
drwxr-xr-x. 2 jinghui op 137  9月10日 07:38 dir1
root@study:~# ls -l dir1
总计 0
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file1
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file10
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file2
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file3
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file4
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file5
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file6
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file7
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file8
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file9

5.2.2 chgrp:修改文件属组

  • 选项参数:
选项参数 说明
-R 递归修改目录及目录下的内容所属组,不加这个参数是修改本目录
  • 例子:

将文件file1.txt属组修改成qa:

1)查看文件属性
root@study:~# ls -l file1.txt 
-rw-r--r--. 1 jinghui devops 0  9月10日 07:38 file1.txt
2)进行修改:
root@study:~# chgrp qa file1.txt 
root@study:~# ls -l file1.txt 
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file1.txt

将目录dir1属组修改成qa

1)查看目录属性
root@study:~# ls -ld dir1
drwxr-xr-x. 2 jinghui op 137  9月10日 07:38 dir1
root@study:~# ls -l dir1
总计 0
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file1
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file10
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file2
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file3
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file4
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file5
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file6
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file7
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file8
-rw-r--r--. 1 jinghui op 0  9月10日 07:38 file9
2)进行修改:
root@study:~# chgrp -R  qa dir1
root@study:~# ls -l dir1
总计 0
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file1
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file10
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file2
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file3
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file4
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file5
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file6
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file7
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file8
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file9

5.2.3 chmod(修改文件的权限)

修改文件的权限由所属主和root用户才能修改,chmod修改文件权限有两种模式,一种是字符模式,另一种是数字模式。

字符模式修改权限:

  • 操作对象:
操作对象 说明
u 属主
g 属组
o 其他人
a 所有人
  • 操作符
操作符 说明
+ 添加权限
- 移除权限
= 设置精确权限
  • 权限
权限 说明
r 只读权限
w 写,修改权限
x 可执行权限
  • 例子

给file1.txt属主添加可执行权限:

root@study:~# chmod u+x file1.txt 
root@study:~# ls -l file1.txt 
-rwxr--r--. 1 jinghui qa 0  9月10日 07:38 file1.txt

给file1.txt属组移除可读权限:

root@study:~# chmod g-r file1.txt
root@study:~# ls -l file1.txt 
-rwx---r--. 1 jinghui qa 0  9月10日 07:38 file1.txt

给file1.txt其他人设置可读可写权限:

root@study:~# chmod o=rw file1.txt 
root@study:~# ls -l file1.txt
-rwx---rw-. 1 jinghui qa 0  9月10日 07:38 file1.txt

给file1.txt所有人设置可读可写可执行权限:

root@study:~# chmod a=rwx file1.txt 
root@study:~# ls -l file1.txt
-rwxrwxrwx. 1 jinghui qa 0  9月10日 07:38 file1.txt

给file1.txt所属组和属主设置可读可写其他人设置成可读权限:

root@study:~# chmod ug=rw,o=x file1.txt 
root@study:~# ls -l file1.txt
-rw-rw---x. 1 jinghui qa 0  9月10日 07:38 file1.txt

root@studry:~# chmod ug=rw,o=r file1.txt
root@studry:~# ls -l file1.txt 
-rw-rw-r--. 1 jinghui qa 0  9月10日 21:35 file1.txt

数字模式:

直接使用三位八进制数字设置权限:

  • 例子

给file1.txt设置成755权限

root@study:~# chmod 755 file1.txt
root@study:~# ls -l file1.txt
-rwxr-xr-x. 1 jinghui qa 0  9月10日 07:38 file1.txt
755是:rwx-r-x-r-x权限

给file1.txt设置成644权限

root@study:~# chmod  644 file1.txt
root@study:~# ls -l file1.txt
-rw-r--r--. 1 jinghui qa 0  9月10日 07:38 file1.txt
644是:rw--r---r--权限

给file1.txt设置成700权限

root@study:~# chmod 700 file1.txt
root@study:~# ls -ls file1.txt
0 -rwx------. 1 jinghui qa 0  9月10日 07:38 file1.txt
700是:rwx--------权限

给file1.txt设置成600权限

root@study:~# chmod 600 file1.txt 
root@study:~# ls -l file1.txt 
-rw-------. 1 jinghui qa 0  9月10日 07:38 file1.txt
700是:rw---------权限

5.3 umask权限掩码

umask是决定创建新文件和新目录的默认权限。

  • 在ubuntu服务器中,root用户默认的umask是0022,普通用户umask是0002。
  • 在rockyLinux中,root用户和普通用户默认umask是0022。
  • 文件默认起始值是666,创建文件默认权限是666-022=644,除了Ubuntu普通用户新创建的文件默认的权限是666-002=664
  • 目录起始值是777,在rocky服务器所有用户和ubuntu的root用户新创建目录默认值是777-022=755,Ubuntu普通用户新创建目录值是775。

查看当前的umask:

1)rockyLinux:
root@study:~# umask
0022
root@study:~# su - wmn
上一次登录: 2026年09月10日 星期四 08:13:23 CST 于 pts/1
wmn@study:~$ umask
0022
2)ubuntu用户:
root@strudy:~# umask
0022
root@strudy:~# su - wmn
wmn@strudy:~$ umask
0002

修改umask:

1)临时修改了,rocky和ubuntu只能root用户才能修改root用户的,其他用户不能修改:
root@strudy:~# umask 0027
root@strudy:~# umask
0027
查看创建的文件及目录:
root@strudy:~# touch file1.txt
root@strudy:~# ls -l file1.txt
-rw-r----- 1 root root 0 Sep 10 08:29 file1.txt
root@strudy:~# mkdir dir01
root@strudy:~# ls -ld dir01
drwxr-x--- 2 root root 4096 Sep 10 08:29 dir01
2)永久修改:
wmn@study:~$ vim .bashrc 
umask 0027
wmn@study:~$ source .bashrc
wmn@study:~$ source .bashrc
wmn@study:~$ umask
0027

5.4 实战案例:

5.4.1 需求:

为若依项目配置合理的权限:

目录文件 属主 属组 权限 说明
/opt/ruoyi ruoyi ruoyi 755 应用根目录
/opt/ruoyi/config ruoyi ruoyi 750 配置文件(组内可以访问)
/opt/ruoyi/logs ruoyi ruoyi 755 日志目录
/opt/ruoyi/backend/ruoyi-admin.jar ruoyi ruoyi 644 jar包

5.4.2 实施步骤

1)创建用户和组:
wmn@study:~$ sudo useradd ruoyi
[sudo] wmn 的密码:
wmn@study:~$ id ruoyi
uid=3010(ruoyi) gid=3013(ruoyi) 组=3013(ruoyi)
2)创建目录结构:
wmn@study:~$ sudo mkdir -p  /opt/ruoyi/{config,logs,backend}
wmn@study:~$ sudo touch /opt/ruoyi/backend/ruoyi-admin.jar
wmn@study:~$ sudo tree /opt/ruoyi
/opt/ruoyi
├── backend
│   └── ruoyi-admin.jar
├── config
└── logs
3)配置属组和属主:
wmn@study:~$ sudo chown -R ruoyi:ruoyi /opt/ruoyi
wmn@study:~$ ls -ld /opt/ruoyi
drwxr-x---. 5 ruoyi ruoyi 47  9月10日 08:44 /opt/ruoyi
4)配置权限:
wmn@study:~$ sudo chmod 755 /opt/ruoyi
wmn@study:~$ ls -ld /opt/ruoyi
drwxr-xr-x. 5 ruoyi ruoyi 47  9月10日 08:44 /opt/ruoyi

wmn@study:~$ sudo chmod 750 /opt/ruoyi/config
wmn@study:~$ ls -ld /opt/ruoyi/config
drwxr-x---. 2 ruoyi ruoyi 6  9月10日 08:44 /opt/ruoyi/config

wmn@study:~$ sudo chmod 755 /opt/ruoyi/logs
wmn@study:~$ ls -ld /opt/ruoyi/logs
drwxr-xr-x. 2 ruoyi ruoyi 6  9月10日 08:44 /opt/ruoyi/logs

wmn@study:~$ sudo chmod 644 /opt/ruoyi/backend/ruoyi-admin.jar
wmn@study:~$ sudo ls -ld /opt/ruoyi/backend/ruoyi-admin.jar
-rw-r--r--. 1 ruoyi ruoyi 0  9月10日 08:46 /opt/ruoyi/backend/ruoyi-admin.jar

5.5 删除文件要有目录权限

  • 说明

因为目录存放的是文件名和inode号对应关系,当我们删除文件的时候,是删除的文件名和inode号对应的关系,而块数据和inode处于待释放状态。所以想要删除文件需要目录的可读可写权限。

  • 案例:

实验一目录有权限,文件权限是000

1)创建目录及授权:
root@study:~# mkdir -p /opt/data
root@study:~# echo "wmn12345" >>/opt/data/file1.txt
root@study:~# chmod 777 /opt/data
root@study:~# chmod 000 /opt/data/file1.txt 
root@study:~# ls -ld /opt/data /opt/data/file1.txt 
drwxrwxrwx. 2 root root 23  9月10日 08:59 /opt/data
----------. 1 root root  9  9月10日 08:59 /opt/data/file1.txt
2)进行测试:
root@study:~# su - jinghui 
jinghui@study:~$ ls -l /opt/data/file1.txt 
----------. 1 root root 9  9月10日 08:59 /opt/data/file1.txt
jinghui@study:~$ touch /opt/data/jinghui.txt
jinghui@study:~$ echo "12345" >> /opt/data/jinghui.txt
jinghui@study:~$ ls -ld /opt/data/*
----------. 1 root    root    9  9月10日 08:59 /opt/data/file1.txt
-rw-r--r--. 1 jinghui jinghui 6  9月10日 09:01 /opt/data/jinghui.txt
jinghui@study:~$ rm -rf  /opt/data/*
jinghui@study:~$ ls /opt/data/ -l
总计 0

实验二:目录无权限,文件777

1)设置目录权限及文件创建及权限:
root@study:~# mkdir -p /opt/data2
root@study:~# touch /opt/data2/file2.txt
root@study:~# chmod 000 /opt/data2
root@study:~# chmod 777 /opt/data2/file2.txt
root@study:~# ls -dl /opt/data2/file2.txt /opt/data2
d---------. 2 root root 23  9月10日 09:04 /opt/data2
-rwxrwxrwx. 1 root root  0  9月10日 09:04 /opt/data2/file2.txt
2)进行测试:
root@study:~# mkdir -p /opt/data2
root@study:~# touch /opt/data2/file2.txt
root@study:~# chmod 000 /opt/data2
root@study:~# chmod 777 /opt/data2/file2.txt
root@study:~# ls -dl /opt/data2/file2.txt /opt/data2
d---------. 2 root root 23  9月10日 09:04 /opt/data2
-rwxrwxrwx. 1 root root  0  9月10日 09:04 /opt/data2/file2.txt

posted on 2026-09-12 15:59  wangmengnan  阅读(17)  评论(0)    收藏  举报

导航