1. 故障现象(SYMPTOMS)
启动mariadb服务时,报如下错误:
[text]
can’t create test file xxxxx.lower-test
failed to set environment: access denied
[system] rejected send message, 2 matched rules; type=”method_call”, sender=”:1.203″ (uid=1000 pid=4064 comm=”systemctl unset-environment
2. 变化(CHANGES)
3. 故障原因(CAUSE)
安装 mariadb 时将数据文件的位置放在了 /home 目录下,而 Systemd 服务配置中默认配置 /home 目录是受保护的,不允许读写,导致服务无法启动。
4. 解决方案(SOLUTION)
-
a. 优先检查文件的目录权限
-
b. 其次检查服务启动文件
ProtectHome 可以设置为true、false、read-only
。 设置为 true 的时候,/home
、/root
、/run/user
对应用不可见。设置为 read-only, 上述三个目录对应用只读。设置为 false, 则应用可以正常访问这三个目录。 默认值是 true。为了保证应用不能访问用户私有数据, 建议所有长时间运行的服务开启该选项。
ProtectSystem 可以设置为 true/false/full。 设置为 true时,/usr
、/boot
目录被设置为只读。 设置为 full时,/usr
、/boot
、/etc
目录被设置为只读。 设置为 false时,则应用可以正常访问上述目录。这个选项可以保护系统目录不会被应用修改, 建议所有长时间运行的服务开启该选项。
-
c. 最后检查 SELinux
5. 总结(SUMMARY)
当前的需求是 /home 目录访问权限,则只需要修改 ProtectHome 参数为 false
即可。至此重启服务,一切功能正常。
[shell]
systemctl daemon-reload
systemctl restart mariadb
必须首先重新加载systemd的配置,否则不生效。