macOS: 初探本地资源库中的Security.plist文件的用途

来源:互联网 发布:apache 查看编译参数 编辑:程序博客网 时间:2024/06/03 14:19

昨天看到一个论坛中的帖子, 有个人吧/Library/Preferences/com.apple.security.plist文件给删除了, 而且为了万无一失, 还重新安装了系统. 看到这里, 真是有中说不出的感觉.


先不管说, /Library/Preferences目录中的文件的作用, 单说com.apple.security.plist文件, 看上去挺重要的, 却说不出它到底是干什么用的. 再看看回答的的帖子, 有的以文本方式打开看看内容的, 有的说没关系的, 大家都说不出它的用处.


Plist文件基础

在我的恢复中, 对于不太熟悉plist的网友提供了额外信息, 补充了一些基本知识:

Plist可以说是Mac操作系统由来已久所内置支持的用于存储操作系统或者软件配置和参数的XML文件格式, 它有纯文本和二进制两种存储格式.
对plist的基本操作,可以使用两个系统提供的基本命令/usr/bin/defaults和/usr/libexec/PlistBuddy


基本的读操作, 比如本题的:

defaults read /Library/Preferences/com.apple.security.plist 

基本的写操作, 比如变更SecItemSynchronizable的值:
sudo defaults write /Library/Preferences/com.apple.security.plist SecItemSynchronizable -bool False
改回原值:
sudo defaults write /Library/Preferences/com.apple.security.plist SecItemSynchronizable -bool True


当然还有很多的其它操作和实际问题, 这个可以作为另一的讨论题目.




分级的作用域
这里不多说了, 其实每个不同目录的文件, 都有自己的作用域, 并担负着不同的职责. 一般来说, /Library中的文件是本地系统级别的. 与用户的~/Library是有区别的, 当然与/System/Library的操作系统级别的就更不同的. 具体的怎么不同, 这里不赘述了.


转入正题

现在说正题: “/Library/Preferences/com.apple.security.plist”文件的作用


1. 两眼茫茫, 海里捞针

网上找com.apple.security.plist, 基本没有找到任何有价值的信息, 后来就找SecItemSynchronizable, 就找到了这里:

SecItem.cpp

这个寄宿在github上的项目, 不是苹果的官方的, 不管它, 看这个cpp程序的开始说明, 说是:

“Copyright (c) 2006-2014 Apple Inc. All Rights Reserved.”

就权当它是苹果官方程序吧, 反正咱们也不用它编译程序, 只不过是找点线索. 


2. 初见曙光, 疑窦初现
通过搜索“SecItemSynchronizable”找到了一个函数:static Boolean SecItemSyncEnabled()
他的说明是:// Returns true if keychain syncing is globally enabled.
里面有个注释行是://sudo defaults write /Library/Preferences/com.apple.security SecItemSynchronizable -bool YES
是不是很熟悉啊. 但是还是不明白, 什么叫globally syncing呢? 用户登陆本机, 钥匙串和谁同步呢? 带着疑问继续搜索.


3. 豁然开朗, 似有转机
继续, 找到一些函数, 比如: SecItemCopyMatching, SecItemAdd, SecItemUpdate, SecItemDelete等, 里面基本都有下面两句:

Boolean search_ios = SecItemSynchronizable(query);

Boolean merge_search = SecItemSynchronizableAny(query);



4. 原来如此
看到这里的ios, 可以猜测, 它很可能是与用户iCloud帐户设备之间同步钥匙串相关的.


5. 有待解开,未解之谜

是, 这个是本机全局的plist文件, 所以应该是控制所有用户的钥匙串的同步, 而这个同步工作, 应该是各个用户自己可以设置的行为, 用不着全局的. 另一个考虑是, 这个只是系统默认的行为, 当用户没有相关设置时, 会找全局配置, 并使用全局设置, 那么这个可能可以用来对企业部署内部初始值有点作用.


其实, 如果了解/Library的作用, 可以得出自己的合理的结论, 但是还需要观察实际操作的结果, 才可以得出最符合实际的结论. 

不过我们就到这里未知了, 目前没有深究的动力.


原创粉丝点击