Linux面试题及详细答案 120道(96-110)-- 用户与权限管理

前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux... 。

前后端面试题-专栏总目录

文章目录

  • 一、本文面试题目录
      • [96. Linux中用户分为哪几类?(超级用户、普通用户、系统用户)](#96. Linux中用户分为哪几类?(超级用户、普通用户、系统用户))
      • [97. 如何创建、删除用户?`useradd` 和 `adduser` 命令的区别是什么?](#97. 如何创建、删除用户?useraddadduser 命令的区别是什么?)
      • [98. 如何修改用户密码?`passwd` 命令的 `-l`、`-u` 选项分别表示什么?](#98. 如何修改用户密码?passwd 命令的 -l-u 选项分别表示什么?)
      • [99. 如何创建、删除用户组?`groupadd` 和 `groupdel` 命令的使用方法?](#99. 如何创建、删除用户组?groupaddgroupdel 命令的使用方法?)
      • [100. 如何将用户添加到组或从组中移除?(`usermod -aG` 命令)](#100. 如何将用户添加到组或从组中移除?(usermod -aG 命令))
      • [101. `/etc/passwd` 和 `/etc/shadow` 文件分别存储什么信息?](#101. /etc/passwd/etc/shadow 文件分别存储什么信息?)
      • [102. `/etc/group` 和 `/etc/gshadow` 文件的作用是什么?](#102. /etc/group/etc/gshadow 文件的作用是什么?)
      • [103. 什么是SUID、SGID和Sticky Bit?它们的作用分别是什么?如何设置?](#103. 什么是SUID、SGID和Sticky Bit?它们的作用分别是什么?如何设置?)
      • [104. `sudo` 命令的作用是什么?如何配置用户拥有sudo权限?(`/etc/sudoers` 文件)](#104. sudo 命令的作用是什么?如何配置用户拥有sudo权限?(/etc/sudoers 文件))
      • [105. `su` 和 `sudo` 命令的区别是什么?为什么推荐使用 `sudo` 而非直接登录root?](#105. susudo 命令的区别是什么?为什么推荐使用 sudo 而非直接登录root?)
      • [106. 如何查看当前登录的用户?`who`、`w`、`users` 命令的区别是什么?](#106. 如何查看当前登录的用户?whowusers 命令的区别是什么?)
      • [107. 如何强制踢掉某个登录用户?(`pkill -kill -t 终端名`)](#107. 如何强制踢掉某个登录用户?(pkill -kill -t 终端名))
      • [108. 什么是PAM(Pluggable Authentication Modules)?它的作用是什么?](#108. 什么是PAM(Pluggable Authentication Modules)?它的作用是什么?)
      • [109. 如何限制用户的登录shell?(如 `/sbin/nologin`)](#109. 如何限制用户的登录shell?(如 /sbin/nologin))
      • [110. 如何设置用户密码的有效期?(`chage` 命令的使用)](#110. 如何设置用户密码的有效期?(chage 命令的使用))
  • 二、120道Linux面试题目录列表

一、本文面试题目录

96. Linux中用户分为哪几类?(超级用户、普通用户、系统用户)

  • 原理说明:Linux是多用户操作系统,通过用户分类实现权限隔离和系统管理。

  • 用户分类及特点

    1. 超级用户(root)

      • UID(用户ID)固定为0,拥有系统最高权限,可执行任何操作(如修改系统配置、管理所有文件)。
      • 直接登录root存在安全风险,建议通过sudo临时获取权限。
    2. 普通用户

      • UID通常从1000开始(不同发行版可能不同),权限受限制,仅能操作自己的文件和授权资源。
      • 由管理员创建,用于日常操作,如编写文档、运行普通程序。
    3. 系统用户(伪用户)

      • UID通常在1-999之间,用于运行系统服务(如nginxmysql),而非供人登录。
      • 无密码或禁止登录,避免服务进程获取过高权限,增强系统安全性。
  • 示例

    bash 复制代码
    # 查看用户UID
    id root      # 输出:uid=0(root) ...(超级用户)
    id user1     # 输出:uid=1000(user1) ...(普通用户)
    id nginx     # 输出:uid=997(nginx) ...(系统用户)

97. 如何创建、删除用户?useraddadduser 命令的区别是什么?

  • 创建用户

    bash 复制代码
    # useradd 命令(底层工具,需手动设置密码等)
    sudo useradd -m -s /bin/bash user1  # -m:创建家目录;-s:指定登录shell
    sudo passwd user1  # 为新用户设置密码
    
    # adduser 命令(交互式脚本,自动配置家目录、密码等,Debian/Ubuntu常用)
    sudo adduser user2  # 按提示输入密码、全名等信息
  • 删除用户

    bash 复制代码
    # 删除用户但保留家目录
    sudo userdel user1
    
    # 删除用户及家目录(-r 选项)
    sudo userdel -r user2
  • useraddadduser 的区别

    特性 useradd adduser
    类型 底层命令 高层交互式脚本(基于useradd封装)
    交互性 非交互式,需手动指定所有参数 交互式,自动提示输入密码、信息
    家目录 默认不创建(需-m选项) 自动创建家目录
    密码 需单独用passwd设置 直接在交互中设置
    适用场景 脚本自动化、需要精细控制 手动创建用户,简单易用

98. 如何修改用户密码?passwd 命令的 -l-u 选项分别表示什么?

  • 修改用户密码

    bash 复制代码
    passwd  # 修改当前用户密码(需输入旧密码验证)
    sudo passwd user1  # 管理员修改user1的密码(无需旧密码)
  • passwd 常用选项

    • -l(lock):锁定用户账号,禁止登录(在密码前添加!标记):

      bash 复制代码
      sudo passwd -l user1  # 锁定user1
    • -u(unlock):解锁被锁定的用户账号:

      bash 复制代码
      sudo passwd -u user1  # 解锁user1
    • -d(delete):删除用户密码(允许空密码登录,不推荐):

      bash 复制代码
      sudo passwd -d user1
    • -e(expire):强制用户下次登录时修改密码:

      bash 复制代码
      sudo passwd -e user1  # user1下次登录必须改密码
  • 注意 :密码锁定(-l)仅阻止密码登录,不影响密钥登录(如SSH密钥)。

99. 如何创建、删除用户组?groupaddgroupdel 命令的使用方法?

  • 用户组概念:用于统一管理多个用户的权限,将用户加入同一组后可通过组权限共享资源。

  • 创建用户组

    bash 复制代码
    # 基本用法
    sudo groupadd group1  # 创建名为group1的组
    
    # 指定GID(组ID)创建
    sudo groupadd -g 1005 group2  # 创建GID为1005的group2
  • 删除用户组

    bash 复制代码
    sudo groupdel group1  # 删除group1(需确保组中无用户,否则需先移除用户)
  • 查看用户组

    bash 复制代码
    cat /etc/group | grep group1  # 查看组信息
    groups  # 查看当前用户所属组

100. 如何将用户添加到组或从组中移除?(usermod -aG 命令)

  • 将用户添加到组

    bash 复制代码
    # 主组(用户默认组,一个用户只有一个主组)
    sudo usermod -g group1 user1  # 将user1的主组改为group1
    
    # 附加组(一个用户可加入多个附加组,-a 表示追加,-G 指定附加组)
    sudo usermod -aG group2 user1  # 将user1添加到group2(保留原有附加组)
    sudo usermod -G group2,group3 user1  # 覆盖原有附加组,仅保留group2和group3
  • 将用户从组中移除

    • 方法1:编辑/etc/group文件,删除组中对应的用户名。

    • 方法2:使用gpasswd命令:

      bash 复制代码
      sudo gpasswd -d user1 group2  # 将user1从group2中移除
  • 验证用户所属组

    bash 复制代码
    id user1  # 查看user1的主组和附加组
    groups user1  # 简洁显示user1所属组

101. /etc/passwd/etc/shadow 文件分别存储什么信息?

  • /etc/passwd 文件

    存储用户基本信息,所有用户可读,格式为(冒号分隔7个字段):

    复制代码
    用户名:密码占位符:UID:GID:用户描述:家目录:登录shell
    user1:x:1000:1000:User One:/home/user1:/bin/bash
    • 字段说明:
      • x:表示密码存储在/etc/shadow中(安全设计)。
      • GID:用户的主组ID。
      • 登录shell为/sbin/nologin表示禁止登录。
  • /etc/shadow 文件

    存储用户密码哈希及密码策略,仅root可读,格式为(冒号分隔9个字段):

    复制代码
    用户名:加密密码:最后修改时间:最小密码期限:最大密码期限:警告期限:过期宽限期:失效时间:保留
    user1:$6$xxxx$xxxx:19500:0:99999:7:14::
    • 字段说明:
      • 加密密码:以$id$salt$hash形式存储($6$表示SHA-512加密)。
      • 最后修改时间:从1970-01-01起的天数。
      • 最大密码期限:99999表示永不过期。
  • 示例

    bash 复制代码
    cat /etc/passwd | grep user1  # 查看用户基本信息
    sudo cat /etc/shadow | grep user1  # 查看密码信息(需root权限)

102. /etc/group/etc/gshadow 文件的作用是什么?

  • /etc/group 文件

    存储用户组基本信息,所有用户可读,格式为(冒号分隔4个字段):

    复制代码
    组名:密码占位符:GID:成员列表(逗号分隔)
    group1:x:1001:user1,user2
    • 字段说明:
      • x:表示组密码存储在/etc/gshadow中(组密码很少使用)。
      • 成员列表:属于该组的附加组成员(主组成员不显示)。
  • /etc/gshadow 文件

    存储用户组的密码哈希及管理信息,仅root可读,格式为(冒号分隔4个字段):

    复制代码
    组名:加密密码:组管理员:成员列表
    group1:!:user1:user1,user2
    • 字段说明:
      • !:表示无组密码或密码被锁定。
      • 组管理员:可管理组成员的用户(无需root权限)。
  • 示例

    bash 复制代码
    cat /etc/group | grep group1  # 查看组基本信息
    sudo cat /etc/gshadow | grep group1  # 查看组密码信息

103. 什么是SUID、SGID和Sticky Bit?它们的作用分别是什么?如何设置?

  • 特殊权限说明

    除读(r)、写(w)、执行(x)权限外,Linux还有三个特殊权限,用于控制文件执行时的权限继承。

  • SUID(Set User ID)

    • 作用:用户执行文件时,临时获得文件所有者的权限(仅对可执行文件有效)。

    • 典型应用passwd命令(普通用户执行时临时获得root权限修改/etc/shadow)。

    • 设置/取消

      bash 复制代码
      chmod u+s /path/to/file  # 设置SUID
      chmod u-s /path/to/file  # 取消SUID
  • SGID(Set Group ID)

    • 作用

      • 对文件:执行时临时获得文件所属组的权限。
      • 对目录:在该目录下创建的新文件/目录自动继承目录的所属组。
    • 典型应用:共享目录(如团队协作文件夹,新文件自动属于团队组)。

    • 设置/取消

      bash 复制代码
      chmod g+s /path/to/file_or_dir  # 设置SGID
      chmod g-s /path/to/file_or_dir  # 取消SGID
  • Sticky Bit(粘滞位)

    • 作用:仅对目录有效,目录中的文件仅所有者或root可删除,其他用户即使有写权限也不能删除。

    • 典型应用/tmp目录(所有用户可写,但不能删除他人文件)。

    • 设置/取消

      bash 复制代码
      chmod +t /path/to/dir  # 设置粘滞位
      chmod -t /path/to/dir  # 取消粘滞位
  • 查看特殊权限

    权限位中,SUID显示为s(所有者执行位),SGID显示为s(组执行位),粘滞位显示为t(其他用户执行位):

    bash 复制代码
    ls -l /usr/bin/passwd  # 输出:-rwsr-xr-x(含SUID)
    ls -ld /tmp            # 输出:drwxrwxrwt(含粘滞位)

104. sudo 命令的作用是什么?如何配置用户拥有sudo权限?(/etc/sudoers 文件)

  • sudo 作用:允许普通用户通过输入自己的密码,临时以root或其他用户身份执行命令,避免直接使用root登录,增强安全性。

  • 配置用户sudo权限

    需编辑/etc/sudoers文件(推荐使用visudo命令,自动检查语法错误):

    bash 复制代码
    sudo visudo  # 打开sudoers文件编辑
    • 常用配置格式

      bash 复制代码
      # 允许user1执行所有命令(需输入密码)
      user1  ALL=(ALL:ALL) ALL
      
      # 允许group1组用户执行所有命令
      %group1  ALL=(ALL:ALL) ALL
      
      # 允许user1免密码执行所有命令(谨慎使用)
      user1  ALL=(ALL:ALL) NOPASSWD: ALL
      
      # 允许user1仅执行指定命令(如重启、关机)
      user1  ALL=/sbin/reboot, /sbin/shutdown
  • 使用示例

    bash 复制代码
    sudo ls /root  # 以root权限查看/root目录
    sudo -u user2 touch file.txt  # 以user2身份创建文件
    sudo -i  # 切换到root交互式shell

105. susudo 命令的区别是什么?为什么推荐使用 sudo 而非直接登录root?

  • susudo 的区别

    特性 su sudo
    权限切换 切换到目标用户(默认root),获得完整权限 临时执行单个命令,权限范围受配置限制
    认证方式 需要目标用户的密码(如su root需root密码) 需要当前用户的密码(或免密码,由配置决定)
    日志记录 不记录具体执行的命令 记录所有执行的命令(/var/log/auth.log)
    安全性 需共享root密码,风险高 无需共享root密码,权限可精细控制
  • 推荐使用 sudo 的原因

    1. 安全性更高:避免root密码泄露,每个用户使用自己的密码。
    2. 权限可控:可限制用户仅能执行特定命令(如仅允许重启)。
    3. 审计跟踪 :所有sudo操作被记录,便于追溯问题。
    4. 减少误操作:临时获取权限,降低长期使用root导致的误操作风险。
  • 示例

    bash 复制代码
    su -  # 切换到root(需root密码)
    sudo apt update  # 以root权限执行更新(需当前用户密码)

106. 如何查看当前登录的用户?whowusers 命令的区别是什么?

  • 查看当前登录用户

    1. users 命令

      简洁显示所有登录用户的用户名(重复显示多次登录的用户):

      bash 复制代码
      users  # 输出:user1 user2 user1(表示user1登录2次,user2登录1次)
    2. who 命令

      显示用户名、终端、登录时间、来源IP:

      bash 复制代码
      who  # 输出示例:
      # user1 pts/0 2023-10-01 10:00 (192.168.1.100)
      # user2 pts/1 2023-10-01 10:30 (192.168.1.101)
    3. w 命令

      who的基础上,额外显示用户当前执行的命令和系统负载:

      bash 复制代码
      w  # 输出示例:
      # 11:00:00 up 2h, 2 users, load average: 0.10, 0.05, 0.01
      # USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
      # user1    pts/0    192.168.1.100   10:00    0.00s  0.10s  0.00s w
      # user2    pts/1    192.168.1.101   10:30    5m     0.05s  0.05s vim file.txt
  • 区别总结
    users最简洁,who显示登录详情,w最全面(含用户活动和系统状态)。

107. 如何强制踢掉某个登录用户?(pkill -kill -t 终端名

  • 原理说明 :每个登录用户关联一个终端(如pts/0),通过终止该终端的进程可强制用户退出。

  • 步骤

    1. 查看用户的终端名

      bash 复制代码
      who  # 找到目标用户的终端(如pts/1)
    2. 强制踢掉用户

      bash 复制代码
      # 方法1:pkill命令(推荐)
      sudo pkill -kill -t pts/1  # -t 指定终端名,-kill 发送终止信号
      
      # 方法2:kill命令(需先找到终端对应的进程ID)
      ps -t pts/1  # 查看终端pts/1的进程ID(如1234)
      sudo kill -9 1234  # 强制终止进程
  • 注意:踢掉用户会导致其未保存的工作丢失,需谨慎操作。

108. 什么是PAM(Pluggable Authentication Modules)?它的作用是什么?

  • PAM概念

    PAM(可插拔认证模块)是Linux的认证框架,通过模块化设计统一管理系统的认证、授权、会话和密码策略,应用程序(如sshdlogin)可通过PAM接口实现认证功能。

  • 作用

    1. 统一认证机制:不同应用程序共享相同的认证逻辑(如密码复杂度、双因素认证)。
    2. 灵活扩展:通过添加模块支持多种认证方式(如指纹、LDAP、OAuth)。
    3. 集中管理 :认证策略集中配置在/etc/pam.d/目录,无需修改应用程序代码。
  • 配置文件

    • 主配置文件:/etc/pam.conf(较少使用)。
    • 应用程序配置:/etc/pam.d/目录下的文件(如/etc/pam.d/sshd对应SSH服务的认证配置)。
  • 示例
    sshd的PAM配置(/etc/pam.d/sshd)中可能包含密码复杂度检查、登录限制等模块:

    bash 复制代码
    # 密码复杂度检查
    password required pam_pwquality.so minlen=8
    
    # 限制失败登录次数
    auth required pam_tally2.so deny=3 unlock_time=1800

109. 如何限制用户的登录shell?(如 /sbin/nologin

  • 原理说明 :登录shell是用户登录后默认启动的命令解释器(如/bin/bash)。将shell设置为/sbin/nologin/bin/false可禁止用户交互式登录(但不影响其运行服务)。

  • 设置方法

    bash 复制代码
    # 创建用户时指定禁止登录的shell
    sudo useradd -s /sbin/nologin user3
    
    # 修改已有用户的shell
    sudo usermod -s /sbin/nologin user1  # 禁止user1登录
    sudo usermod -s /bin/bash user1      # 恢复user1的bash登录
  • 验证设置

    bash 复制代码
    grep user1 /etc/passwd  # 查看shell字段是否为/sbin/nologin
  • 区别

    • /sbin/nologin:用户登录时显示友好提示(可在/etc/nologin.txt自定义)。
    • /bin/false:直接拒绝登录,无任何提示。
      两者均允许用户通过其他方式(如SSH密钥执行命令)访问,仅禁止交互式登录。

110. 如何设置用户密码的有效期?(chage 命令的使用)

  • chage 命令作用:管理用户密码的有效期,包括密码过期时间、警告天数等,增强系统安全性。

  • 常用选项及示例

    bash 复制代码
    # 查看用户密码策略(如user1)
    sudo chage -l user1
    
    # 设置密码90天后过期
    sudo chage -M 90 user1
    
    # 设置密码修改后至少7天才能再次修改
    sudo chage -m 7 user1
    
    # 设置密码过期前7天发出警告
    sudo chage -W 7 user1
    
    # 设置密码过期后30天内仍可登录修改(宽限期)
    sudo chage -I 30 user1
    
    # 强制用户下次登录时修改密码
    sudo chage -d 0 user1  # -d 0 表示最后修改时间为1970-01-01
    
    # 设置密码永不过期
    sudo chage -M 99999 user1
  • 配置文件设置

    可通过/etc/login.defs设置系统默认密码策略(对新用户生效):

    bash 复制代码
    sudo vim /etc/login.defs
    # 修改以下参数:
    PASS_MAX_DAYS   90   # 最大有效期
    PASS_MIN_DAYS   7    # 最小修改间隔
    PASS_WARN_AGE   7    # 警告天数

二、120道Linux面试题目录列表

文章序号 Linux面试题120道
1 Linux面试题及详细答案120道(01-15)
2 Linux面试题及详细答案120道(16-30)
3 Linux面试题及详细答案120道(31-45)
4 Linux面试题及详细答案120道(46-60)
5 Linux面试题及详细答案120道(61-75)
6 Linux面试题及详细答案120道(76-95)
7 Linux面试题及详细答案120道(96-110)
8 Linux面试题及详细答案120道(111-120)
相关推荐
还是大剑师兰特1 天前
Blender学习笔记(0) -- 思维导图框架
blender·大剑师·blender教程
还是大剑师兰特4 天前
C#面试题及详细答案120道(86-95)-- 进阶特性
c#·大剑师
还是大剑师兰特5 天前
Blender学习笔记(03)-- 点光、平行光、聚光、面光
blender·大剑师·blender教程
还是大剑师兰特17 天前
C#面试题及详细答案120道(51-60)-- LINQ与Lambda
c#·大剑师
还是大剑师兰特18 天前
C#面试题及详细答案120道(41-50)-- 异常处理
c#·大剑师
还是大剑师兰特25 天前
Rust面试题及详细答案120道(42-50)-- 泛型与Trait
大剑师·rust面试题·rust教程
还是大剑师兰特1 个月前
Transformer 面试题及详细答案120道(111-120)-- 综合与拓展
transformer·大剑师·transformer面试题
还是大剑师兰特1 个月前
TypeScript 面试题及详细答案 100题 (61-70)-- 泛型(Generics)
typescript·大剑师·typescript教程·typescript面试题
还是大剑师兰特1 个月前
Scala面试题及详细答案100道(81-90)-- 框架与生态
scala·大剑师·scala面试题