2026/4/8 5:47:10
网站建设
项目流程
淘宝可做的团购网站,代理网络手游,大学网站建设包括哪些课程,低价备案域名购买文章目录一、原操作逐步骤深度详解1. 创建用户组 dev_team核心详解#xff1a;2. 创建用户 alice#xff0c;指定主组为 dev_team核心详解#xff1a;3. 创建用户 bob#xff0c;指定主组为 dev_team核心详解#xff1a;4. 创建 /opt/project 目录核心详解#xff1a;5. …文章目录一、原操作逐步骤深度详解1. 创建用户组 dev_team核心详解2. 创建用户 alice指定主组为 dev_team核心详解3. 创建用户 bob指定主组为 dev_team核心详解4. 创建 /opt/project 目录核心详解5. 修改 /opt/project 的所有者和所属组核心详解6. 配置 /opt/project 权限为 750核心详解7. 为 /opt/project 添加粘滞位核心详解二、优化后的生产级脚本核心优化点脚本使用说明三、核心知识点与优化总结1. 核心知识点回顾2. 优化点总结你希望对创建dev_team用户组、alice/bob用户以及/opt/project目录权限配置含粘滞位的7个Shell操作进行深度详解并优化为更健壮、规范的生产级脚本。以下是逐步骤的底层原理解析以及包含错误处理、校验、安全考量的优化方案。一、原操作逐步骤深度详解1. 创建用户组 dev_teamgroupadddev_team核心详解命令作用在系统中新增名为dev_team的用户组底层会修改两个核心文件/etc/group存储组的公开信息格式组名:密码占位符:GID:组成员/etc/gshadow存储组的加密密码无密码时为!表示禁止组密码登录。关键细节GID组ID自动分配默认从1000开始系统组1000可通过-g指定固定GID如groupadd -g 1001 dev_team潜在问题若dev_team已存在执行该命令会直接报错groupadd: group dev_team already exists生产环境需先校验。2. 创建用户 alice指定主组为 dev_teamuseradd-g dev_team alice核心详解原注释修正-u是笔误useradd的-g参数才是指定主组-u是指定UID命令作用创建用户alice并将其主组直接设为dev_team默认不指定-g时会自动创建与用户名同名的alice组作为主组底层修改/etc/passwd新增行格式alice:x:1001:1001::/home/alice:/bin/bash其中1001是alice的UID和dev_team的GID/etc/shadow新增alice的密码占位符默认无密码无法登录需用passwd alice设置密码关键细节-g指定的组必须已存在否则报错默认创建家目录/home/alice需确保/home目录存在否则家目录创建失败登录Shell默认是/bin/bash可通过-s指定如-s /bin/zsh。3. 创建用户 bob指定主组为 dev_teamuseradd-g dev_team bob核心详解与alice创建逻辑完全一致核心目的是确保bob和alice同属dev_team主组后续共享/opt/project目录的组权限补充若需将用户添加到附加组而非主组用-G参数如useradd -G dev_team bob主组仍为bob附加组为dev_team。4. 创建 /opt/project 目录mkdir-p /opt/project核心详解-p参数核心价值递归创建父目录若/opt不存在则先创建/opt再创建/opt/project若目录已存在无报错避免重复执行脚本时中断默认权限创建的目录所有者为执行命令的用户如root所属组为执行用户的主组如root默认权限为755rwxr-xr-x。5. 修改 /opt/project 的所有者和所属组chownalice:dev_team /opt/project核心详解chown语法chown [所有者]:[所属组] 路径冒号分隔也可用.分隔如alice.dev_team但冒号更通用权限要求仅root或目录的当前所有者有权执行chown普通用户只能修改自己拥有的文件的所属组且需是该组成员关键细节仅改所有者chown alice /opt/project仅改所属组chown :dev_team /opt/project或chgrp dev_team /opt/project递归修改目录下有子文件/目录chown -R alice:dev_team /opt/project本例目录刚创建无需递归但需知晓。6. 配置 /opt/project 权限为 750chmod750/opt/project核心详解八进制权限解析750对应符号权限rwxr-x---拆解如下权限范围八进制值符号权限具体含义所有者alice7rwx读4 写2 执行1所属组dev_team5r-x读4 执行1其他用户0—无任何权限目录执行权限x的关键目录的x权限是“进入目录”的前提——即使有r权限无x也无法cd进入或ls列出目录内容更易读的符号写法chmod urwx,grx,o /opt/project生产环境推荐可读性更高。7. 为 /opt/project 添加粘滞位chmodt /opt/project核心详解粘滞位Sticky Bit仅对目录有效添加后目录权限位最后一位变为t替代原x位即750 t→ 八进制1750符号权限rwxr-x--t核心规则解决的问题无粘滞位时dev_team组的成员如bob可删除/改名/opt/project下任意文件即使是alice创建的有粘滞位时仅文件所有者、目录所有者alice、root能删除/改名该目录下的文件bob只能删除自己创建的文件典型应用系统/tmp目录默认权限1777rwxrwxrwt所有用户可创建文件但只能删除自己的文件八进制写法chmod 1750 /opt/project直接指定粘滞位基础权限更精准移除粘滞位chmod -t /opt/project。二、优化后的生产级脚本核心优化点增加存在性校验组、用户、目录避免重复创建报错开启严格模式set -euo pipefail异常时脚本立即终止增加日志输出明确每一步操作结果补充安全设置用户密码、家目录权限使用符号权限写法提升可读性校验操作结果确保配置生效。#!/bin/bash# 生产级脚本创建dev_team组、alice/bob用户配置/opt/project目录权限# 严格模式错误立即退出、未定义变量报错、管道错误检测set-euo pipefail# 配置项集中管理便于修改GROUP_NAMEdev_teamUSERS(alicebob)TARGET_DIR/opt/projectDIR_PERMurwx,grx,o# 等价于750STICKY_BITtrue# 是否添加粘滞位# 日志函数结构化输出log(){localLEVEL$1localMSG$2echo[$(date%Y-%m-%d %H:%M:%S)] [$LEVEL]$MSG}# 1. 创建用户组先校验是否存在logINFO开始创建用户组$GROUP_NAMEifgetent group$GROUP_NAME/dev/null;thenlogWARN用户组$GROUP_NAME已存在跳过创建elsegroupadd$GROUP_NAMElogINFO用户组$GROUP_NAME创建成功GID$(getent group $GROUP_NAME|cut-d: -f3)fi# 2. 创建用户并指定主组批量处理logINFO开始创建用户${USERS[*]}forUSERin${USERS[]};do# 校验用户是否存在ifid-u$USER/dev/null;thenlogWARN用户$USER已存在跳过创建continuefi# 创建用户指定主组、家目录、登录Shelluseradd-g$GROUP_NAME-d/home/$USER-s/bin/bash$USER# 设置初始密码生产环境建议注释改为手动设置echo$USER:Dev123456|chpasswd# 强制用户首次登录修改密码passwd-e$USER# 配置家目录权限仅所有者可访问chmod700/home/$USERlogINFO用户$USER创建成功UID$(id-u$USER)初始密码Dev123456首次登录需修改done# 3. 创建目标目录-p确保父目录存在logINFO开始创建目录$TARGET_DIRmkdir-p$TARGET_DIRlogINFO目录$TARGET_DIR创建/确认成功# 4. 修改目录所有者和所属组logINFO设置$TARGET_DIR所有者alice所属组$GROUP_NAMEchownalice:$GROUP_NAME$TARGET_DIR# 校验所有者/所属组是否生效ACTUAL_OWNER$(stat-c%U$TARGET_DIR)ACTUAL_GROUP$(stat-c%G$TARGET_DIR)if[$ACTUAL_OWNERalice][$ACTUAL_GROUP$GROUP_NAME];thenlogINFO所有者/所属组配置生效elselogERROR所有者/所属组配置失败实际$ACTUAL_OWNER:$ACTUAL_GROUPexit1fi# 5. 配置目录基础权限logINFO设置$TARGET_DIR基础权限$DIR_PERM等价于750chmod$DIR_PERM$TARGET_DIR# 6. 添加粘滞位可选if[$STICKY_BITtrue];thenlogINFO为$TARGET_DIR添加粘滞位chmodt$TARGET_DIR# 校验粘滞位是否生效ifstat-c%a$TARGET_DIR|grep-q^1;thenlogINFO粘滞位添加成功最终权限$(stat-c%A$TARGET_DIR)elselogERROR粘滞位添加失败exit1fifi# 最终校验列出目录权限信息logINFO所有配置完成$TARGET_DIR最终权限信息ls-ld$TARGET_DIRlogINFO脚本执行完毕脚本使用说明执行权限需root运行sudo bash script.sh密码设置脚本中默认设置初始密码Dev123456并强制首次登录修改生产环境建议注释该部分改为手动设置密码可配置项顶部GROUP_NAME/USERS/TARGET_DIR等变量可按需修改日志输出每一步操作有时间戳和级别INFO/WARN/ERROR便于排查问题。三、核心知识点与优化总结1. 核心知识点回顾用户/组核心文件/etc/passwd用户信息、/etc/group组信息、/etc/shadow用户密码、/etc/gshadow组密码权限核心目录必须有x权限才能进入750权限确保“所有者可读写执行、组成员可读写执行不750是所有者rwx组成员rx其他无”粘滞位核心解决“同组用户误删他人文件”问题仅文件所有者/目录所有者/root可删除文件chown/chmodchown改所有者/组仅rootchmod改权限所有者/root可改。2. 优化点总结原操作问题优化方案无存在性校验重复执行报错getent group/id -u校验组/用户是否存在无错误处理异常静默失败开启set -euo pipefail严格模式权限写法不直观用符号权限urwx,grx,o替代八进制无配置校验用stat校验所有者/权限/粘滞位是否生效安全隐患无密码/弱密码设置初始密码强制首次登录修改无日志排查困难结构化日志函数输出时间戳和操作结果该优化脚本兼顾了健壮性错误处理、校验、安全性密码策略、权限控制和可维护性集中配置、日志输出完全适配生产环境的使用要求。