代码改变世界

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

2025-12-18 10:03  tlnshuju  阅读(39)  评论(0)    收藏  举报

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

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

在这里插入图片描述

一、本文面试题目录

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

  • 原理说明:Linux是多用户操作系统,通过用户分类实现权限隔离和系统管理。
  • 用户分类及特点
    1. 超级用户(root)

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

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

      • UID通常在1-999之间,用于运行系统服务(如nginxmysql),而非供人登录。
      • 无密码或禁止登录,避免服务进程获取过高权限,增强系统安全性。
  • 示例
    # 查看用户UID
    id root      # 输出:uid=0(root) ...(超级用户)
    id user1     # 输出:uid=1000(user1) ...(普通用户)
    id nginx     # 输出:uid=997(nginx) ...(系统用户)

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

  • 创建用户

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

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

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

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

  • 修改用户密码

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

    • -l(lock):锁定用户账号,禁止登录(在密码前添加!标记):
      sudo passwd -l user1  # 锁定user1
    • -u(unlock):解锁被锁定的用户账号:
      sudo passwd -u user1  # 解锁user1
    • -d(delete):删除用户密码(允许空密码登录,不推荐):
      sudo passwd -d user1
    • -e(expire):强制用户下次登录时修改密码:
      sudo passwd -e user1  # user1下次登录必须改密码
  • 注意:密码锁定(-l)仅阻止密码登录,不影响密钥登录(如SSH密钥)。

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

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

  • 创建用户组

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

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

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

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

  • 将用户添加到组

    # 主组(用户默认组,一个用户只有一个主组)
    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命令:
      sudo gpasswd -d user1 group2  # 将user1从group2中移除
  • 验证用户所属组

    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表示永不过期。
  • 示例

    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权限)。
  • 示例

    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)。
    • 设置/取消
      chmod u+s /path/to/file  # 设置SUID
      chmod u-s /path/to/file  # 取消SUID
  • SGID(Set Group ID)

    • 作用
      • 对文件:执行时临时获得文件所属组的权限。
      • 对目录:在该目录下创建的新文件/目录自动继承目录的所属组。
    • 典型应用:共享目录(如团队协作文件夹,新文件自动属于团队组)。
    • 设置/取消
      chmod g+s /path/to/file_or_dir  # 设置SGID
      chmod g-s /path/to/file_or_dir  # 取消SGID
  • Sticky Bit(粘滞位)

    • 作用:仅对目录有效,目录中的文件仅所有者或root可删除,其他用户即使有写权限也不能删除。
    • 典型应用/tmp目录(所有用户可写,但不能删除他人文件)。
    • 设置/取消
      chmod +t /path/to/dir  # 设置粘滞位
      chmod -t /path/to/dir  # 取消粘滞位
  • 查看特殊权限
    权限位中,SUID显示为s(所有者执行位),SGID显示为s(组执行位),粘滞位显示为t(其他用户执行位):

    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命令,自动检查语法错误):

    sudo visudo  # 打开sudoers文件编辑
    • 常用配置格式
      # 允许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
  • 使用示例

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

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

  • susudo 的区别

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

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

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

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

  • 查看当前登录用户

    1. users 命令
      简洁显示所有登录用户的用户名(重复显示多次登录的用户):

      users  # 输出:user1 user2 user1(表示user1登录2次,user2登录1次)
    2. who 命令
      显示用户名、终端、登录时间、来源IP:

      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的基础上,额外显示用户当前执行的命令和系统负载:

      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. 查看用户的终端名

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

      # 方法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)中可能包含密码复杂度检查、登录限制等模块:

    # 密码复杂度检查
    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可禁止用户交互式登录(但不影响其运行服务)。

  • 设置方法

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

    grep user1 /etc/passwd  # 查看shell字段是否为/sbin/nologin
  • 区别

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

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

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

  • 常用选项及示例

    # 查看用户密码策略(如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设置系统默认密码策略(对新用户生效):

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

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

文章序号Linux面试题120道
1Linux面试题及详细答案120道(01-15)
2Linux面试题及详细答案120道(16-30)
3Linux面试题及详细答案120道(31-45)
4Linux面试题及详细答案120道(46-60)
5Linux面试题及详细答案120道(61-75)
6Linux面试题及详细答案120道(76-95)
7Linux面试题及详细答案120道(96-110)
8Linux面试题及详细答案120道(111-120)