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中用户分为哪几类?(超级用户、普通用户、系统用户)
- 97. 如何创建、删除用户?`useradd` 和 `adduser` 命令的区别是什么?
- 98. 如何修改用户密码?`passwd` 命令的 `-l`、`-u` 选项分别表示什么?
- 99. 如何创建、删除用户组?`groupadd` 和 `groupdel` 命令的使用方法?
- 100. 如何将用户添加到组或从组中移除?(`usermod -aG` 命令)
- 101. `/etc/passwd` 和 `/etc/shadow` 文件分别存储什么信息?
- 102. `/etc/group` 和 `/etc/gshadow` 文件的作用是什么?
- 103. 什么是SUID、SGID和Sticky Bit?它们的作用分别是什么?如何设置?
- 104. `sudo` 命令的作用是什么?如何配置用户拥有sudo权限?(`/etc/sudoers` 文件)
- 105. `su` 和 `sudo` 命令的区别是什么?为什么推荐使用 `sudo` 而非直接登录root?
- 106. 如何查看当前登录的用户?`who`、`w`、`users` 命令的区别是什么?
- 107. 如何强制踢掉某个登录用户?(`pkill -kill -t 终端名`)
- 108. 什么是PAM(Pluggable Authentication Modules)?它的作用是什么?
- 109. 如何限制用户的登录shell?(如 `/sbin/nologin`)
- 110. 如何设置用户密码的有效期?(`chage` 命令的使用)
- 二、120道Linux面试题目录列表
一、本文面试题目录
96. Linux中用户分为哪几类?(超级用户、普通用户、系统用户)
- 原理说明:Linux是多用户操作系统,通过用户分类实现权限隔离和系统管理。
- 用户分类及特点:
超级用户(root):
- UID(用户ID)固定为0,拥有系统最高权限,可执行任何操作(如修改系统配置、管理所有文件)。
- 直接登录root存在安全风险,建议通过
sudo临时获取权限。
普通用户:
- UID通常从1000开始(不同发行版可能不同),权限受限制,仅能操作自己的文件和授权资源。
- 由管理员创建,用于日常操作,如编写文档、运行普通程序。
系统用户(伪用户):
- UID通常在1-999之间,用于运行系统服务(如
nginx、mysql),而非供人登录。 - 无密码或禁止登录,避免服务进程获取过高权限,增强系统安全性。
- UID通常在1-999之间,用于运行系统服务(如
- 示例:
# 查看用户UID id root # 输出:uid=0(root) ...(超级用户) id user1 # 输出:uid=1000(user1) ...(普通用户) id nginx # 输出:uid=997(nginx) ...(系统用户)
97. 如何创建、删除用户?useradd 和 adduser 命令的区别是什么?
创建用户:
# 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 user2useradd与adduser的区别:特性 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. 如何创建、删除用户组?groupadd 和 groupdel 命令的使用方法?
用户组概念:用于统一管理多个用户的权限,将用户加入同一组后可通过组权限共享资源。
创建用户组:
# 基本用法 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中移除
- 方法1:编辑
验证用户所属组:
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. su 和 sudo 命令的区别是什么?为什么推荐使用 sudo 而非直接登录root?
su与sudo的区别:特性 susudo权限切换 切换到目标用户(默认root),获得完整权限 临时执行单个命令,权限范围受配置限制 认证方式 需要目标用户的密码(如 su root需root密码)需要当前用户的密码(或免密码,由配置决定) 日志记录 不记录具体执行的命令 记录所有执行的命令(/var/log/auth.log) 安全性 需共享root密码,风险高 无需共享root密码,权限可精细控制 推荐使用
sudo的原因:- 安全性更高:避免root密码泄露,每个用户使用自己的密码。
- 权限可控:可限制用户仅能执行特定命令(如仅允许重启)。
- 审计跟踪:所有
sudo操作被记录,便于追溯问题。 - 减少误操作:临时获取权限,降低长期使用root导致的误操作风险。
示例:
su - # 切换到root(需root密码) sudo apt update # 以root权限执行更新(需当前用户密码)
106. 如何查看当前登录的用户?who、w、users 命令的区别是什么?
查看当前登录用户:
users命令:
简洁显示所有登录用户的用户名(重复显示多次登录的用户):users # 输出:user1 user2 user1(表示user1登录2次,user2登录1次)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)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),通过终止该终端的进程可强制用户退出。步骤:
查看用户的终端名:
who # 找到目标用户的终端(如pts/1)强制踢掉用户:
# 方法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的认证框架,通过模块化设计统一管理系统的认证、授权、会话和密码策略,应用程序(如sshd、login)可通过PAM接口实现认证功能。作用:
- 统一认证机制:不同应用程序共享相同的认证逻辑(如密码复杂度、双因素认证)。
- 灵活扩展:通过添加模块支持多种认证方式(如指纹、LDAP、OAuth)。
- 集中管理:认证策略集中配置在
/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 # 警告天数
浙公网安备 33010602011771号