为了方便与安全的管理publiccms我们通常给客户使用systemd托管nginx、tomcatmysql等服务

最近使用linux系统安装得tomcat服务运行publiccms遇到了下面这个错误,不管怎么调整权限都没有效果

HSEARCH600154: Unable to start index: HSEARCH600015: Unable to initialize index directory: /data/publiccms/indexes: Read-only file system
            Context: index 'CmsContent'

经过检查发现系统的服务配置中有一段如下的安全配置

[Service]
# Security
User=tomcat
Group=tomcat
ProtectSystem=strict
ReadWritePaths=/etc/tomcat/Catalina/
ReadWritePaths=/var/lib/tomcat/webapps/
ReadWritePaths=/var/log/tomcat/

其中ProtectSystem=strict 表示进程运行在systemd的沙箱环境中,该配置优先级高过了linux的文件权限设置,该进程启动后除了下面允许读写的路径,其他路径都只有只读权限

增加下面这行配置后 问题解决

ReadWritePaths=/data/publiccms/

非生产环境还可以写成如下配置,当数据目录不存在时也不会有错误提示

ReadWritePaths=-/data/publiccms/

也可以将这个路径 放到其他 ReadWritePaths后面 空格隔开路径