应配置 umask 0077,使新配置文件默认权限为600(-rw-------),仅属主可读写;交互式启动需在~/.bash_profile设umask 0077,systemd服务则在[Service]段加UMask=0077。

新手配置 Linux 的 umask 来防止新启服务生成可写配置文件,核心是让配置文件默认只有所有者可读写(600),不被组或其他用户访问。这不是靠事后 chmod 补救,而是从创建那一刻就“锁住”权限。
先搞清目标:为什么配置文件不能是 644 或 664?
默认 umask 0022 会让新文件权限为 644(-rw-r--r--),意味着其他用户也能读取——如果这个文件是数据库密码、API 密钥或 TLS 私钥,等于把钥匙贴在门上。umask 0002 更危险,会生成 664(-rw-rw-r--),组内任意用户都能改它。
真正安全的起点是:仅属主可读写,其余全拒,对应文件权限 600,需用 umask 0077。
给服务配 umask 的两种可靠方式
服务启动时用哪个 umask,取决于它怎么启动:
-
交互式手动启服务(如 ./start.sh):确保你登录 shell 的 umask 已设为 0077。编辑 ~/.bash_profile(不是 ~/.bashrc),末尾加一行:
umask 0077
然后运行source ~/.bash_profile生效。验证:umask应输出0077,再touch test.conf && ls -l test.conf看是否为-rw-------。 -
systemd 服务(最常见):直接在 service 文件里声明,不依赖用户环境。编辑
/etc/systemd/system/yourapp.service,在[Service]段下加:UMask=0077
保存后执行:sudo systemctl daemon-reload && sudo systemctl restart yourapp。这是最干净、最可控的方式。
别踩这些坑
新手常试错的地方:
- 只改
~/.bashrc:SSH 登录或 systemd 启动的服务根本不会加载它,无效。 - 用
umask 0022或0002:它们保留了其他用户读权限,对配置文件就是裸奔。 - 以为设了 umask 就万事大吉:umask 只管“新建时”,已有配置文件权限不变,得手动
chmod 600 /path/to/conf一次。 - 忽略目录权限:即使文件是 600,如果它所在的目录是 755,别人仍能
ls列出文件名。建议配套设目录权限为 700。
验证是否真起作用
别只看 umask 命令输出,要实测服务行为:
- 如果是脚本启动:先确认当前 shell umask 是 0077,再运行脚本,检查它生成的 .conf 文件权限。
- 如果是 systemd 服务:重启后,用
sudo systemctl status yourapp查看是否无报错;再进服务工作目录,ls -l *.conf确认全是-rw-------。 - 临时测试法:在服务启动前,用同一用户执行
umask 0077 && touch fake.conf && ls -l fake.conf,看到 600 才说明环境已就绪。











