iOS MDM HeadFirst

引言
Apple MDM (Mobile Device Management) 字面理解就是一种管理移动设备的方式,覆盖 iOS 5 及更高版本的 iPhone/iPod touch/iPad、Mac OS X 10.7 及更高版本的 Mac、TVOS 9 及更高版本的 Apple TV,标题中的 “iOS” 非常片面,因为我只在 iOS 中应用过,其他平台大致相同罢。网络上对 MDM 的介绍还是比较少的,希望这篇文章能补充一些空白。距离上次 《iOS应用发布方式盘点+苹果商务详解》 发表已经有两年多的时间,当时在文章里提到了可以通过 MDM 分发应用,后来很多同学留言或私信我想多了解一点 MDM,实在抱歉,今天它终于来了。
插播一条广告,对 iOS 相关技术有兴趣的同学可以私信我,拉你进某信群聊,简书评论区实在不方便交流。
原创文章,如需转载请在下面留言让我知道。不留言不在开头标明出处链接的坏同学,1字1元索赔
读完本文你可以
- 了解 MDM 是什么,能做什么。
- 了解 MDM 系统组成和工作原理。
- 搭建一个属于你自己的生产级别的 MDM 服务(太好玩儿啦)。
目标读者
- 有管理多个 iOS 设备需求的企业 IT 经理、资产和设备管理员;
- 想要了解苹果 MDM 功能和机制的同学;
- 苹果和科技发烧友;
MDM 是什么
其实很多公司都在用 MDM 管理企业或员工的 iOS 设备,比如阿里的同学必装的“阿里郎”。
被管理的 iOS 设备会在 设置 - 通用 - 设备管理 里面多出一个描述文件,如下图。这表示你的设备被阿里郎远程管理了。

MDM 描述文件
苹果对 MDM 的介绍是这样的:
通过部署移动设备管理 (MDM) 解决方案,管理员可以安全地远程配置注册设备。管理员使用 Apple 校园教务管理或 Apple 商务管理来注册组织拥有的设备,用户也可以注册自己的设备。注册设备后,管理员可以更新软件和设备设置、监控组织政策的遵守情况、远程擦除或锁定设备,以及安装内部开发或通过 Apple 校园教务管理或 Apple 商务管理购买的 app 和书籍。
因为 MDM 的权限和能做的事情还是很多的,看完苹果的定义很难有直观的理解。别着急,我们继续来深入探索一下。
监督 (Supervised) 和非监督设备
加入 MDM 的设备分为监督和非监督,管理员可以决定设备加入哪种类型的 MDM。
一般来说比较敏感的操作只能在“监督”设备上执行,加入(注册到)“监督” MDM 的设备需要在注册时抹掉设备(除非你的设备是全新的),并且在设置或锁屏页面中会出现非常明显的提示。适合应用于企业或学校等机构购买的设备,控制能力强。再也不需要担心员工或学生登陆自己的 AppleID 并开启“查找我的 iPhone”这类功能,抹掉设备后不需要登录 AppleID 解除 ID 锁,这点对我工作的场景非常实用。当然,监督设备独享的敏感操作和限制等功能还有很多。
非监督设备也有一定优势,比如加入非监督 MDM 的设备不需要先抹掉,只要访问一个网址或者从电子邮件附件中安装一个特定的描述文件就可以了。退出 MDM 也很容易,用户只要在 iOS 设备上删掉描述文件就可以了。比较适合应用于员工自己的手机,比如你作为企业的 IT 人员,想让员工手机连接办公室 Wi-Fi,但又不想让员工知道 Wi-Fi 密码,就可以把员工手机加入到非监督 MDM。
具体要把设备注册为哪种类型,要看设备所属和你需要的功能是否是监督设备专用的。
能做什么
限制和配置
- Wi-Fi 配置
- VPN 配置
- HTTP、DNS 代理
- 网络内容过滤器
- 密码强度
- 应用黑白名单
- 单App模式
- FaceTime、iMessage
- AirDrop
- 截屏、录屏、投屏
- Siri
- 安装、卸载应用
- 应用内购
- iCloud照片流、备份、文档、钥匙串
- 抹掉设备内容和设置
- VPN
- Wi-Fi强制开启
- 蓝牙、蜂窝数据、eSIM设置
- 设备名、壁纸
- 密码、Touch ID、Face ID
- 查找我的iPhone
上面的清单很长,几乎控制到了 iOS 设备的方方面面,连 壁纸 都能设置,但这可能还不是完整的清单,随着时间的推移,苹果会加入更多功能,大家自己探索一下吧。这些功能和具体的信息(比如要连接的 Wi-Fi 名称和密码、加密方式、证书等等)大部分都是通过描述文件 (Profile,文件后缀 .mobileconfig) 承载的,只要把描述文件安装到设备上就可以生效。安装途径有很多种,比如把 iOS 设备通过 USB 数据线连接到 Mac 上、通过 MDM 命令远程安装(详见下文)、加入 MDM 时随注册描述文件一同安装等(设备注册到 MDM 方法见下文)。
创建描述文件的方法有很多种,最简单的就是使用 Apple Configurator 2 应用,可以在 Mac App Store 中下载到,是一款苹果官方出品的 macOS 应用。打开应用后点击菜单栏 File - New Profile,会弹出一个窗口用于编辑限制和配置信息,如下图:

从上图可以看出,苹果给的功能真的很多,我选中的是 Globle HTTP Proxy 选项,右侧是代理的具体参数配置页面。值得注意的是右上方有一个 supervised only,意思是只有“监督”设备才能使用这个功能。
查询
- 获取已安装应用、描述文件
- 设备容量、可用容量
- 电池电量
- OS版本
- UDID、设备名
- 型号、序列号
- 蓝牙、以太网、Wi-Fi的MAC地址
- 运营商名称、国家
- 电话号
- 某个应用的名称、大小、版本
- 密码、防火墙、文件保险箱等安全性
这些都是作为企业、组织或学校等机构,可以查询到的设备的信息。查询动作都是通过服务器远程进行的,只要设备联入了互联网就可以做到。
命令
- 请求、更改密码
- 开关蓝牙
- 开关丢失模式
- 播放丢失模式声音
- 获取设备位置
- 开关远程管理
- 安装OS更新
- 锁定设备
- 擦除
- 推送或删除App、图书、设置
- 请求、停止 AirPlay
- 重启、关闭设备
命令和查询类似,也是通过服务器给设备下发的。这里我们看到了一些很敏感的操作,比如擦除设备,这种都是需要监督设备才能支持的,所以在决定设备是否需要“监督”之前,可以先了解一下你想要的功能或限制是否为 supervised only。
MDM 下发命令流程
- 首先看下图的 Enroll 箭头,这是整个流程的准备阶段,意思是设备需要先注册到 MDM。这个操作只需要进行一次,只要设备没有退出 MDM,这个步骤不需要再发生。
- 向 MDM 服务下发指令,MDM 服务缓存指令。这里的 MDM Server 很关键,苹果没有统一的 MDM 服务,需要我们自己按照苹果的协议去实现。但是也不用担心,开源世界给我们提供了很好的工具,具体部署和使用方法见下文。
- MDM 服务向苹果 APNs 推送消息。注意,这里只是推送一个“有新 MDM 命令”的消息,不会携带 MDM 指令详情。
- 设备向 MDM 服务获取指令详情并回复响应数据。

MDM 向设备下发命令流程图
上图中的 APNs 就是 Apple Push Notification service,iOS上所有的推送消息都是通过这个服务到达用户设备上的(如微信消息),这套机制大家应该很熟悉。MDM 消息不同点是不会让用户感知到,无任何提示。
这里有个问题,为什么 MDM 服务不直接给设备发指令 ,而是要通过 APNs 通知呢? 如果直接给设备发指令,需要服务和设备直接保持长连接,功耗会增加。所以 MDM "复用"了 APNs 这个 iOS 的统一推送服务,无需为设备增加额外的长连接。
解决了我的哪些问题
下面是我使用过的功能,对于建设一个标准化自动化测试机房来说非常有用。
- 每台设备手动连接办公 Wi-Fi,费时费力
- iOS 系统升级弹窗频繁出现,影响自动化测试工作,容易误操作升级(通过系统全局 HTTP 代理实现,将 iOS 检查更新请求代理到不存在的网址)
- 自动设置 http 代理,方便开发调试查看网络流量
- 限制用户设置网络代理、限制 Wi-Fi 被关闭,防止设备无法访问互联网
- 新设备初始化速度慢,需要手动操作通过设置引导(注册到 MDM 时可跳过设置向导,详见下文)
- 安装企业级应用后需要手动信任开发者(通过 MDM 安装的企业级应用,开发者会被自动信任)
- 自动安装 App Store 应用(只需要提供应用 BundleID,就可以自动在已登录 App Store 账号的设备上自动安装应用)
- 开启和关闭 AirPlay 操作复杂易出错(远程控制开关 AirPlay)
结语
MDM 内容比较多,所以我分两篇文章呈现。上篇主要是入门和原理性的内容,到此结束。下篇主要是 MDM 系统搭建和设备注册到 MDM 等动手实战的内容,近期面世,敬请期待。
iOS MDM HeadFirst的更多相关文章
- Apple iOS MDM service 简介
Apple iOS MDM service 簡介 藉由MDM服務,企業可以用來控管配發給員工的iOS Device.可以採用Apple官方推出的工具,也可以採用第三方開發的服務. MDM server ...
- Apple iOS MDM开发流程
一年前曾参与过中石油的一个移动平台项目,实现了通过MDM对iOS设备进行管理.由于苹果对于mdm这块的接口及开发流程只向几个合作伙伴进行了分享,并没有对具体实现的文档进行公开,所以这方面的资料非常少. ...
- [转]iOS hacking resource collection
Link:http://www.securitylearn.net/tag/apple-ios-hacking-slides/ A collection of iOS research present ...
- ios设备mdm的实现过程
一)配置IIS加密连接,ios系统升级7.1后已经无法使用http进行企业内部署,为了满足mdm的加密需求以及大厅的初始化安装需要进行生成自签名证书 1)配置MIMEcer application/x ...
- MDM基于IOS设备管控功能的所有命令介绍
前面我们介绍了IOS上MDM几个简单的控制命令的发送和返回数据的解析处理,下面我们介绍一下MDM涉及到的命令的操作介绍: 一.Control Commands(控制类命令) 1.Device Lock ...
- 基于IOS和Android设备MDM技术方案服务价格
导读:前段时间 www.mbaike.net 博客被恶意攻击,导致程序崩溃,目前已经替换了以前的Wordpress程序,现提供IOS和Android版本MDM的代码和相关文档咨询服务. 一.IOS版M ...
- 转:基于IOS上MDM技术相关资料整理及汇总
一.MDM相关知识: MDM (Mobile Device Management ),即移动设备管理.在21世纪的今天,数据是企业宝贵的资产,安全问题更是重中之重,在移动互联网时代,员工个人的设备接入 ...
- 基于IOS上MDM技术相关资料整理及汇总
(转自:http://www.mbaike.net/special/1542.html) 一.MDM相关知识:MDM (Mobile Device Management ),即移动设备管理.在21世纪 ...
- 苹果的MDM简介
MDM(Mobile Device Management)移动设备管理,一般会用于企业管理其移动设备,鉴于iOS是比较封闭的系统很多的功能都难以实现,所以利用苹果的MDM可以达到远程控制设备,像远程定 ...
- iOS开发:开发证书知识点总结
1. Error: An App ID with identifier "*" is not avaliable. Please enter a different string. ...
随机推荐
- python学习之-------OS 文件夹和文件操作
# OS模块 :查看一个文件夹下所有文件,这个文件夹有文件夹,不能用walk# -- coding: UTF-8 --import osimport sys#C:\Users\Administrato ...
- hello-iot
iot,internet of things 环境搭建 使用真实环境 Single-board computer - Raspberry Pi Arduino - Wio Terminal 或者虚拟环 ...
- Windows全能终端神器MobaXterm
MobaXterm 又名 MobaXVT,是一款增强型终端.X 服务器和 Unix 命令集(GNU/ Cygwin)工具箱. MobaXterm 可以开启多个终端视窗,以最新的 X 服务器为基础的 X ...
- 自然语言处理(NLP) - 前预训练时代的自监督学习
前预训练时代的自监督学习自回归.自编码预训练的前世 神经网络(Neural Network, NN) 损失函数,度量神经网络的预测结果和真实结果相差多少 平方差损失(欧式距离角度)预测概率分部和实际标 ...
- 基于Spark的大规模日志分析
摘要:本篇文章将从一个实际项目出发,分享如何使用 Spark 进行大规模日志分析,并通过代码演示加深读者的理解. 本文分享自华为云社区<[实战经验分享]基于Spark的大规模日志分析[上进小菜猪 ...
- C++面试八股文:什么是左值,什么是右值?
某日二师兄参加XXX科技公司的C++工程师开发岗位第16面: 面试官:什么是左值,什么是右值? 二师兄:简单来说,左值就是可以使用&符号取地址的值,而右值一般不可以使用&符号取地址. ...
- 1.5 编写自定位ShellCode弹窗
在笔者上一篇文章中简单的介绍了如何运用汇编语言编写一段弹窗代码,虽然简易ShellCode可以被正常执行,但却存在很多问题,由于采用了硬编址的方式来调用相应API函数的,那么就会存在一个很大的缺陷,如 ...
- TCP/IP协议发明人G-Cerf
如果你是一个IT人,你可以不知道Vinton G. Cerf博士,但你不可能不知道TCP/IP; 如果你不是一个IT人,你可以不知道TCP/IP,但你不可能不知道互联网; 如果从1973年起,Vint ...
- langchain:Prompt在手,天下我有
目录 简介 好的prompt 什么是prompt template 在langchain中创建prompt template Chat特有的prompt template 总结 简介 prompts是 ...
- Dubbo 我手写几行代码,就把通信模式给你解释清楚!
作者:小傅哥 博客:https://bugstack.cn 原文:https://bugstack.cn/md/road-map/road-map.html 沉淀.分享.成长,让自己和他人都能有所收获 ...