组管理

组管理

  • 在 Linux 系统中,用户组(Group)是用户管理的重要组成部分。用户组用于将多个用户归类到一起,以便更方便地管理权限和资源。
  • 在添加用户时会默认创建一个和用户名相同名字的组,并将该用户加入组

基本概念

  • 用户组:用户组是多个用户的集合。每个用户可以属于一个主组(Primary Group)和多个附加组(Supplementary Groups)。

  • 主组:每个用户必须属于一个主组,通常在创建用户时指定。

  • 附加组:用户可以选择性地加入多个附加组,以便获得额外的权限。

  • /etc/group 文件存储了系统中所有用户组的信息。

    • # 查看所有组信息
      cat /etc/group
      
  • /etc/gshadow 文件存储了用户组的加密密码和管理信息(仅 root 用户可访问)。

用户组管理命令

  • 使用 groupadd 命令创建新的用户组。

    • groupadd [选项] 组名
      
    • 选项 说明
      -g 指定 GID。
      -r 创建系统组(GID 通常小于 1000)。
  • 使用 groupmod 命令修改用户组的属性。

    • groupmod [选项] 组名
      
    • 选项 说明
      -g 修改 GID。
      -n 修改组名。
  • 使用 groupdel 命令删除用户组。

    • groupdel 组名
      

管理用户组成员

  • 查看用户组成员

    • 使用 groups 命令显示当前用户或指定用户所属的组。

    • groups [用户名]
      
    • 使用 id 命令显示用户的 UID、GID 和所属组。

    • id [用户名]
      
    • 使用 getent 命令查看组的成员列表。

    • getent group [组名]
      
      • 不加组名为查看系统数据库中的组信息(列出所有组)
  • 添加用户到组

    • 将用户添加到组中,可以使用 usermodgpasswd 命令。

    • usermod 命令用于修改用户属性,包括添加用户到附加组。

      • usermod -aG 组名 用户名
        
      • 选项说明:

        • -a:追加用户到附加组(避免覆盖现有附加组)。
        • -g:修改用户的主组(GID)
        • -G:指定附加组。
  • 从组中移除用户

    • 将用户从组中移除,可以使用 gpasswddeluser 命令。

    • deluser 命令用于从组中移除用户(适用于 Debian/Ubuntu 系统)。

      • deluser 用户名 组名
        
  • gpasswd 命令

    • gpasswd 命令的主要功能包括:

      • 设置或更改用户组的密码。
      • 添加或移除用户组成员。
      • 设置组管理员。
      • 管理组的成员列表。
    • 语法

      • gpasswd [选项] 组名
        
      • 不加选项为修改组的密码,为组设置密码后,非组成员可以通过密码临时切换到该组(使用 newgrp 命令)。

      • 常用选项

      选项 说明
      -a 添加用户到组。
      -d 从组中移除用户。
      -r 移除组的密码。
      -A 设置组管理员(可以管理组成员)。
      -M 设置组的成员列表(覆盖现有成员)。
      -R 限制普通用户使用 newgrp 切换到该组。
    • # 将用户 alice 添加到 developers 组:
      gpasswd -a alice developers
      
      # 设置 developers 组的成员为 alice 和 charlie:
      gpasswd -M alice,charlie developers
      

权限管理

基本介绍

  • 在 Linux 中,每个文件和目录都有三组权限:

    • 所有者权限:文件或目录的所有者的权限。
    • 组权限:文件或目录所属组的权限。
    • 其他用户权限:其他用户的权限。
  • 每组权限包括:

    • 读(r):允许查看文件内容或列出目录内容。
    • 写(w):允许修改文件内容或在目录中创建/删除文件。
    • 执行(x):允许执行文件或进入目录。
    • 无权限(-):无权限。
  • Linux 中,权限可以用数字表示:

    • 读(r) = 4
    • 写(w) = 2
    • 执行(x) = 1
  • 使用 ls -l 命令查看文件或目录的权限

    • -rw-r--r-- 1 alice developers 1024 Oct  2 10:00 file.txt
      
    • 第一个字符表示文件类型:

      • -:普通文件。
      • d:目录。
      • l:符号链接(软链接)。
      • c:字符设备文件。
      • b:块设备文件。
      • p:管道文件。
      • s:套接字文件。
    • 接下来的 9 个字符表示文件的权限,分为三组,每组 3 个字符:

      • 第一组 (rw-):文件所有者(user)的权限。
        • r:读权限。
        • w:写权限。
        • -:无执行权限。
      • 第二组 (r--):文件所属组(group)的权限。
      • 第三组 (r--):其他用户(others)的权限。
    • 硬链接数 (1)

      • 表示该文件的硬链接数量。
      • 对于文件,通常为 1(除非有额外的硬链接)。
      • 对于目录,硬链接数至少为 2(目录本身和 . 目录),每增加一个子目录,硬链接数加 1。
    • 文件所有者 (alice)

      • 表示该文件的所有者是用户 alice
    • 文件所属组 (developers)

      • 表示该文件所属的组是 developers
    • 文件大小 (1024)

      • 表示文件的大小,单位为字节(Byte)。
      • 这里是 1024 字节(即 1 KB)。
    • 最后修改时间 (Oct 2 10:00)

      • 表示文件最后一次被修改的日期和时间。
      • 格式为 月 日 时间
      • 如果文件的修改时间超过 6 个月,ls -l 会显示年份而不是时间。
    • 文件名 (file.txt)

      • 表示文件的名称。

修改文件或者目录所在组

  • 修改文件或目录的所属组

    • 使用 chgrpchown 命令可以修改文件或目录的所属组。

    • 使用 chgrp 命令

      • chgrp [新组名] [文件或目录]
        
      • # 将 file.txt 的组改为 developers
        chgrp developers file.txt  
        # 递归修改目录及其内容的组
        chgrp developers -R /path/to/directory  
        
    • 使用 chown 命令

      • chown :[新组名] [文件或目录]
        
      • # 将 file.txt 的组改为 developers
        chown :developers file.txt
        # 递归修改目录及其内容的组
        chown :developers -R /path/to/directory  
        
  • 修改文件或目录的所有者

    • 使用 chown 命令可以修改文件或目录的所有者。

      • chown [新所有者] [文件或目录]
        
      • chown alice file.txt  # 将 file.txt 的所有者改为 alice
        chown alice -R /path/to/directory  # 递归修改目录及其内容的所有者
        
    • 可以在 chown 命令中同时指定所有者和组,格式为 所有者:组

      • # 将 file.txt 的所有者改为 alice,组改为 developers
        chown alice:developers file.txt  
        # 递归修改目录及其内容的所有者和组
        chown alice:developers -R /path/to/directory  
        
  • 权限要求

    • 只有 root 用户具有 sudo 权限的用户 可以修改文件或目录的所有者和组。
    • 普通用户只能修改自己拥有的文件或目录的组,且只能将组修改为自己所属的组之一。
  • 递归修改

    • 使用 -R 选项可以递归修改目录及其内容的所有者和组。

权限含义

  • 文件权限的含义
    • 对文件来说,rwx 权限的含义如下:
      • r(读权限)
        • 允许读取文件内容。
        • 示例:可以使用 catless 等命令查看文件内容。
      • w(写权限)
        • 允许修改文件内容。
        • 示例:可以使用 echovim 等命令编辑文件。
      • x(执行权限)
        • 允许将文件作为程序执行。
        • 示例:对于脚本文件或二进制文件,需要 x 权限才能运行。
  • 目录权限的含义
    • 对目录来说,rwx 权限的含义与文件不同:
      • r(读权限)
        • 允许列出目录中的文件和子目录。
        • 示例:可以使用 ls 命令查看目录内容。
      • w(写权限)
        • 允许在目录中创建、删除或重命名文件和子目录。
        • 示例:可以使用 touchrmmv 等命令操作目录中的文件。
      • x(执行权限)
        • 允许进入目录或访问目录中的文件。
        • 示例:可以使用 cd 进入目录,或访问目录中的文件内容。
  • 注意事项
    • 目录的执行权限:如果没有 x 权限,即使有 r 权限,也无法访问目录中的文件。
    • 写权限的风险:对目录的写权限允许删除文件,即使文件本身是只读的。
    • root 用户:root 用户可以绕过权限限制,访问或修改任何文件或目录。

修改权限

  • 修改文件或目录的权限主要通过 chmod 命令实现。chmod 允许通过 符号模式数字模式 来设置权限。

  • 符号模式

    • 使用符号模式可以直观地添加、移除或设置权限。

    • chmod [who][operator][permissions] 文件或目录
      
    • who

      • u:所有者(user)。
      • g:组(group)。
      • o:其他用户(others)。
      • a:所有用户(all),等同于 ugo
    • operator

      • +:添加权限。
      • -:移除权限。
      • =:设置权限(覆盖原有权限)。
    • permissions

      • r:读权限。
      • w:写权限。
      • x:执行权限。
    • chmod u+x file.txt  # 给所有者添加执行权限
      chmod g-w file.txt  # 移除组的写权限
      chmod o=r file.txt  # 设置其他用户的权限为只读
      chmod a+rw file.txt # 给所有用户添加读写权限
      
  • 数字模式

    • 使用数字模式可以快速设置权限。每组权限用一个数字表示:

      • r = 4
      • w = 2
      • x = 1
    • 每组权限的值是三个权限值的和:

      • rwx = 4 + 2 + 1 = 7
      • rw- = 4 + 2 = 6
      • r-x = 4 + 1 = 5
      • r-- = 4
    • chmod [数字权限] 文件或目录
      
    • chmod 755 file.txt  # 设置权限为 rwxr-xr-x
      chmod 644 file.txt  # 设置权限为 rw-r--r--
      chmod 600 file.txt  # 设置权限为 rw-------
      
  • 递归修改权限

    • 如果需要修改目录及其内容的权限,可以使用 -R 选项。

    • 如果遇到某些文件或目录没有权限(例如,当前用户没有权限访问或修改这些文件),chmod 会跳过这些文件或目录,并继续处理其他有权限的文件或目录。

    • chmod -R 755 /path/to/directory  # 递归设置目录及其内容的权限为 rwxr-xr-x
      chmod -R u+rw /path/to/directory # 递归给所有者添加读写权限
      
  • 特殊权限

    • 除了基本的 rwx 权限,Linux 还支持以下特殊权限:

    • SUID(Set User ID)

      • 当文件被执行时,进程的所有者变为文件的所有者。
      • 设置方法:chmod u+s 文件chmod 4xxx 文件
    • SGID(Set Group ID)

      • 当文件被执行时,进程的组变为文件的组。
      • 设置方法:chmod g+s 文件chmod 2xxx 文件
    • Sticky Bit

      • 仅允许文件所有者或 root 用户删除文件。
      • 设置方法:chmod +t 目录chmod 1xxx 目录
    • chmod u+s /usr/bin/some_program  # 设置 SUID
      chmod g+s /shared_directory     # 设置 SGID
      chmod +t /tmp                    # 设置 Sticky Bit
      
posted @ 2025-03-26 20:28  QAQ001  阅读(59)  评论(0)    收藏  举报