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 复制代码
hnlinux@runoob.com:~$ whoami //显示当前用户
hnlinux
hnlinux@runoob.com:~$ pwd //显示当前目录
/home/hnlinux
hnlinux@runoob.com:~$ su root //切换到root用户
密码: 
root@runoob.com:/home/hnlinux# whoami 
root
root@runoob.com:/home/hnlinux# pwd
/home/hnlinux

切换用户,改变环境变量

shell 复制代码
hnlinux@runoob.com:~$ whoami //显示当前用户
hnlinux
hnlinux@runoob.com:~$ pwd //显示当前目录
/home/hnlinux
hnlinux@runoob.com:~$ su - root //切换到root用户
密码: 
root@runoob.com:/home/hnlinux# whoami 
root
root@runoob.com:/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 系统管理员可以有效地管理文件权限和用户/组,确保系统的安全性和数据的完整性。

相关推荐
吉大一菜鸡几秒前
FPGA学习(基于小梅哥Xilinx FPGA)学习笔记
笔记·学习·fpga开发
WTT001129 分钟前
2024楚慧杯WP
大数据·运维·网络·安全·web安全·ctf
苹果醋337 分钟前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
日记跟新中1 小时前
Ubuntu20.04 修改root密码
linux·运维·服务器
唐小旭1 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python
码农君莫笑1 小时前
信管通低代码信息管理系统应用平台
linux·数据库·windows·低代码·c#·.net·visual studio
BUG 4041 小时前
Linux——Shell
linux·运维·服务器
大霞上仙2 小时前
Linux 多命令执行
linux·运维·服务器
冷心笑看丽美人2 小时前
探索 Samba 服务器:搭建跨平台文件共享的桥梁
运维·服务器