引言

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. Java中序列化和反序列化解释

    在Java中,序列化(Serialization)是指将对象的状态转换为字节流的过程,以便将其保存到文件.在网络中传输或持久化到数据库中.而反序列化(Deserialization)则是将字节流转换回 ...

  2. JVM系统参数

    JVM(Java虚拟机)是Java程序的运行环境,它可以通过一些系统参数进行配置和优化.以下是一些常用的JVM系统参数: 1. -Xmx: 用于设置JVM堆的最大内存大小.例如,-Xmx1g表示将堆的 ...

  3. Python批量填补遥感影像的无效值NoData

      本文介绍基于Python中ArcPy模块,对大量栅格遥感影像文件批量进行无效值(NoData值)填充的方法.   在处理栅格图像文件时,我们经常会遇到图像中存在有无效值(即NoData值)的情况. ...

  4. DIY制作隔离信号注入变压器

    最近在学习模电知识,接触到了测量运放环路增益,需要使用合适的注入变压器,查找资料发现商用信号注入变压器价格昂贵,不适合个人学习使用.看到LOTO使用普通音频变压器做测试,也跟技术群友做了交流,尝试使用 ...

  5. [Kotlin Tutorials 22] 协程中的异常处理

    协程中的异常处理 Parent-Child关系 如果一个coroutine抛出了异常, 它将会把这个exception向上抛给它的parent, 它的parent会做以下三件事情: 取消其他所有的ch ...

  6. windows服务启动时提示找不到指定路径的问题

    我是自己写了一个windows服务,并且在之前一直运行良好,上周四晚上之后,竟然莫名其妙的停止了,我登上远程服务器,才发现,该服务已经停止,当我手动打开该服务时,提示我如下错误,找不到指定路径:. 一 ...

  7. 2023-06-12:如果一个正整数自身是回文数,而且它也是一个回文数的平方,那么我们称这个数为超级回文数。 现在,给定两个正整数 L 和 R (以字符串形式表示), 返回包含在范围 [L, R] 中

    2023-06-12:如果一个正整数自身是回文数,而且它也是一个回文数的平方,那么我们称这个数为超级回文数. 现在,给定两个正整数 L 和 R (以字符串形式表示), 返回包含在范围 [L, R] 中 ...

  8. docker安装LuaJIT WEB应用防火墙

    安装包请见 https://www.jianshu.com/p/b81656764613 Dockerfile #FROM ubuntu FROM centos MAINTAINER G00G1S C ...

  9. Redis6 的安装

    安装网址 ‍ Redis 官方网站 Redis 中文官方网站 http://redis.io http://redis.cn/ ‍ 安装版本 ‍ 6.2.1 for Linux(redis-6.2.1 ...

  10. Mybatis(配置解析解读(核心))

    核心配置文件 mybaits-confing.xml *properties(属性) *settring(设置) *typeAliases(类型别名) *typeHandlers(类型处理器) *ob ...