Linux系统管理与服务部署实验记录(三):用户权限、ACL与Nginx源码编译
前言
本篇是Linux系列实验的第三篇博客,本次实验围绕用户与用户组管理、文件权限控制、ACL访问控制列表、Shell命令别名、系统登录日志查询以及Nginx源码编译安装六大模块展开。实验过程中踩了不少拼写和语法上的坑,都会在文中逐一标注,方便自己复盘也给大家避坑。
实验环境:CentOS 7,内核 3.10.0-1160.el7.x86_64,root 用户操作。
一、用户与用户组基础管理
1.1 创建用户与验证
用户管理是Linux系统权限体系的基础,最常用的创建命令是useradd。创建完成后可以通过三个维度验证用户是否创建成功:
/etc/passwd:用户基本信息配置文件/etc/shadow:用户密码信息配置文件/home/用户名:用户默认家目录
操作命令:
# 创建用户 test1useraddtest1# 查看passwd最后一行,验证用户信息tail-1/etc/passwd# 查看shadow最后一行,验证密码状态tail-1/etc/shadow# 查看家目录权限属性ls-ld/home/test1# 查看家目录下的隐藏配置文件ls-A/home/test1踩坑记录:
实验中出现了两次典型的拼写错误:一是把useradd拼成了uesradd,直接报command not found;二是把/etc/shadow写成了/eta/shadow,提示文件不存在。Linux 对命令和路径拼写敏感度极高,字母顺序错误、字符遗漏都会直接执行失败。
从输出结果可以得到几个结论:
- 新建普通用户默认 UID 和 GID 均从 1000 开始,默认创建同名私有组
- shadow 文件中密码位显示
!!,表示该账号未设置密码,处于锁定状态 - 用户家目录默认权限为 700,仅用户本人拥有完整访问权限
- 家目录内默认包含
.bash_logout、.bash_profile、.bashrc三个环境配置文件,创建时从/etc/skel模板目录复制而来
1.2 用户组管理
用户组用于批量分配权限,核心命令包括groupadd(创建组)、groupmod(修改组属性)、id(查看用户身份与所属组)。
操作命令:
# 查看用户的UID、GID与所属组idtest1# 创建普通用户组,系统自动分配GIDgroupaddgroup1# 创建用户组并指定GID为2000groupaddgroup2-g2000# 修改用户组:GID改为3000,组名改为group11groupmod-g3000-ngroup11 group1# 查看group文件末尾验证修改结果tail-2/etc/group1.3 附加组与协作目录实战
企业运维中的典型场景:多个用户共同维护一个项目目录,通过将用户加入同一附加组的方式实现权限共享。
操作命令:
# 创建两个测试用户useraddZhangsanuseraddlisi# 创建项目组groupaddQQgroup# 批量将用户加入项目组(-M参数会覆盖组内原有成员)gpasswd-MZhangsan,lisi QQgroup# 修改项目目录的属主与属组chownroot:QQgroup /project# 设置目录权限:所有者与组成员拥有全部权限,其他用户无任何权限chmod770/project完成配置后,Zhangsan 和 lisi 作为 QQgroup 的成员,都可以对/project目录进行读写操作,组外用户无法访问该目录。
二、文件权限与特殊权限
2.1 基础权限(数字表示法)
Linux 文件权限分为所有者、所属组、其他人三段,每段包含读(r=4)、写(w=2)、执行(x=1)三种权限,通过数字相加可以快速表示权限组合。
操作命令:
# 创建测试文件touchfile1# 设置权限为700:仅所有者拥有读写执行权限chmod700file1# 设置权限为764:所有者rwx,属组rw,其他人只读chmod764file12.2 目录特殊权限:粘滞位(Sticky Bit)
普通 777 权限的公共目录存在安全问题:任何用户都可以删除目录内其他人的文件。为目录添加粘滞位(权限值为1)后,用户仅能删除自己创建的文件,无法修改或删除他人文件。
操作命令:
# 查看/tmp目录默认权限ll-d/tmp/# 修改为776权限(对比测试)chmod776/tmp/# 修改为777权限chmod777/tmp/# 添加粘滞位,权限变为1777chmod1777/tmp/权限字符串末尾的t字符就是粘滞位的标识。系统默认的/tmp目录就是标准的 1777 权限,作为公共临时目录,既保证所有用户都能写入,又防止用户误删他人文件。
三、ACL 访问控制列表
传统的三段式权限仅能对所有者、所属组、其他人类别分配权限,无法针对单个用户、单个组做精细化授权。ACL(访问控制列表)可以突破这个限制,实现更灵活的权限管控。
3.1 基础用法
# 给用户pt单独分配读+执行权限setfacl-mu:pt:rx /projectACL 设置成功后,文件/目录的权限位末尾会出现一个+号,代表该对象配置了 ACL 规则。
3.2 踩坑:参数缺失导致的报错
实验中首次执行setfacl时报错Invalid argument near character 3,排查后发现是命令末尾遗漏了目标目录,只写了权限规则,没有指定作用对象。
错误写法:
setfacl-mu:user1:rwx# 执行报错,缺少目标文件/目录参数正确操作步骤:
# 1. 先创建测试用户useradduser1# 2. 先创建测试目录mkdirdir1# 3. 再对目录设置ACL权限setfacl-mu:user1:rwx dir1/先完成用户和目录的创建,再执行 ACL 命令即可正常执行。设置完成后dir1权限末尾出现+标识,说明 ACL 规则已生效。
四、Shell 命令别名 alias
命令别名可以将冗长的命令简化为短指令,提升操作效率,也可以为危险命令添加默认安全参数(例如给rm默认加上-i实现交互式删除)。
4.1 查看与定义别名
# 查看当前Shell环境中所有已定义的别名alias# 自定义解压别名,简化tar解压命令aliasuntar='tar -zxvf'# 自定义ping命令,默认只发送5个数据包aliasping='ping -c 5'# 自定义清屏快捷命令aliasc='clear'踩坑记录:
首次定义untar别名时出现语法错误,等号两侧误加了空格,导致系统将命令拆分为多个参数,报not found。定义别名的语法要求是:别名名称、等号、命令字符串三者之间不能有任何空格。
4.2 删除别名 unalias
# 删除ping别名unaliasping# 删除untar别名unaliasuntar执行删除后再通过alias查看,对应别名已从列表中移除。注意unalias后仅跟别名名称即可,不要附带等号和命令内容,否则会执行报错。
4.3 命令类型与查找路径
# 查看命令类型typecd# 输出:cd is a shell builtin(Shell内置命令)typels# 输出:ls is aliased to `ls --color=auto'(别名命令)# 查看外部命令的二进制文件路径whichls# 查看系统环境变量PATHecho$PATHLinux 命令执行优先级为:别名 > Shell内置命令 > $PATH 路径下的外部命令。cd属于 Shell 内置命令,没有独立的二进制文件;ls是外部命令,文件位于/usr/bin/ls,同时系统为其设置了带颜色输出的别名。
五、系统登录日志查询
5.1 lastlog:用户最近一次登录记录
lastlog该命令读取/var/log/lastlog日志文件,列出系统中所有用户的最近一次登录时间、来源IP与登录终端。大部分系统账号(如 bin、daemon、sshd 等)显示**Never logged in**属于正常现象,这些是系统服务账号,默认禁止交互式登录。
5.2 last:完整历史登录记录
# 查看当前已登录的用户列表users# 查看所有历史登录记录lastlast命令读取/var/log/wtmp日志文件,可以看到每一次登录的时间、登出时间、在线时长。输出中still logged in表示该会话当前仍处于在线状态;reboot开头的行是系统启动记录,附带内核版本与开机运行时长。
六、Nginx 源码编译安装
6.1 编译前配置 configure
源码安装服务的第一步是执行./configure脚本,作用是检查系统编译环境、指定需要编译的功能模块、最终生成 Makefile 编译文件。
./configure --with-http_ssl_module --with-http_stub_status_module参数说明:
--with-http_ssl_module:启用 SSL 模块,支持 HTTPS 服务--with-http_stub_status_module:启用状态监控模块,用于查看 Nginx 运行状态
配置过程会逐项检查编译器、头文件、依赖库。出现少量not found属于正常情况,例如sys/filio.h、PCRE2属于可选组件或系统差异项,Nginx 会自动适配当前环境,只要最终成功生成 Makefile 文件,就代表配置通过。
6.2 配置结果说明
配置成功后会输出完整的安装路径摘要:
- 安装前缀:
/usr/local/nginx - 主程序文件:
/usr/local/nginx/sbin/nginx - 配置文件目录:
/usr/local/nginx/conf - 主配置文件:
/usr/local/nginx/conf/nginx.conf - 日志目录:
/usr/local/nginx/logs/
配置完成后,执行make && make install命令即可完成编译与安装。
实验总结
本次实验覆盖了 Linux 系统管理中非常核心的几块内容:
- 用户与用户组体系是权限管理的基础,通过附加组可以快速实现团队协作目录的权限分配
- 基础权限、特殊权限、ACL 共同构成了完整的权限控制体系,从粗粒度到细粒度可以满足不同场景的授权需求
- 命令别名是提升操作效率的实用技巧,但需要注意定义语法,且临时别名仅在当前终端生效
- 登录日志是运维排查、安全审计的重要依据,掌握 lastlog 和 last 两个命令是基础能力
- 源码编译是 Linux 下安装服务的通用方式,核心流程为三步:configure 配置 → make 编译 → make install 安装
实验过程中最直观的感受是:Linux 对命令拼写、参数语法的要求非常严格,多一个空格、错一个字母顺序都会导致执行失败。遇到报错不用慌张,对照错误提示逐字检查命令与路径,绝大多数基础问题都能快速定位解决。