警告!此规范内容是不稳定版本,可能会发生破坏兼容性的更新。当无法保障向下兼容时,将会升级此文档的主版本号,如从“1.0”更新到“2.0”。反之,普通更新只会升级次版本号,如“1.0”更新到“1.1”,其对“1.0”版本向下兼容。请在使用前确认此文档的版本号,并为将来可能发生的兼容性变化做好准备。
应用数据目录规范
- 维护者:LiHe lihe@uniontech.com
- 修改日期:2021.03.10
- 版本:1.0
- 议题:#23
引言
本规范主要使用者为应用开发厂商,适用面向普通用户的通用软件开发。本规范主要遵循如下原则:
应用与系统隔离:应用不应当向系统目录写入数据。系统还原功能会彻底清除这些数据。
应用间数据隔离:不同应用的私有数据不能相互访问。
数据存储目录
根据以上原则,对应用的目录使用做如下定义:
应用用户数据目录
和用户相关的应用数据,要求应用数据优先在用户目录进行存储。该规范遵循XDG相关目录规范,例如:
XDG_DATA_HOME\${appid}
XDG_CONFIG_HOME\${appid}
XDG_CACHE_HOME\${appid}
XDG_DATA_HOME\${appid}
XDG_CONFIG_HOME\${appid}
XDG_CACHE_HOME\${appid}
应用私有数据目录
应用私有数据目录通过环境变量DSG_APP_DATA
来指定,默认情况下,DSG_APP_DATA
值为:
DSG_APP_DATA=/deepin/appdata/${appid}
DSG_APP_DATA=/deepin/appdata/${appid}
该环境变量由系统提供,默认保护应用appid,不需要开发者拼接appid。
该目录仅供应用自身读写,其他应用不允许读写,否则将导致不可预期行为。
该目录权限应当为:
权限:(0770/drwxrwx---)
Uid:( 0/ root)
Gid:( 100/ users)
权限:(0770/drwxrwx---)
Uid:( 0/ root)
Gid:( 100/ users)
应用数据清理
在应用程序卸载时,操作系统应该能够自动清理应用数据目录,如果应用需要进行数据保留,可以在安装时的info.json文件中添加描述信息。
{
"appid": "com.deepin.example",
"uninstall": {
"filesystem.app_data": {
"keep_patterns": [
"config/*",
"*data"
]
}
}
}
{
"appid": "com.deepin.example",
"uninstall": {
"filesystem.app_data": {
"keep_patterns": [
"config/*",
"*data"
]
}
}
}
keep_patterns为需要保留的文件匹配列表,使用globbing patterns
格式,和.gitignore相同,参考Wildcards。
在删除时,会匹配DSG_APP_DATA
目录下的子目录或文件,保留和keep_patterns匹配的内容。
安全访问控制
本规范要求操作系统实现安全访问控制
功能,即其他应用/进程不能访问应用的私有数据目录。
注意事项
- 应当特别注意,只有和用户无关的数据才能放在应用私有数据目录,如应用激活信息,应用级别的配置数据等。
- 系统会使用额外的安全模块保障应用之间隔离,请勿直接读取其他应用的数私有据目录。
- 在程序中请使用
DSG_APP_DATA
读取目录位置,如果DSG_APP_DATA
为空时,再使用/deepin/appdata/${appid}
作为回滚的配置。
兼容性说明
兼容性建议
在1040之前的系统中,不支持自动创建应用数据目录,请在rules文件中添加如下代码来创建目录:
# 注意替换${appid}
override_dh_fixperms:
dh_fixperms
chmod 770 /deepin/appdata/${appid}
chown root:users /deepin/appdata/${appid}
# 注意替换${appid}
override_dh_fixperms:
dh_fixperms
chmod 770 /deepin/appdata/${appid}
chown root:users /deepin/appdata/${appid}
或者确认deb包中包含了该目录且权限正确。
兼容列表
- ★: 支持
- ☆: 不支持
特性 | <=1040 | >=1050 |
---|---|---|
安全访问控制 | ☆ | ★ |
应用数据清理 | ☆ | ★ |