引言

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 下发命令流程

  1. 首先看下图的 Enroll 箭头,这是整个流程的准备阶段,意思是设备需要先注册到 MDM。这个操作只需要进行一次,只要设备没有退出 MDM,这个步骤不需要再发生。
  2. 向 MDM 服务下发指令,MDM 服务缓存指令。这里的 MDM Server 很关键,苹果没有统一的 MDM 服务,需要我们自己按照苹果的协议去实现。但是也不用担心,开源世界给我们提供了很好的工具,具体部署和使用方法见下文。
  3. MDM 服务向苹果 APNs 推送消息。注意,这里只是推送一个“有新 MDM 命令”的消息,不会携带 MDM 指令详情。
  4. 设备向 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的更多相关文章

  1. Apple iOS MDM service 简介

    Apple iOS MDM service 簡介 藉由MDM服務,企業可以用來控管配發給員工的iOS Device.可以採用Apple官方推出的工具,也可以採用第三方開發的服務. MDM server ...

  2. Apple iOS MDM开发流程

    一年前曾参与过中石油的一个移动平台项目,实现了通过MDM对iOS设备进行管理.由于苹果对于mdm这块的接口及开发流程只向几个合作伙伴进行了分享,并没有对具体实现的文档进行公开,所以这方面的资料非常少. ...

  3. [转]iOS hacking resource collection

    Link:http://www.securitylearn.net/tag/apple-ios-hacking-slides/ A collection of iOS research present ...

  4. ios设备mdm的实现过程

    一)配置IIS加密连接,ios系统升级7.1后已经无法使用http进行企业内部署,为了满足mdm的加密需求以及大厅的初始化安装需要进行生成自签名证书 1)配置MIMEcer application/x ...

  5. MDM基于IOS设备管控功能的所有命令介绍

    前面我们介绍了IOS上MDM几个简单的控制命令的发送和返回数据的解析处理,下面我们介绍一下MDM涉及到的命令的操作介绍: 一.Control Commands(控制类命令) 1.Device Lock ...

  6. 基于IOS和Android设备MDM技术方案服务价格

    导读:前段时间 www.mbaike.net 博客被恶意攻击,导致程序崩溃,目前已经替换了以前的Wordpress程序,现提供IOS和Android版本MDM的代码和相关文档咨询服务. 一.IOS版M ...

  7. 转:基于IOS上MDM技术相关资料整理及汇总

    一.MDM相关知识: MDM (Mobile Device Management ),即移动设备管理.在21世纪的今天,数据是企业宝贵的资产,安全问题更是重中之重,在移动互联网时代,员工个人的设备接入 ...

  8. 基于IOS上MDM技术相关资料整理及汇总

    (转自:http://www.mbaike.net/special/1542.html) 一.MDM相关知识:MDM (Mobile Device Management ),即移动设备管理.在21世纪 ...

  9. 苹果的MDM简介

    MDM(Mobile Device Management)移动设备管理,一般会用于企业管理其移动设备,鉴于iOS是比较封闭的系统很多的功能都难以实现,所以利用苹果的MDM可以达到远程控制设备,像远程定 ...

  10. iOS开发:开发证书知识点总结

    1. Error: An App ID with identifier "*" is not avaliable. Please enter a different string. ...

随机推荐

  1. 【python基础】新建/运行python项目

    1.新建python项目 在编写程序之前,我们需要新建一个项目(Project),在桌面双击PyCharm的快捷方式,等待片刻,打开如下所示的软件界面.点击New Project 在弹出的对话框中,需 ...

  2. 创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作

    本文为博主原创,转载请注明出处: 1.使用npm进行初始化 在本地创建项目的文件夹名称,如 node_test,并在该文件夹下进行黑窗口执行初始化命令 2. 安装 expres包和myslq依赖包 n ...

  3. AntV L7 快速入门示例

    1. 引言 L7 地理空间数据可视分析引擎是一种基于 WebGL 技术的地理空间数据可视化引擎,可以用于实现各种地理空间数据可视化应用.L7 引擎支持多种数据源和数据格式,包括 GeoJSON.CSV ...

  4. Anaconda 环境下 R 包 ggraph_1.0.2 安装小记

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 记录一下今天在 Anaconda3 环境下 R==3.4.3 中安装 ggraph 的一些问题 ...

  5. [MAUI]写一个跨平台富文本编辑器

    @ 目录 原理 创建编辑器 定义 实现复合样式 选择范围 字号 字体颜色与背景色 字体下划线 字体加粗与斜体 序列化和反序列化 跨平台实现 集成至编辑器 创建控件 使用控件 最终效果 已知问题 项目地 ...

  6. json数据的解析

    php声明没有键的数组,用json_encode输出: $array=array("1","2","3"); echo json_encod ...

  7. Python Flask - 快速构建Web应用详解

    本文将详细探讨Python Flask Web服务.我将首先简单介绍Flask,然后将逐步进入Flask中的路由.模板.表单处理以及数据库集成等高级概念,目标是能够让大家了解并掌握使用Flask来创建 ...

  8. 国产开源流批统一的数据同步工具Chunjun入门实战

    @ 目录 概述 定义 特性 部署 安装 版本对应关系 通用配置详解 整体配置 Content 配置 Setting 配置 Local提交 Standalone提交 Json方式使用 SQL方式使用 M ...

  9. sharding-jdbc分库连接数优化

    一.背景: 配运平台组的快递订单履约中心(cp-eofc)及物流平台履约中心(jdl-uep-ofc)系统都使用了ShardingSphere生态的sharding-jdbc作为分库分表中间件, 整个 ...

  10. Code Generate V2.0 代码生成器

    Code Generate 代码生成器 系统首页 使用说明 系统默认会根据SQL生成字段信息 className.fieldList.classComment 如下所示: 建表语句 CREATE TA ...