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

文章目录
- 一、本文面试题目录
-
-
- [96. Linux中用户分为哪几类?(超级用户、普通用户、系统用户)](#96. Linux中用户分为哪几类?(超级用户、普通用户、系统用户))
- [97. 如何创建、删除用户?`useradd` 和 `adduser` 命令的区别是什么?](#97. 如何创建、删除用户?
useradd和adduser命令的区别是什么?) - [98. 如何修改用户密码?`passwd` 命令的 `-l`、`-u` 选项分别表示什么?](#98. 如何修改用户密码?
passwd命令的-l、-u选项分别表示什么?) - [99. 如何创建、删除用户组?`groupadd` 和 `groupdel` 命令的使用方法?](#99. 如何创建、删除用户组?
groupadd和groupdel命令的使用方法?) - [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.
su和sudo命令的区别是什么?为什么推荐使用sudo而非直接登录root?) - [106. 如何查看当前登录的用户?`who`、`w`、`users` 命令的区别是什么?](#106. 如何查看当前登录的用户?
who、w、users命令的区别是什么?) - [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是多用户操作系统,通过用户分类实现权限隔离和系统管理。
-
用户分类及特点 :
-
超级用户(root):
- UID(用户ID)固定为0,拥有系统最高权限,可执行任何操作(如修改系统配置、管理所有文件)。
- 直接登录root存在安全风险,建议通过
sudo临时获取权限。
-
普通用户:
- UID通常从1000开始(不同发行版可能不同),权限受限制,仅能操作自己的文件和授权资源。
- 由管理员创建,用于日常操作,如编写文档、运行普通程序。
-
系统用户(伪用户):
- UID通常在1-999之间,用于运行系统服务(如
nginx、mysql),而非供人登录。 - 无密码或禁止登录,避免服务进程获取过高权限,增强系统安全性。
- UID通常在1-999之间,用于运行系统服务(如
-
-
示例 :
bash# 查看用户UID id root # 输出:uid=0(root) ...(超级用户) id user1 # 输出:uid=1000(user1) ...(普通用户) id nginx # 输出:uid=997(nginx) ...(系统用户)
97. 如何创建、删除用户?useradd 和 adduser 命令的区别是什么?
-
创建用户:
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 -
useradd与adduser的区别:特性 useraddadduser类型 底层命令 高层交互式脚本(基于 useradd封装)交互性 非交互式,需手动指定所有参数 交互式,自动提示输入密码、信息 家目录 默认不创建(需 -m选项)自动创建家目录 密码 需单独用 passwd设置直接在交互中设置 适用场景 脚本自动化、需要精细控制 手动创建用户,简单易用
98. 如何修改用户密码?passwd 命令的 -l、-u 选项分别表示什么?
-
修改用户密码:
bashpasswd # 修改当前用户密码(需输入旧密码验证) sudo passwd user1 # 管理员修改user1的密码(无需旧密码) -
passwd常用选项:-
-l(lock):锁定用户账号,禁止登录(在密码前添加!标记):bashsudo passwd -l user1 # 锁定user1 -
-u(unlock):解锁被锁定的用户账号:bashsudo passwd -u user1 # 解锁user1 -
-d(delete):删除用户密码(允许空密码登录,不推荐):bashsudo passwd -d user1 -
-e(expire):强制用户下次登录时修改密码:bashsudo passwd -e user1 # user1下次登录必须改密码
-
-
注意 :密码锁定(
-l)仅阻止密码登录,不影响密钥登录(如SSH密钥)。
99. 如何创建、删除用户组?groupadd 和 groupdel 命令的使用方法?
-
用户组概念:用于统一管理多个用户的权限,将用户加入同一组后可通过组权限共享资源。
-
创建用户组:
bash# 基本用法 sudo groupadd group1 # 创建名为group1的组 # 指定GID(组ID)创建 sudo groupadd -g 1005 group2 # 创建GID为1005的group2 -
删除用户组:
bashsudo groupdel group1 # 删除group1(需确保组中无用户,否则需先移除用户) -
查看用户组:
bashcat /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命令:bashsudo gpasswd -d user1 group2 # 将user1从group2中移除
-
-
验证用户所属组:
bashid 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表示永不过期。
- 加密密码:以
- 字段说明:
-
示例:
bashcat /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权限)。
- 字段说明:
-
示例:
bashcat /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)。 -
设置/取消 :
bashchmod u+s /path/to/file # 设置SUID chmod u-s /path/to/file # 取消SUID
-
-
SGID(Set Group ID):
-
作用 :
- 对文件:执行时临时获得文件所属组的权限。
- 对目录:在该目录下创建的新文件/目录自动继承目录的所属组。
-
典型应用:共享目录(如团队协作文件夹,新文件自动属于团队组)。
-
设置/取消 :
bashchmod g+s /path/to/file_or_dir # 设置SGID chmod g-s /path/to/file_or_dir # 取消SGID
-
-
Sticky Bit(粘滞位):
-
作用:仅对目录有效,目录中的文件仅所有者或root可删除,其他用户即使有写权限也不能删除。
-
典型应用 :
/tmp目录(所有用户可写,但不能删除他人文件)。 -
设置/取消 :
bashchmod +t /path/to/dir # 设置粘滞位 chmod -t /path/to/dir # 取消粘滞位
-
-
查看特殊权限 :
权限位中,SUID显示为
s(所有者执行位),SGID显示为s(组执行位),粘滞位显示为t(其他用户执行位):bashls -l /usr/bin/passwd # 输出:-rwsr-xr-x(含SUID) ls -ld /tmp # 输出:drwxrwxrwt(含粘滞位)
104. sudo 命令的作用是什么?如何配置用户拥有sudo权限?(/etc/sudoers 文件)
-
sudo作用:允许普通用户通过输入自己的密码,临时以root或其他用户身份执行命令,避免直接使用root登录,增强安全性。 -
配置用户sudo权限 :
需编辑
/etc/sudoers文件(推荐使用visudo命令,自动检查语法错误):bashsudo 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
-
-
使用示例:
bashsudo 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导致的误操作风险。
-
示例:
bashsu - # 切换到root(需root密码) sudo apt update # 以root权限执行更新(需当前用户密码)
106. 如何查看当前登录的用户?who、w、users 命令的区别是什么?
-
查看当前登录用户:
-
users命令 :简洁显示所有登录用户的用户名(重复显示多次登录的用户):
bashusers # 输出:user1 user2 user1(表示user1登录2次,user2登录1次) -
who命令 :显示用户名、终端、登录时间、来源IP:
bashwho # 输出示例: # 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的基础上,额外显示用户当前执行的命令和系统负载:bashw # 输出示例: # 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),通过终止该终端的进程可强制用户退出。 -
步骤:
-
查看用户的终端名:
bashwho # 找到目标用户的终端(如pts/1) -
强制踢掉用户:
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的认证框架,通过模块化设计统一管理系统的认证、授权、会话和密码策略,应用程序(如
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)中可能包含密码复杂度检查、登录限制等模块: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登录 -
验证设置:
bashgrep 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设置系统默认密码策略(对新用户生效):bashsudo vim /etc/login.defs # 修改以下参数: PASS_MAX_DAYS 90 # 最大有效期 PASS_MIN_DAYS 7 # 最小修改间隔 PASS_WARN_AGE 7 # 警告天数