Linux实验笔记(三):用户权限、ACL与Nginx源码编译实操踩坑记录 Linux系统管理与服务部署实验记录三用户权限、ACL与Nginx源码编译前言本篇是Linux系列实验的第三篇博客本次实验围绕用户与用户组管理、文件权限控制、ACL访问控制列表、Shell命令别名、系统登录日志查询以及Nginx源码编译安装六大模块展开。实验过程中踩了不少拼写和语法上的坑都会在文中逐一标注方便自己复盘也给大家避坑。实验环境CentOS 7内核 3.10.0-1160.el7.x86_64root 用户操作。一、用户与用户组基础管理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 文件权限分为所有者、所属组、其他人三段每段包含读(r4)、写(w2)、执行(x1)三种权限通过数字相加可以快速表示权限组合。操作命令# 创建测试文件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解压命令aliasuntartar -zxvf# 自定义ping命令默认只发送5个数据包aliaspingping -c 5# 自定义清屏快捷命令aliascclear踩坑记录首次定义untar别名时出现语法错误等号两侧误加了空格导致系统将命令拆分为多个参数报not found。定义别名的语法要求是别名名称、等号、命令字符串三者之间不能有任何空格。4.2 删除别名 unalias# 删除ping别名unaliasping# 删除untar别名unaliasuntar执行删除后再通过alias查看对应别名已从列表中移除。注意unalias后仅跟别名名称即可不要附带等号和命令内容否则会执行报错。4.3 命令类型与查找路径# 查看命令类型typecd# 输出cd is a shell builtinShell内置命令typels# 输出ls is aliased to ls --colorauto别名命令# 查看外部命令的二进制文件路径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 对命令拼写、参数语法的要求非常严格多一个空格、错一个字母顺序都会导致执行失败。遇到报错不用慌张对照错误提示逐字检查命令与路径绝大多数基础问题都能快速定位解决。