封装批量创建用户组与用户的标准化流程,需将重复操作抽象为四个职责明确的函数:validate_input校验输入、create_group_if_missing创建组、create_user_with_home_and_shell创建用户、setup_home_and_shared_dirs配置目录权限,并嵌入强制合规控制与审计日志。
封装批量创建用户组与用户的标准流程,关键在于把重复操作抽象成可复用、可验证、可审计的函数,同时嵌入权限检查和合规控制点,而不是堆砌命令。
每个阶段对应一个职责明确的函数,避免单函数过长或混杂逻辑:
getent group $groupname),不存在则调用 groupadd;支持传入 GID 参数,确保跨环境 GID 一致useradd -m -s /bin/bash -g $primary_group -G $supp_groups 创建用户;禁用 -p 直接写 hash,改用 chpasswd 或 passwd --stdin(仅限支持系统)chmod 700 /home/$user),为组创建共享目录并设 setgid(chmod 2770 + chgrp $group),确保新文件自动继承组不能靠人工后期配置,而要在创建时强制执行:
chmod 700,禁止其他用户读取chmod 2770 并 chgrp 到对应组,保证组内可写且新建文件属组正确sudo 组,而是写入 /etc/sudoers.d/ 独立文件(如 /etc/sudoers.d/group_dev),内容为:%dev ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/systemctl restart nginx
chage -d 0 $user
主函数 batch_provision_users 不做具体操作,只协调顺序和捕获结果:
return 1 并记录错误到 /var/log/user-provision.log
$(date '+%F %T') CREATE user:$u group:$g home:/home/$u shared:/srv/dev-shared
set -e -u -o pipefail,避免静默失败将上述函数存为 lib_user_mgmt.sh,不设执行权限,仅被 source:
主脚本开头写:
source /opt/lib/lib_user_mgmt.sh || { echo "无法加载函数库"; exit 1; }
运行前检查 root 权限:check_root 函数应作为第一个调用项。
不复杂但容易忽略