linux服务部署和权限管理
记录一下在linux上部署服务的一般setup
权限隔离
为了权限隔离,核心原则是每个服务使用独立用户运行,只给它最低权限(Least Privilege)。
通常建议为每个服务创建一个专用用户,例如:
| 服务 | 用户名建议 |
|---|---|
| nginx | nginx |
| mysql | mysql |
| redis | redis |
| yourapp | appuser / myservice |
不建议用 root 运行服务,因为 root 权限太大。
创建服务用户
创建系统用户,同时不允许登陆,-r表示系统用户,uid低于1000,nologin的用户无法使用su切换到改账户
1 | |
或者如果需要登陆的话,创建普通用户
1 | |
给用户设置密码,如果需要登陆的话
1 | |
权限管理
权限管理的核心是:把文件、目录、进程资源权限限制在最小范围。
例如需要访问的文件是/var/www/myapp
1 | |
chown更改目录的所有权,chmod -R 750表示所有者:读写执行,组:读执行,其他:无权限
常见服务权限需求:
| 资源 | 权限建议 |
|---|---|
| 日志文件 | 644 或 640 |
| 日志目录 | 750 |
| 数据目录 | 700 或 750 |
| 配置文件 | 600 或 640 |
| 可执行文件 | 755 |
服务启动
如果你用 systemd 启动服务,你应该在 service 文件里指定:
1 | |
这样服务进程就会以该用户身份运行。或者进一步的限制:
PrivateTmp=true:独立 /tmp,避免泄漏NoNewPrivileges=true:禁止提权ProtectSystem=full:系统目录只读ProtectHome=true:用户家目录只读/不可访问
不过禁止提权可能会导致无法监听特权端口,所以视情况而定。以及注意要配置log目录和文件的权限,确保用户可以访问。
可以先在终端切换用户试一下服务是否能启动
1 | |
配置模板
1 | |
linux服务部署和权限管理
http://zr4in.github.io/2026/01/22/linux服务部署和权限管理/