程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 操作系统 - Linux

    • 基础操作
    • 目录操作
    • 文件操作
    • 用户和权限管控
      • 打包和解压
      • 定时任务管理
      • 系统管理
      • 网络服务操作
      • 磁盘分区管理
      • 其他常用命令
    • 云服务器
    • 操作系统 - Linux
    scholar
    2024-03-27
    目录

    用户和权限管控

    在 Linux 系统中,用户和权限管理是确保系统安全性和功能正常运行的关键部分。每个用户都有自己的权限范围,这些权限决定了用户可以访问和修改哪些文件和目录。了解如何查看用户和用户组信息,对于管理系统和诊断权限问题至关重要。

    • 普通用户权限:普通用户通常在其 HOME 目录内拥有读写和执行权限。这意味着用户可以在自己的主目录中创建、删除和执行文件。
    • 系统范围内的权限:在 HOME 目录之外,普通用户的权限通常受到限制,很多情况下仅限于读取和执行特定文件和目录,而没有修改的权限。

    # 1. 查看用户/用户组信息

    getent 命令可以用来获取系统上的用户和用户组信息。这个命令从系统的数据库中获取条目,这些数据库包括但不限于 /etc/passwd 和 /etc/group。

    # 1. 获取指定用户的信息

    getent passwd username
    
    1
    • getent passwd username:此命令提供了关于指定用户的详细信息,包括用户名、用户ID(UID)、组ID(GID)、用户全名、家目录和登录shell。

      image-20240327053514674

    # 2. 获取所有用户的信息

    getent passwd
    
    1
    • getent passwd:这将列出系统上所有用户的信息。这对于查看系统上有哪些用户特别有用。

    # 3. 获取指定用户组的信息

    getent group groupname
    
    1
    • getent group groupname:此命令显示指定用户组的详细信息,包括组名、密码、组ID(GID)和组成员。

      image-20240327053536134

    # 4. 获取所有用户组的信息

    getent group
    
    1
    • getent group:这将列出系统上所有用户组的信息。这有助于管理员了解系统上存在哪些用户组以及它们的成员。

    # 2. 用户管理

    在 Linux 系统中,管理用户账户是系统管理员的基本职责之一。了解如何创建和管理用户,以及如何配置用户的权限和组成员资格,对于维护系统的安全性和功能性至关重要。

    # 1. 创建用户(useradd)

    useradd 命令用于创建一个新的用户账户。

    useradd [选项] 用户名
    
    1
    • -g 选项:指定用户的初始登录组。该组必须已存在。如果不指定 -g,系统会创建与用户名同名的组并将用户加入该组。

    • -d 选项:指定用户的主目录。如果不提供这个选项,用户的主目录默认设置为 /home/用户名。

    useradd -g users -d /home/newuser newuser
    
    1

    # 2. 删除用户(userdel)

    userdel 命令用于删除用户账户。

    userdel [选项] 用户名
    
    1
    • -r 选项:在删除用户账户的同时删除其主目录和邮件目录。
    userdel -r olduser
    
    1

    # 3. 设置用户密码(passwd)

    passwd 命令用于设置或更改用户账户的密码。

    passwd 用户名
    
    1
    • 在执行该命令后,系统会提示输入新的密码。
    passwd newuser
    
    1

    # 4. 切换用户身份(su)

    su 命令用于切换当前用户身份到另一个用户。

    su - 用户名
    
    1
    • 使用 - 选项可以模拟完全登录环境,即切换到目标用户的 HOME 目录,并加载其 shell 环境变量等。
    su - newuser
    
    1

    # 5. 查看用户所属组(id)

    id 命令显示指定用户的用户ID、组ID以及所属的组。

    id 用户名
    
    1
    • 如果不提供用户名,id 显示当前用户的信息。

    image-20240327053955519

    id newuser
    
    1

    # 6. 修改用户所属组(usermod)

    usermod 命令用于修改用户的账户属性,包括用户所属的组。

    usermod -aG 用户组 用户名
    
    1
    • -aG 选项:将用户添加到额外的组(-a 是追加,-G 指定组),而不是替换现有的用户组。
    usermod -aG sudo newuser
    
    1

    通过使用这些用户管理命令,系统管理员可以有效地创建和管理系统上的用户账户,包括用户的权限、主目录、密码和组成员资格,以确保系统的安全性和用户的需求得到满足。

    # 3. 用户组管理

    在 Linux 系统中,用户组管理是一项重要的系统管理任务。用户组允许管理员为一组用户分配相同的权限,从而简化权限和资源访问的管理。下面是一些基本的用户组管理命令,以及它们的用法和作用。

    # 1. 创建用户组(groupadd)

    groupadd 用户组名
    
    1
    • 用途:创建一个新的用户组。
    • 示例:groupadd developers 创建一个名为 "developers" 的新用户组。

    # 2. 删除用户组(groupdel)

    groupdel 用户组名
    
    1
    • 用途:删除已存在的用户组。
    • 注意:删除用户组前,请确保没有用户属于该组。
    • 示例:groupdel developers 删除 "developers" 用户组。

    # 3. 修改用户组名(groupmod)

    groupmod -n 新用户组名 旧用户组名
    
    1
    • 用途:更改用户组的名称。
    • 示例:groupmod -n dev team 将用户组名 "team" 改为 "dev"。

    # 4. 查看用户组信息(getent)

    getent group 用户组名
    
    1
    • 用途:显示用户组的详细信息,包括组名、组密码、GID和组成员。
    • 示例:getent group developers 显示 "developers" 用户组的信息。

    # 5. 添加用户到用户组(usermod)

    usermod -aG 用户组名 用户名
    
    1
    • 用途:将用户添加到一个或多个用户组。
    • 选项:
      • -aG:-a 表示追加,-G 指定组名。这确保用户被添加到指定组而不是从其他组中移除。
    • 示例:usermod -aG developers alice 将用户 "alice" 添加到 "developers" 用户组。

    # 6. 从用户组中移除用户(gpasswd)

    gpasswd -d 用户名 用户组名
    
    1
    • 用途:从用户组中移除指定用户。
    • 示例:gpasswd -d alice developers 从 "developers" 用户组中移除 "alice"。

    # 7. 创建用户与用户组示例

    在实际的系统管理过程中,经常需要创建用户组来组织用户,并根据需要将用户添加到适当的组中。例如,如果你想创建一个 "developers" 组,并添加用户 "alice" 和 "bob":

    1. 创建用户组:"developers"。

      groupadd developers
      
      1
    2. 创建用户 "alice" 和 "bob"(如果尚未创建)。

      useradd alice
      useradd bob
      
      1
      2
    3. 将 "alice" 和 "bob" 添加到 "developers" 组。

      usermod -aG developers alice
      usermod -aG developers bob
      
      1
      2

    # 4. 权限说明

    权限槽位:总共有10个字符,分成四部分表示。

    image-20231212020552174

    • 第1个字符表示文件类型。
    • 接下来的9个字符分为三组,每组三个字符,分别代表文件拥有者(User)、拥有者所在组(Group)、其他用户(Others)的权限。

    1. 文件类型:第1个字符指的是文件类型:

    • -:普通文件。
    • d:目录。
    • 其他特殊文件类型字符包括链接(l)、字符设备(c)、块设备(b)等。

    2. 权限字符

    • r(Read):可读权限(4)。
    • w(Write):可写权限(2)。
    • x(Execute):执行权限(1)。
    • -:没有对应权限(0)。

    3. 权限分组

    • 文件拥有者权限(User):第2至第4个字符。
    • 组权限(Group):第5至第7个字符。
    • 其他用户权限(Others):第8至第10个字符。

    image-20231211162047853

    4. 权限信息示例

    假设有一个权限字符串 -rwxrw-r--:

    • 第一位 - 表示这是一个普通文件。
    • 第一组(rwx)表示文件拥有者具有读、写、执行的权限。
    • 第二组(rw-)表示文件拥有者所在组的成员具有读、写权限,但没有执行权限。
    • 第三组(r--)表示其他用户只有读权限。

    5. 权限的数值表示("8421法")

    每个权限(读、写、执行)可以用一个数值来表示,这是基于它们的二进制表示:

    • 4:读(r)
    • 2:写(w)
    • 1:执行(x)

    通过将每组的权限值加在一起,可以得到一个三位数的数值表示,例如 755(rwxr-xr-x)代表:

    • 文件拥有者具有读、写、执行(7=4+2+1)权限。
    • 所在组成员具有读和执行(5=4+0+1)权限。
    • 其他用户具有读和执行(5=4+0+1)权限。

    # 5. 文件权限(chmod)

    修改文件、文件夹的权限信息。注:只有文件、文件夹的所属用户或root用户可以修改

    # 语法 chmod [-R] 权限 文件或文件夹
    chmod -R u=rwx,g=rx,o=x test # 将文件夹test及其文件夹内全部内容权限设置为 rwxr-x--x  
    chmod 777 a.txt # 1+2+4=7,"7"说明授予所有权限
    
    1
    2
    3
    • 选项:-R,对该文件夹里面的所有文件与文件夹都赋予相同的权限
    • 其中:u表示user所属用户权限,g表示group组权限,o表示other其它用户权限

    # 1. 使用数字表示法设置文件权限

    chmod 644 file.txt
    
    1
    • 权限数字表示:'r' 代表可读(4),'w' 代表可写(2),'x' 代表执行权限(1),'-'代表没有对应权限(0)
    • 644是权限模式,表示设置文件的权限为 -rw-r--r--。
    • 第一个数字 6 表示所有者的权限,即读写权限(rw = 4+2)。
    • 第二个数字 4 表示所属组的权限,即只读权限(r = 4)。
    • 第三个数字 4 表示其他用户的权限,即只读权限(r = 4)。
    • file.txt 是要设置权限的文件。

    # 2. 使用符号表示法添加权限

    符号表示法比较直观,使用字母 u(所有者)、g(属组)、o(其他用户)和 a(所有用户)来指定权限范围,以及 +(添加权限)、-(移除权限)和 =(设置权限)来修改权限。

    chmod +x script.sh
    
    1
    • +x 表示添加可执行权限。
    • script.sh 是要添加权限的脚本文件。

    # 3. 使用符号表示法移除权限

    chmod -w file.txt
    
    1
    • -w 表示移除写权限。
    • file.txt 是要移除权限的文件。

    # 4. 使用符号表示法设置权限

    chmod u=rw,go=r file.txt
    
    1
    • u=rw 表示设置所有者的权限为读写。
    • go=r 表示设置所属组和其他用户的权限为只读。
    • file.txt 是要设置权限的文件。

    # 5. 递归修改目录及其子目录中的文件权限

    chmod -R 755 directory
    
    1
    • -R 表示递归修改目录及其子目录中的文件权限。
    • 755 是权限模式,表示设置目录的权限为 -rwxr-xr-x。
    • directory 是要递归修改权限的目录。

    # 6. 修改文件所属者(chown)

    chown命令用于更改文件或目录的所有者和所属组。它可以将文件或目录的所有权转移给其他用户或用户组。

    chown [选项] 用户:用户组 文件/目录
    
    1
    • -R:递归地更改文件或目录及其子项的所有者和所属组。
    • -v:详细模式。在执行过程中,为每个被更改所有权的文件或目录显示详细信息。
    • 用户:指定新的所有者的用户名。
    • 用户组:指定新的所属组名。如果只更改所有者,而保持所属组不变,则可以省略用户组部分。
    • 文件/目录:指定要更改所有者(和所属组)的文件或目录。

    # 1. 更改文件的所有者

    chown newuser file.txt
    
    1
    • 这个命令将 file.txt 的所有者更改为 newuser,所属组不变。

    # 2. 更改文件的所有者和所属组

    chown newuser:newgroup file.txt
    
    1
    • 这个命令将 file.txt 的所有者更改为 newuser,并将其所属组更改为 newgroup。

    # 3. 递归地更改目录的所有者和所属组

    chown -R newuser:newgroup directory
    
    1
    • 这个命令将 directory 目录及其所有子目录和文件的所有者更改为 newuser,所属组更改为 newgroup。

    # 4. 使用详细模式显示更改信息

    chown -v newuser file.txt
    
    1
    • 这个命令在更改 file.txt 文件的所有者为 newuser 时,会显示操作的详细信息。

    注意事项

    • 通常,只有系统管理员(root)或文件的当前所有者可以更改文件的所有者。
    • 更改文件的所有者或所属组可能会影响对该文件的访问权限。在执行 chown 命令前,确保了解这些更改对文件访问权限的潜在影响。
    编辑此页 (opens new window)
    上次更新: 2024/12/28, 18:32:08
    文件操作
    打包和解压

    ← 文件操作 打包和解压→

    Theme by Vdoing | Copyright © 2019-2025 程序员scholar
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式