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)
相关推荐
还是大剑师兰特2 天前
ruoyi‑vue3 添加【车辆管理】菜单组完整方案
大剑师·若依系统
还是大剑师兰特6 天前
若依(ruoyi)前后台系统从零到一部署配置(坑点带解析)
大剑师
还是大剑师兰特6 天前
ideaIC‑2024.1.7(社区版zip绿色解压版)完整使用教程
大剑师·idealc
还是大剑师兰特8 天前
MySQL8.0 Windows完整安装教程
windows·mysql·大剑师
还是大剑师兰特1 个月前
VSCode 插件冲突导致崩溃、卡死、假死 全套根治方案
vscode·大剑师
还是大剑师兰特1 个月前
ThinkPad T490 Windows 自动修复失败完整解决步骤
windows·大剑师·t490
还是大剑师兰特1 个月前
二年级奥数(12) : 巧填符号+竖式数字谜
大剑师·二年级奥数
还是大剑师兰特1 个月前
二年级奥数(9):鸡兔同笼+ 归一问题
大剑师·二年级奥数
还是大剑师兰特1 个月前
二年级奥数(7):移多补少8题 + 和差入门8题 + 年龄问题8题
大剑师·二年级奥数
还是大剑师兰特2 个月前
Vite6 + Vue3 + TS 完整版标准配置模板
vite·大剑师·vite6配置