chmod 700 /home/username仅修复现有家目录权限,但新创建的文件(默认644)和子目录(默认755)仍可能被他人读取,必须配合umask 077才能确保所有新建内容默认私有。

家目录权限设成 700 是最常见且安全的选择,但直接 chmod 700 /home/username 只能解决已有目录的权限问题;真正要让新创建的文件、子目录也保持私有,必须配合 umask 调整,默认值 022 会生成不安全的 755 目录和 644 文件。
为什么 chmod 700 /home/username 不够用
家目录本身权限设为 700 确实能阻止其他用户进入或列出内容,但问题出在后续行为:用户在自己家目录下新建的文件默认是 644、新建目录默认是 755(当 umask 为 022 时)。这意味着别人仍可能读取你的配置文件(如 ~/.bash_history)、日志或临时文件。这不是“家目录没锁好”,而是“钥匙链没管住”。
chmod 700只影响目标目录本身,不递归,也不影响未来创建的内容- 普通用户无法对
/home/username执行chmod -R(可能因权限不足失败),且递归修改已有内容风险高(比如改坏~/.ssh的700会导致 SSH 拒绝登录) - 很多发行版(如 Ubuntu)默认用
umask 022,它对所有 shell 会话生效,覆盖单次chmod
如何永久设置家目录新建内容的默认权限
真正要紧的,不是事后把权限改一遍,而是让系统在一开始就别生成过于开放的权限。这个动作通常靠 umask 来完成,它会在用户登录时由 shell 的初始化脚本载入。配置的优先级顺序是:/etc/login.defs(新用户)→ /etc/profile 或 /etc/bash.bashrc(所有用户)→ ~/.bashrc(仅当前用户)。
- 若只想改单个用户:编辑
~/.bashrc,末尾加一行umask 077,然后执行source ~/.bashrc - 若要全局生效(所有新老用户):在
/etc/profile末尾添加umask 077,注意不要放在if [ -n "$PS1" ]; then块内,否则非交互式 shell 不生效 - 验证是否生效:新开终端,运行
umask,应输出0077;再建个测试目录mkdir test && ls -ld test,权限应为drwx------(即700)
chown 和 chgrp 通常不需要动家目录所有权
一般情况下,用户按正常方式创建出来后,家目录的属主就是这个用户本人,所属组也会默认对应同名组。比如用户 alice,它的家目录通常就是 alice:alice。只要没有手动用 chown 改过,或者在创建用户时通过 useradd -g othergroup 指定了别的主组,通常就没必要再去动 chown 或 chgrp。
- 错误操作示例:
sudo chown root:root /home/alice—— 这会让alice自己都进不去家目录 - 如果确实需要把某个子目录(如
~/public_html)共享给 Web 服务,应该只改那个子目录,而不是整个家目录:chmod 755 ~/public_html,并确保其父目录至少保留x权限(即701或更高) - 注意:
~/.ssh必须是700,~/.ssh/authorized_keys必须是600,用umask 077后这些会自然满足;但若之前已存在宽松权限文件,需单独修复
容易被忽略的细节:login.defs 和 systemd-user 的干扰
有些系统(尤其是使用 systemd 的发行版)会绕过 /etc/profile,从 /etc/login.defs 读取 UMASK 值来初始化新用户的 umask。而 systemd --user 服务可能有自己的环境,不加载 shell 配置。
- 检查
/etc/login.defs中是否有UMASK行,如有且值为022,建议改为077(影响未来新建用户) - 如果用户通过图形界面(GNOME/KDE)登录,shell 配置可能不自动加载,此时需确认桌面环境是否读取
~/.profile或~/.pam_environment - 用
getent passwd username查看用户实际家目录路径,避免误操作软链接或挂载点(如/home单独挂载时,/home/username可能不在根文件系统上)