06_Linux 文件权限与管理命令

系列文章导航:01_Linux基础操作CentOS7学习笔记-CSDN博客

文章目录

  • Linux 文件权限与管理命令
    • 一、Linux 文件类型
    • 二、用户/组管理
      • 用户相关文件
      • 用户信息解析
      • 用户密码管理:`shadow` 阴影文件解析
      • 用户管理命令
          1. **`useradd`**:添加新用户
          1. **`usermod`**:修改用户信息
          1. **`userdel`**:删除用户
          1. **`chage`**:用户密码管理
          1. **`passwd`**:更改用户密码
          1. **`id`**:显示用户 ID 信息
          1. **`su`**:切换用户身份
          1. **`w`**:显示当前登录用户信息
          1. **`who`**:显示系统中的用户信息
          1. **`whoami`**:显示当前用户名称
      • 组管理命令
          1. **`groupadd`**:添加新组
          1. **`groupmod`**:修改组信息
          1. **`groupdel`**:删除组
          1. **`groupmems`**:组成员设置命令
          1. **`gpasswd`**:管理组密码
          1. **`groups`**:显示用户所属的组
    • 三、权限管理
      • 文件权限
          1. chmod - 改变文件模式
          1. chown - 改变文件所有者
          1. chgrp - 改变文件组
      • 特殊权限
          1. setuid、setgid、sticky - 特殊权限
          1. umask - 设置文件创建屏蔽字
          1. setfacl - 设置文件访问控制列表
          1. getfacl - 获取文件访问控制列表
          1. chattr - 改变文件属性
          1. lsattr - 显示文件属性

Linux 文件权限与管理命令

在 Linux 系统中,文件权限和用户/组管理是保证系统安全性和数据完整性的重要机制。本章将详细介绍 Linux 中用于管理文件权限和用户/组的相关命令。


一、Linux 文件类型

在 Linux 系统中,文件类型是多样化的,包括普通文件、目录文件、块设备文件等。我们可以通过 file 命令来查看文件的具体类型:

shell 复制代码
file 文件名  # 查看文件类型

常见的文件类型包括:

  • b:块设备文件
  • c:字符设备文件
  • d:目录文件
  • p:管道文件
  • -:普通文件/文本文件
  • l:链接文件
  • s:套接字文件

二、用户/组管理

用户相关文件

在 Linux 系统中,用户信息被存储在多个关键文件中,包括:

  • /etc/login.defs: 用户建立的模板 决定默认调用useradd的一些选项

  • /etc/passwd: 存储用户信息(决定一个用户是否存在)

  • /etc/shadow: 存储密码信息

  • /etc/group:存储组信息

  • /etc/gshadow:存储组密码信息,当前没有启用组密码功能

  • $HOME:用户的家目录 /home/user01 /root

  • ~/.bash_profile: 环境变量

  • ~/.bashrc: bash配置文件

  • ~/.bash_logout: 注销用户执行的脚本

  • /etc/skel/*: 用户环境配置文件模板(建立用户家目录后,拷贝skel目录下所有文件到用户家)

用户信息解析

/etc/passwd 文件中的用户信息由多个字段组成,以冒号分隔:

shell 复制代码
username:x:UID:GID:GECOS:Home_Directory:Shell

例如:

shell 复制代码
cen2333:x:1000:1000:cen2333:/home/cen2333:/bin/bash
1.cen2333用户名
2.x  密码占未符  如果此为空 登陆无需密码
3.1000 用户uid
4.1000 用户组gid
5.cen2333用户的注释信息
6./home/cen2333  用户家目录
7./bin/bash   用户登陆shell

/etc/passwd文件的 密码中 x 代表所有密码存放到 /etc/shadow (把用户密码分离)

shell 复制代码
    用户密码分离  --> Linux 中 shadow 功能定义
    shadow 定义方法 
        authconfig-tui 设定  [*]  use shadow passwords 
            使用 shadow  --> 密码存放到 /etc/shadow 
            不使用 shadow  --> 密码存放 /etc/passwd (不推荐使用)

​ 假如把 /etc/passwd 中密码部分删除 (x 去掉) ,登陆不校验密码

​ 用户登录为管理员或者用户切换 ( su - root ) 都不需要密码

用户密码管理:shadow 阴影文件解析

Linux 系统通过 shadow 功能增强密码的安全性,将密码信息存储在 /etc/shadow 文件中,以提供更细粒度的密码策略控制。以下是 /etc/shadow 文件中记录的字段详解:

shell 复制代码
username:hashed_password:last_change:minimum:maximum:warning:inactive:expire:

以一个实例来说明这些字段的含义:

shell 复制代码
user1001:$1$SefNk95S$OY4g7fMVcRNvcxLJWwW.91:14940:0:99999:7:0:14950:
  1. 用户名 (user1001): 这是账户的用户名。管理员可以通过 usermod -l otherName user1001 来更改用户名。

  2. 加密密码 ($1$SefNk95S$OY4g7fMVcRNvcxLJWwW.91): 这是经过加密的密码。如果这一字段为空,表示该用户不需要密码即可登录。密码可以通过 passwd user1001 命令来更改。

  3. 密码最后修改时间 (14940): 这是自1970年1月1日以来的天数,表示密码最后被修改的时间。如果设置为0,则用户在下次登录时将被强制修改密码。可以通过 chage -d 0 user1001 来设置。

  4. 密码最小修改间隔 (0): 这是用户两次密码修改之间的最小天数。如果设置为0,用户可以随时更改密码。可以通过 chage -m 3 user1001 来设置为3天。

  5. 密码最大有效期限 (99999): 这是密码的最大有效天数。如果设置为15天,则用户必须每15天更改一次密码。可以通过 chage -M 15 user1001 来设置。

  6. 密码过期前警告天数 (7): 这是在密码过期前系统开始警告用户的天数。可以通过 chage -W 7 user1001 来设置。

  7. 密码过期后账户锁定天数 (0): 这是密码过期后用户账户被锁定的天数。如果设置为0,表示账户不会被锁定。可以通过 chage -I 3 user1001 来设置为3天。

  8. 账户过期时间 (14950): 这是账户过期的绝对时间,表示自1970年1月1日以来的天数。账户过期后,用户将无法登录。可以通过 chage -E 2019-07-22 user1001 来设置。

  9. 保留标志 (通常为空): 这个字段目前没有被使用,保留以备将来使用。

通过这些字段,系统管理员可以精确控制用户的密码策略,包括密码的加密方式、修改间隔、有效期、警告期和账户锁定策略,从而增强系统的安全性。

用户管理命令

1. useradd:添加新用户

Linux useradd 命令用于建立用户帐号。

useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码。而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中。

语法

shell 复制代码
useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>][-u <uid>][用户帐号]

shell 复制代码
useradd -D [-b][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>]

参数说明

  • -c<备注>  加上备注文字。备注文字会保存在passwd的备注栏位中。
  • -d<登入目录>  指定用户登入时的起始目录。
  • -D  变更预设值.
  • -e<有效期限>  指定帐号的有效期限。
  • -f<缓冲天数>  指定在密码过期后多少天即关闭该帐号。
  • -g<群组>  指定用户所属的群组。
  • -G<群组>  指定用户所属的附加群组。
  • -m  制定用户的登入目录。
  • -M  不要自动建立用户的登入目录。
  • -n  取消建立以用户名称为名的群组.
  • -r  建立系统帐号。
  • -s   指定用户登入后所使用的shell。
  • -u  指定用户ID。

实例

添加一般用户

shell 复制代码
# useradd tt

为添加的用户指定相应的用户组

shell 复制代码
# useradd -g root tt

创建一个系统用户

shell 复制代码
# useradd -r tt

为新添加的用户指定home目录

shell 复制代码
# useradd -d /home/myd tt

建立用户且制定ID

shell 复制代码
# useradd caojh -u 544
2. usermod:修改用户信息

Linux usermod命令用于修改用户帐号。

usermod可用来修改用户帐号的各项设定。

语法

shell 复制代码
usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s <shell>][-u <uid>][用户帐号]

参数说明

  • -c<备注>  修改用户帐号的备注文字。
  • -d登入目录>  修改用户登入时的目录。
  • -e<有效期限>  修改帐号的有效期限。
  • -f<缓冲天数>  修改在密码过期后多少天即关闭该帐号。
  • -g<群组>  修改用户所属的群组。
  • -G<群组>  修改用户所属的附加群组。
  • -l<帐号名称>  修改用户帐号名称。
  • -L  锁定用户密码,使密码无效。
  • -s  修改用户登入后所使用的shell。
  • -u  修改用户ID。
  • -U  解除密码锁定。

实例

更改登录目录

shell 复制代码
# usermod -d /home/hnlinux root

改变用户的uid

shell 复制代码
# usermod -u 777 root
3. userdel:删除用户

Linux userdel命令用于删除用户帐号。

userdel可删除用户帐号与相关的文件。若不加参数,则仅删除用户帐号,而不删除相关文件。

语法

shell 复制代码
userdel [-r][用户帐号]

参数说明

  • -r  删除用户登入目录以及目录中所有文件。

实例

删除用户账号

shell 复制代码
# userdel hnlinux
4. chage:用户密码管理

chage 命令用于更改用户账户的密码政策信息,如密码的有效期、密码修改间隔、密码过期警告期等。以下是 chage 命令的一些关键功能和用法:

主要功能

  • 修改用户密码的有效期
  • 设置密码必须更改的最小和最大时间间隔
  • 配置密码过期前的警告期
  • 规定密码过期后账户锁定的时间

命令语法

shell 复制代码
chage [选项] 用户名

选项说明

  • -d:设置密码最后修改时间。如果设置为 0,则用户在下次登录时必须更改密码。
  • -M:设置密码的最大有效期限(天数)。例如,设置为 30 表示密码每 30 天必须更改一次。
  • -m:设置密码的最小修改间隔(天数)。例如,设置为 3 表示用户可以在至少 3 天后更改密码。
  • -W:设置密码过期前警告用户的天数。例如,设置为 7 表示在密码过期前 7 天开始警告用户。
  • -I:设置密码过期后账户被锁定的天数。例如,设置为 1 表示密码过期后 1 天账户将被锁定。
  • -E:设置账户的过期日期。

示例

以下是如何使用 chage 命令来设置用户 cen233 的密码策略,以满足特定需求的示例:

需求

  • 新建用户 cen233,初始密码为 redhat
  • 第一次登录时强制修改密码
  • 每隔 30 天更新密码
  • 更新提示前 3 天提醒
  • 延期 1 天
  • 用户使用期限为 2 年
shell 复制代码
# 创建用户 "cen233"
useradd cen233

# 设置初始密码为 "redhat"
echo "redhat" | passwd --stdin cen233

# 使用 chage 命令设置密码策略
chage -d 0 -M 30 -W 3 -I 1 -E 2025-07-12 cen233
  • -d 0:强制用户在第一次登录时修改密码。
  • -M 30:设置密码的最大使用天数为 30 天。
  • -W 3:在密码过期前 3 天提醒用户更新密码。
  • -I 1:设置用户密码过期后延期 1 天禁用账户。
  • -E 2025-07-12:设置用户的使用期限为到 2025 年 7 月 12 日。

通过这些设置,您可以确保用户的密码定期更新,同时在密码过期前给予用户适当的警告,以维护系统的安全性。

黑客帐号 复制root ID号 并 不使用密码 直接登录

shell 复制代码
echo "hk01::0:0::/root:/bin/bash" >> /etc/passwd
5. passwd:更改用户密码
shell 复制代码
passwd  设置密码
    -d  去掉密码(危险)
    -l   锁定用户
    -u  解锁
    -S  了解用户密码信息状态

# passwd     ---给当前用户设置密码
# passwd   abc  ---给abc设置密码,只有root用户才有权限给其他用户设置密码

使用非交互模式设置密码: ( | 管道,进程间通信的机制 )

bash 复制代码
echo "123456" | passwd --stdin abc
6. id:显示用户 ID 信息

Linux id命令用于显示用户的ID,以及所属群组的ID。

id 会显示用户以及所属群组的实际与有效 ID,若两个 ID 相同,则仅显示实际 ID,若仅指定用户名称,则显示目前用户的 ID。

该命令会显示用户的 UID(User ID)、GID(Group ID)以及附属于用户的所有组 ID。

语法

shell 复制代码
id [-gGnru][--help][--version][用户名称]

参数说明

  • -g 或 --group  显示用户所属群组的ID。
  • -G 或 --groups  显示用户所属附加群组的ID。
  • -n 或 --name  显示用户,所属群组或附加群组的名称。
  • -r 或 --real  显示实际ID。
  • -u 或 --user  显示用户ID。
  • -help  显示帮助。
  • -version  显示版本信息。

实例

显示当前用户信息:

shell 复制代码
[root@lianghui ~]# id
uid=0(root) gid=0(root) groups=0(root)

显示用户群组的 ID:

shell 复制代码
# id -g
0

显示所有群组的 ID:

shell 复制代码
# id -G
0 1 2 3 4 5 6 10

显示指定用户信息

shell 复制代码
[root@lianghui ~]# id redhat
uid=1002(redhat) gid=1002(redhat) groups=1002(redhat),1(bin),12(mail),2234(itgrp)
7. su:切换用户身份

Linux su(英文全拼:switch user)命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。

使用权限:所有使用者。su 切换用户 '-' 指切换用户时加载该用户的环境变量配置。

语法

shell 复制代码
su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]

参数说明

  • -f 或 --fast 不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh
  • -m -p 或 --preserve-environment 执行 su 时不改变环境变数
  • -c command 或 --command=command 变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者
  • -s shell 或 --shell=shell 指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell
  • --help 显示说明文件
  • --version 显示版本资讯
    • -l 或 --login 这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root
  • USER 欲变更的使用者帐号
  • ARG 传入新的 shell 参数

实例

变更帐号为 root 并在执行 ls 指令后退出变回原使用者

shell 复制代码
su -c ls root

变更帐号为 root 并传入 -f 参数给新执行的 shell

shell 复制代码
su root -f

变更帐号为 clsung 并改变工作目录至 clsung 的家目录(home dir)

shell 复制代码
su - clsung

切换用户

shell 复制代码
[email protected]:~$ whoami //显示当前用户
hnlinux
[email protected]:~$ pwd //显示当前目录
/home/hnlinux
[email protected]:~$ su root //切换到root用户
密码: 
[email protected]:/home/hnlinux# whoami 
root
[email protected]:/home/hnlinux# pwd
/home/hnlinux

切换用户,改变环境变量

shell 复制代码
[email protected]:~$ whoami //显示当前用户
hnlinux
[email protected]:~$ pwd //显示当前目录
/home/hnlinux
[email protected]:~$ su - root //切换到root用户
密码: 
[email protected]:/home/hnlinux# whoami 
root
[email protected]:/home/hnlinux# pwd //显示当前目录
/root
8. w:显示当前登录用户信息

Linux w命令用于显示目前登入系统的用户信息。

执行这项指令可得知目前登入系统的用户有哪些人,以及他们正在执行的程序。

单独执行 w 指令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。

语法

shell 复制代码
w [-fhlsuV][用户名称]

参数说明

  • -f  开启或关闭显示用户从何处登入系统。
  • -h  不显示各栏位的标题信息列。
  • -l  使用详细格式列表,此为预设值。
  • -s  使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间。
  • -u  忽略执行程序的名称,以及该程序耗费CPU时间的信息。
  • -V  显示版本信息。

实例

显示当前用户

shell 复制代码
 // 显示当前用户登录信息及执行的命令
[root@lianghui ~]# w
 13:31:37 up  2:15,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      11:17    2:14m  0.03s  0.03s -bash
root     pts/0    192.168.100.1    11:17    1.00s  0.97s  0.00s w

不显示登录位置

shell 复制代码
[root@lianghui ~]# w -f
 13:31:41 up  2:15,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1      11:17    2:14m  0.03s  0.03s -bash
root     pts/0     11:17    5.00s  0.98s  0.00s w -f

以精简模式显示

shell 复制代码
[root@lianghui ~]# w -s
 13:31:52 up  2:15,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM              IDLE WHAT
root     tty1                       2:14m -bash
root     pts/0    192.168.100.1     0.00s w -s

不显示标题

shell 复制代码
[root@lianghui ~]# w -h
root     tty1                      11:17    2:14m  0.03s  0.03s -bash
root     pts/0    192.168.100.1    11:17    4.00s  0.98s  0.00s w -h
M       LOGIN@  IDLE  JCPU  PCPU WHAT
root   tty7   :0        Thu12  31:39m 10:10  0.60s gnome-session
root   pts/0  :0.0       17:09  2:18m 15.26s 0.15s bash
root   pts/1  192.168.1.17   18:51  1.00s 1.24s 0.14s -bash
root   pts/2  192.168.1.17   19:48  60.00s 0.05s 0.05s -bash
9. who:显示系统中的用户信息

Linux who命令用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者 ID、使用的终端机、从哪边连上来的、上线时间、呆滞时间、CPU 使用量、动作等等。

使用权限:所有使用者都可使用。

语法

shell 复制代码
who - [husfV] [user]

参数说明

  • -H 或 --heading:显示各栏位的标题信息列;
  • -i 或 -u 或 --idle:显示闲置时间,若该用户在前一分钟之内有进行任何动作,将标示成"."号,如果该用户已超过24小时没有任何动作,则标示出"old"字符串;
  • -m:此参数的效果和指定"am i"字符串相同;
  • -q 或--count:只显示登入系统的帐号名称和总人数;
  • -s:此参数将忽略不予处理,仅负责解决who指令其他版本的兼容性问题;
  • -w 或-T或--mesg或--message或--writable:显示用户的信息状态栏;
  • --help:在线帮助;
  • --version:显示版本信息。

实例

显示当前登录系统的用户

shell 复制代码
[root@lianghui ~]# who
root     tty1         2023-07-23 11:17
root     pts/0        2023-07-23 11:17 (192.168.100.1)

显示标题栏

shell 复制代码
# who -H

显示用户登录来源

shell 复制代码
# who -l -H

显示终端属性

shell 复制代码
[root@lianghui ~]# who -T -H
NAME       LINE         TIME             COMMENT
root     + tty1         2023-07-23 11:17
root     + pts/0        2023-07-23 11:17 (192.168.100.1)

只显示当前用户

shell 复制代码
[root@lianghui ~]# who -m -H
NAME     LINE         TIME             COMMENT
root     pts/0        2023-07-23 11:17 (192.168.100.1)

精简模式显示

shell 复制代码
[root@lianghui ~]# who -q
root root
# users=2
10. whoami:显示当前用户名称

Linux whoami命令用于显示自身用户名称。

显示自身的用户名称,本指令相当于执行"id -un"指令。

语法

shell 复制代码
whoami [--help][--version]

参数说明

  • --help  在线帮助。
  • --version  显示版本信息。

实例

显示用户名

shell 复制代码
# whoami 
root

组管理命令

1. groupadd:添加新组

groupadd 命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。

相关文件:

  • /etc/group 组账户信息。
  • /etc/gshadow 安全组账户信息。
  • /etc/login.defs Shadow密码套件配置。

语法

groupadd 命令 语法格式如下:

shell 复制代码
groupadd [-g gid [-o]] [-r] [-f] group

参数说明:

  • -g:指定新建工作组的 id
  • -r:创建系统工作组,系统工作组的组 ID 小于 500;
  • -K:覆盖配置文件 /etc/login.defs
  • -o:允许添加组 ID 号不唯一的工作组。
  • -f,--force: 如果指定的组已经存在,此选项将失明了仅以成功状态退出。当与 -g 一起使用,并且指定的 GID_MIN 已经存在时,选择另一个唯一的 GID(即 -g 关闭)。

实例

创建一个新的组,并添加组 ID。

shell 复制代码
#groupadd -g 344 runoob

此时在 /etc/group 文件中产生一个组 ID(GID)是 344 的项目。

2. groupmod:修改组信息

Linux groupmod命令用于更改群组识别码或名称。

需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作。

语法

shell 复制代码
groupmod [-g <群组识别码> <-o>][-n <新群组名称>][群组名称]

参数

  • -g <群组识别码>  设置欲使用的群组识别码。
  • -o  重复使用群组识别码。
  • -n <新群组名称>  设置欲使用的群组名称。

实例

修改组名

shell 复制代码
[root@lianghui ~]# groupadd linuxso 
[root@lianghui ~]# tail -1 /etc/group 
linuxso:x:500: 
[root@lianghui ~]# tail -1 /etc/group 
linuxso:x:500: 
[root@lianghui ~]# groupmod -n linux linuxso 
[root@lianghui ~]# tail -1 /etc/group 
linux:x:500:
3. groupdel:删除组

Linux groupdel命令用于删除群组。

需要从系统上删除群组时,可用groupdel(group delete)指令来完成这项工作。倘若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。

语法

shell 复制代码
groupdel [群组名称]

实例

删除一个群组

shell 复制代码
# groupdel hnuser
4. groupmems:组成员设置命令

groupmems 命令用于管理 Linux 系统中组的成员。以下是该命令的常用选项及示例:

  • -a:将某个用户加入指定组

    shell 复制代码
    # 将用户 it01 加入 itgrp 组
    groupmems -a it01 -g itgrp
    
    # 将用户 it03 加入 itgrp 组
    groupmems -a it03 -g itgrp
    
    # 将用户 it05 加入 itgrp 组
    groupmems -a it05 -g itgrp
  • -d:将某个用户从指定组移除

    shell 复制代码
    # 从 itgrp 组中移除用户 it03
    groupmems -d it03 -g itgrp
  • -p:清空指定组的所有成员

    shell 复制代码
    # 清空 itgrp 组的所有成员
    groupmems -p -g itgrp
  • -l:查询指定组中的成员

    shell 复制代码
    # 查询 itgrp 组中的所有成员
    groupmems -l -g itgrp

通过使用 groupmems 命令,可以方便地管理用户组的成员,确保组的成员信息保持最新。

5. gpasswd:管理组密码

gpasswd 是一个用于管理 Linux 系统工作组文件 /etc/group/etc/gshadow 的工具,它允许将用户添加到组或从组中删除用户。

语法

shell 复制代码
gpasswd [选项] 组名

可选项参数

  • -a:添加用户到组。
  • -d:从组删除用户。
  • -A:指定可以管理该组的管理员。
  • -M:指定组成员列表,与 -A 类似。
  • -r:删除组的密码。
  • -R:限制只有组内的成员可以使用 newgrp 命令加入该组。

实例

  1. groupname 组设置密码,使得知道该组密码的用户可以临时加入该组:
shell 复制代码
gpasswd groupname
  1. 将用户 peter 设置为 users 组的管理员,这样 peter 就可以将其他用户添加到 users 组:
shell 复制代码
gpasswd -A peter users
  1. peter 作为管理员,将 maryallen 添加到 users 组:
shell 复制代码
gpasswd -a mary users
gpasswd -a allen users
  1. 如果您想添加一个用户到一个组并保留他们之前所属的所有组,可以使用以下命令:
shell 复制代码
gpasswd -a user_name group_name

注意:使用 usermod -G group_name user_name 命令添加用户到指定组会清空用户之前所属的所有组。

6. groups:显示用户所属的组

groups 命令用于显示当前用户所属的所有用户组。

语法格式

shell 复制代码
groups [选项] [用户]

常用参数

  • -g:仅显示用户所属的主组 ID。
  • -n:显示用户及其所属组的名称,而不是 ID。
  • -o:与 -n 选项结合使用,仅显示用户及其所属组的名称。
  • 用户:指定要显示所属组的用户。如果未指定用户,则显示当前用户所属的组。

参考示例

  1. 显示当前用户所属的所有组:
shell 复制代码
groups
  1. 显示指定用户所属的所有组:
shell 复制代码
groups username
  1. 显示当前用户的主组 ID:
shell 复制代码
groups -g
  1. 显示当前用户及其所属组的名称:
shell 复制代码
groups -n
  1. 仅显示当前用户及其所属组的名称:
shell 复制代码
groups -n -o

补充介绍 :Linux 系统中,每个用户可以属于多个用户组,这些组通常用来控制文件和目录的访问权限。groups 命令可以帮助您确定当前用户所属的所有组,从而更好地管理和维护文件系统的安全性。


三、权限管理

文件权限

Linux 文件权限分为三级:文件所有者、用户组、其他用户。权限包括读(r)、写(w)和执行(x)。

1. chmod - 改变文件模式

chmod命令用于更改文件或目录的访问权限。权限分为三级:文件所有者(Owner)、用户组(Group)、其他用户(Other Users)。权限可以通过八进制数字模式或符号模式来设置。

语法:

shell 复制代码
chmod [-cfvR] mode file...

参数说明:

  • mode:权限设定字串,如[ugoa...][[+-=][rwxX]...]
  • ugo:分别代表用户(user)、组(group)、其他(others)
  • +增加权限,-取消权限,=唯一设定权限
  • r读,w写,x执行,X当文件是个目录或者已经设定为可执行时,表示可执行

示例:

shell 复制代码
chmod u+x file  # 给文件所有者增加执行权限
chmod 755 file  # 设置文件权限为所有者可读写执行,组和其他用户可读可执行
2. chown - 改变文件所有者

chown命令用于更改文件或目录的所有者和/或所属组。只有超级用户(root)或文件所有者可以执行此命令。

语法:

shell 复制代码
chown [-cfhvR] user[:group] file...

参数说明:

  • user:新的文件所有者
  • group:新的文件所属组
  • -c:仅显示更改的部分
  • -f:忽略错误信息
  • -R:递归处理目录

示例:

shell 复制代码
chown user:group file  # 更改文件的所有者和组
chown -R user:group dir  # 递归更改目录及其子目录的所有者和组
3. chgrp - 改变文件组

chgrp命令用于更改文件或目录的所属组。与chown不同,普通用户也可以更改文件的组,只要他们是该组的成员。

语法:

shell 复制代码
chgrp [-cfhRv] group file...

参数说明:

  • group:新的文件所属组
  • -c:仅显示更改的部分
  • -f:忽略错误信息
  • -R:递归处理目录

示例:

shell 复制代码
chgrp group file  # 更改文件的所属组
chgrp -R group dir  # 递归更改目录及其子目录的所属组

特殊权限

4. setuid、setgid、sticky - 特殊权限
  • setuid:设置文件的冒险位,执行文件时临时具有文件所有者的权限。
  • setgid:设置目录的强制位,新创建的文件继承父目录的组。
  • sticky:设置目录的粘滞位,用户只能删除自己的文件。

示例:

shell 复制代码
chmod u+s file  # 设置文件的setuid位
chmod g+s dir   # 设置目录的setgid位
chmod o+t dir   # 设置目录的sticky位
5. umask - 设置文件创建屏蔽字

umask命令用于设置文件创建时的默认权限屏蔽字。

示例:

shell 复制代码
umask 0022  # 设置默认的文件屏蔽字,新文件默认权限为644
6. setfacl - 设置文件访问控制列表

setfacl命令用于设置文件或目录的访问控制列表(ACL),允许更精细的权限管理。

语法:

shell 复制代码
setfacl [选项] file/directory

参数说明:

  • -m:修改现有的ACL
  • -x:移除现有的ACL
  • -R:递归应用ACL

示例:

shell 复制代码
setfacl -m u:user:rwx file  # 设置用户对文件的权限
setfacl -R -m u:user:rwx dir  # 递归设置用户对目录及其子目录的权限
7. getfacl - 获取文件访问控制列表

getfacl命令用于显示文件或目录的访问控制列表(ACL)。

示例:

shell 复制代码
getfacl file  # 显示文件的ACL
8. chattr - 改变文件属性

chattr命令用于改变文件的属性,如设置文件为只读或不可变。

语法:

shell 复制代码
chattr [+-=] attribute file

参数说明:

  • +:开启属性
  • -:关闭属性
  • =:设置属性

示例:

shell 复制代码
chattr +i file  # 设置文件为不可变
9. lsattr - 显示文件属性

lsattr命令用于显示文件的属性。

示例:

shell 复制代码
lsattr file  # 显示文件的属性

通过这些命令和设置,Linux 系统管理员可以有效地管理文件权限和用户/组,确保系统的安全性和数据的完整性。

相关推荐
lulinhao6 分钟前
HCIA/HCIP基础知识笔记汇总
网络·笔记
小麦嵌入式20 分钟前
Linux驱动开发实战(十一):GPIO子系统深度解析与RGB LED驱动实践
linux·c语言·驱动开发·stm32·嵌入式硬件·物联网·ubuntu
刘若水21 分钟前
Linux: 进程信号初识
linux·运维·服务器
杉之36 分钟前
SpringBlade 数据库字段的自动填充
java·笔记·学习·spring·tomcat
阳小江1 小时前
Docker知识点
运维·docker·容器
WarPigs1 小时前
blender场景导入Unity的流程(个人总结)
笔记
只是橘色仍温柔2 小时前
xshell可以ssh连接,但vscode不行
运维·vscode·ssh
IT里的交易员2 小时前
【系统】换硬盘不换系统,使用WIN PE Ghost镜像给电脑无损扩容换硬盘
运维·电脑
共享家95273 小时前
深入剖析Linux常用命令,助力高效操作
linux·运维·服务器
大刘讲IT3 小时前
制造业数字化转型:流程改造先行还是系统固化数据?基于以MTO和MTS的投资回报分析
运维·经验分享·生活·产品经理·数据可视化