/etc/skel 是什么
/etc/skel 是新用户家目录的模板目录:执行 useradd -m 时,目录里的文件会被复制到新家目录,用来统一默认的 shell 环境、别名与目录结构。它决定「新同事第一次登录时会看到什么」,改它只影响之后创建的用户,已存在的账号不会自动更新。
基本信息
| 用途 | 定制新用户默认家目录内容 |
|---|---|
| 语法 | 编辑 /etc/skel 目录,配合 useradd -m 与 -k 使用 |
| 相关组件 | shadow-utils 与各发行版的目录约定 |
| 生效范围 | 仅对之后创建的用户生效 |
典型使用场景
- 统一团队的 shell 别名、提示符与环境变量
- 新建用户时自动带上常用目录结构
- 统一 umask 与默认编辑器等个人偏好
- 迁移与重建环境时保持一致的初始配置
- 演示环境里让新账号即刻可用
- 审计新账号默认配置是否符合安全基线
常用示例
常用示例
ls -la /etc/skel # 查看模板内容
echo 'umask 027' >> /etc/skel/.bash_profile # 统一默认 umask
echo 'alias ll="ls -alh"' >> /etc/skel/.bashrc
mkdir -p /etc/skel/.ssh && chmod 700 /etc/skel/.ssh # 需要时准备目录
sudo useradd -m -k /etc/skel deploy # 按模板创建用户
sudo ls -la /home/deploy | head # 核对复制结果
diff -r /etc/skel /home/deploy 2>/dev/null | head # 对比模板与家目录模板中的常见文件
| 文件 | 作用 | 注意点 |
|---|---|---|
| /etc/skel/.bashrc | 交互式 shell 配置 | 别名与提示符写在这里 |
| /etc/skel/.bash_profile | 登录 shell 配置 | umask 写这里更稳妥 |
| /etc/skel/.ssh/ | 密钥目录 | 权限必须严格,模板要保持干净 |
| /etc/default/useradd | 默认参数 | SKEL 路径在此配置 |
| /etc/login.defs | 密码与账号策略 | 影响新用户的默认有效期 |
已有用户的配置不会随 /etc/skel 的变化而更新:模板改动只在下次创建用户时生效,老用户需要另行推送或手工同步。
往模板里放密钥、令牌这类敏感文件,会被复制到每个新账号的家目录,属于典型的凭据扩散风险;模板应保持最小与干净。
umask 写在 .bashrc 里对非交互 shell 不一定生效,登录脚本的选择(.bash_profile 与 .profile)随发行版不同,改动前先确认目标系统的约定。
模板里也可以预置常用目录结构,让新账号登录即可顺手使用;但不要塞入大量示例文件,模板越小越容易长期维护。