一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Shell函数如何封装批量创建用户组与用户的标准流程以确保权限合规

时间:2026-08-06 14:04:59 编辑:袖梨 来源:一聚教程网

封装批量创建用户组与用户的标准化流程,需将重复操作抽象为四个职责明确的函数:validate_input校验输入、create_group_if_missing创建组、create_user_with_home_and_shell创建用户、setup_home_and_shared_dirs配置目录权限,并嵌入强制合规控制与审计日志。

封装批量创建用户组与用户的标准流程,关键在于把重复操作抽象成可复用、可验证、可审计的函数,同时嵌入权限检查和合规控制点,而不是堆砌命令。

函数设计要覆盖四个核心阶段

每个阶段对应一个职责明确的函数,避免单函数过长或混杂逻辑:

  1. validate_input:校验用户名/组名是否合法(长度、字符集、不以数字或点开头)、密码强度(如含大小写字母+数字+符号)、目标目录是否存在且可写
  2. create_group_if_missing:检查组是否存在(getent group $groupname),不存在则调用 groupadd;支持传入 GID 参数,确保跨环境 GID 一致
  3. create_user_with_home_and_shell:使用 useradd -m -s /bin/bash -g $primary_group -G $supp_groups 创建用户;禁用 -p 直接写 hash,改用 chpasswdpasswd --stdin(仅限支持系统)
  4. setup_home_and_shared_dirs:为用户设置家目录权限(chmod 700 /home/$user),为组创建共享目录并设 setgidchmod 2770 + chgrp $group),确保新文件自动继承组

权限合规必须硬编码进函数逻辑

不能靠人工后期配置,而要在创建时强制执行:

  1. 所有用户家目录创建后立即执行 chmod 700,禁止其他用户读取
  2. 共享目录统一用 chmod 2770chgrp 到对应组,保证组内可写且新建文件属组正确
  3. 若需 sudo 权限,不直接加 sudo 组,而是写入 /etc/sudoers.d/ 独立文件(如 /etc/sudoers.d/group_dev),内容为:

    %dev ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/systemctl restart nginx

  4. 首次登录强制改密:调用 chage -d 0 $user

主流程函数串联调用并记录审计日志

主函数 batch_provision_users 不做具体操作,只协调顺序和捕获结果:

  1. 读取结构化输入(推荐 JSON 或带注释的 TSV,非裸文本)
  2. 对每条记录调用上述四个函数,任一失败则 return 1 并记录错误到 /var/log/user-provision.log
  3. 成功后写入审计行:$(date '+%F %T') CREATE user:$u group:$g home:/home/$u shared:/srv/dev-shared
  4. 全程使用 set -e -u -o pipefail,避免静默失败

函数库加载与安全调用方式

将上述函数存为 lib_user_mgmt.sh,不设执行权限,仅被 source:

主脚本开头写:

source /opt/lib/lib_user_mgmt.sh || { echo "无法加载函数库"; exit 1; }

运行前检查 root 权限:check_root 函数应作为第一个调用项。

不复杂但容易忽略

热门栏目