在Ubuntu或其它Linux系统中,合理管理服务用户的权限是保障系统安全的关键环节。很多初学者在部署Web服务器、数据库或其他后台服务时,常常直接使用root账户运行服务,这会带来极大的安全隐患。本文将手把手教你如何为服务创建专用用户,并遵循“最小权限原则”进行权限配置,确保系统既安全又稳定。
什么是服务用户?
服务用户(Service User)是专为运行某个特定服务(如Nginx、MySQL、Redis等)而创建的系统账户。它通常没有登录权限,也不属于任何普通用户组,仅拥有运行该服务所需的最低文件和目录访问权限。这种做法符合Ubuntu服务权限管理中的核心理念:最小权限原则。
为什么不能用root运行服务?
如果服务以root身份运行,一旦该服务存在漏洞被攻击者利用,攻击者将直接获得系统的最高控制权。而使用专用服务用户,即使服务被攻破,攻击者的权限也会被限制在该用户所能访问的范围内,从而有效降低风险。
步骤一:创建专用服务用户
我们以部署一个名为
myapp的自定义服务为例,创建一个名为
myappuser的系统用户:
参数说明: 假设你的服务需要读写 sudo useradd \ --system \ --shell /usr/sbin/nologin \ --home-dir /var/lib/myapp \ --create-home \ myappuser --system
:创建系统用户(UID通常小于1000) --shell /usr/sbin/nologin
:禁止该用户登录系统 --home-dir /var/lib/myapp
:指定家目录(通常用于存放服务数据) --create-home
:自动创建家目录 步骤二:设置目录权限
/var/lib/myapp
和 /etc/myapp
目录:
这样,# 创建配置目录sudo mkdir -p /etc/myapp# 设置所有权sudo chown -R myappuser:myappuser /var/lib/myappsudo chown -R myappuser:root /etc/myapp# 设置权限(仅所有者可写)sudo chmod 700 /var/lib/myappsudo chmod 750 /etc/myapp myappuser
对自己的数据目录有完全控制权,对配置目录只有读权限(除非需要写入日志等,可按需调整)。
步骤三:在systemd服务中指定用户
如果你使用systemd管理服务,可以在服务单元文件中指定运行用户。编辑
/etc/systemd/system/myapp.service:
关键行是 [Unit]Description=My Custom ApplicationAfter=network.target[Service]User=myappuserGroup=myappuserExecStart=/usr/local/bin/myapp --config /etc/myapp/config.yamlRestart=always[Install]WantedBy=multi-user.target User=myappuser
和 Group=myappuser
,它们告诉systemd以该用户身份启动服务。
验证权限是否生效
启动服务后,可通过以下命令确认进程是否以正确用户运行:
输出中应显示类似: 有时服务需要访问不属于它的目录(如共享日志目录)。此时可使用ACL(访问控制列表)进行精细授权,而不必修改目录所有者: 通过为每个服务创建专用用户并严格限制其权限,你可以显著提升Ubuntu系统的安全性。这不仅是Linux服务账户安全的最佳实践,也是企业级运维的标配。记住:永远不要用root运行普通服务! 掌握系统用户权限配置和Ubuntu最小权限原则,你就能在保障功能的同时,构建出坚不可摧的服务架构。 提示:定期审计系统中的服务用户及其权限,使用 systemctl start myappps aux | grep myapp myappuser 1234 0.0 0.1 123456 7890 ? Ssl 10:00 0:00 /usr/local/bin/myapp --config /etc/myapp/config.yaml 高级技巧:使用ACL实现更细粒度控制
# 允许myappuser读写/var/log/sharedsudo setfacl -m u:myappuser:rwx /var/log/shared# 查看ACL设置getfacl /var/log/shared 总结
getent passwd
和 ls -l /etc/systemd/system/
等命令检查是否有异常配置。
