iOS MDM 시스템 구축 후 가장 일반적으로 쓰이는 기능들은 DeviceInformationDevice Lock 일텐데,

DeviceInfo 관련해서는 지원이 중단되었던 장치 고유의 값들을 가져 올 수 있기 때문에 쓰는 것이 대부분이고..

DeviceLock 기능을 구현하기 위해 MDM 서버를 구축하고자 하는 개발자 분들을 위해 정리 해 드립니다.


MDM Reference Document를 보면 장치 잠금에 관련된 커맨드가 3가지가 있는데 각각의 차이점들을 정리하고자 합니다.


1. Activation Lock

활성화 잠금은 아이클라우드에서 내 아이폰 찾기 기능과 궁극적으로 같은 기능을 합니다.

MDM 커맨드는 일반적으로 Push Token을 통해 APNS를 통해 디바이스에 직접 커맨드를 전송하는데,

활성화 잠금은 Device Serial을 POST로 애플의 특정 url에 json타입으로 넘겨 주면 애플에서 장치로 커맨드를 전송하는 구성인 것 같습니다.


문제는, 활성화 잠금을 위해서는 Apple DEP(Device Enrollment Program)을 통해 장치 정보가 애플쪽에 등록이 된 기기에만 커맨드를 전송 할 수 있습니다.

DEP는 어떤 문제인지는 모르겠지만 아직 한국에서는 지원하지 않기 때문에 불가능하다고 판단되었습니다.


추가적으로 Device가 Supervise된 상태여야 합니다. 장치 감독 모드는 Apple Configurator를 통해 청사진을 적용하면 장치 리셋 후 감독모드로 설정됩니다.

Device Supervise를 무선으로 하는 방법은 없고 DEP를 통하거나 맥에 설치된 Apple Configurator에 USB로 한번 물리적으로 연결 해야만 합니다.


게다가 이전과는 다르게 장치 비밀번호를 알면 폰에서 바로 잠금 해제가 가능하도록 바뀌었기 때문에.... 의미가 없습니다.


2. EnableLostmode

테스트 결과 가장 강력한 기능의 잠금모드인데, MDM 커맨드를 받으면 해당 폰은 사용자가 어떠한 액션도 취할 수 없는 상태가 됩니다.

Activation Lock에서 비밀번호 입력 기능이 빠진 것이라고 보면 됩니다.

잠금 해제는 DisableLostmode 커맨드 수신을 통해서만 해제가 가능합니다.


헌데.. 가장 강력한 잠금모드이지만...! iOS 9.3버전 이상이 설치된 장치에만 적용되며  역시나....Device Supervise가 필요합니다.

한마디로 수작업으로 맥에 연결해서 초기화를 한번 거쳐야 한다는 것입니다..


3. DeviceLock

별 것 없습니다.  DeviceLock 커맨드를 수신한 장치는 어떠한 동작 중이든 잠금화면으로 돌아갑니다. (장치가 슬립상태일 때 전원 버튼 한번 눌렀을 때의 그 화면...)


Apple MDM은 보면 볼수록 컨셉이 확실한 것 같네요.

Apple Configurator의 역할은 기관이나 기업에서 대량 구매한 iOS 장치들을 초기 설정을 동일하게 하기 위함과 감독 권한을 얻기 위한 것이라고 보여집니다.

Apple Configurator의 청사진에는 특정 앱이나 프로파일등을 미리 넣어 놓을 수 있어 특정 와이파이 AP만 연결되게 한다던가, 사용 할 수 있는 앱을 특정한다던가

다수 장치 관리의 편의성에 초점을 두고 있다는 느낌이 듭니다.


구현하려던 잠금 기능은 2. EnableLostmode 였는데, 무선으로 장치 감독권한을 얻을 수 있는 방법을 알아봤으나,

애플에서 온 답장에 "Our engineers have reviewed your request and have concluded that there is no supported way한 문장에  멘붕...


이상 이번에 시스템을 구축을 하면서 얻은 경험을 공유드립니다.

MDM솔루션 제공 업체를 통하지 않고 자체 개발 하시려는 분들에게 도움이 되었으면 좋겠습니다^^..     


아이 빡쳐 ^^






맥 OS X에 node.js 및 폰갭 설치 방법


1. Xcode 설치 (따로 말 안해도 개발자라면 설치되어 있을거라고 믿습니다...!)

2. node.js 설치 (https://nodejs.org/en/)

3. node.js를 통해 cordova 설치

터미널에서 아래 명령어를 통해 cordova 설치

sudo npm install -g cordova


맥의 로그인 비밀번호를 입력한 후 설치가 완료되면 아래와 같이 정보가 표시됨

/usr/local/bin/cordova -> /usr/local/lib/node_modules/cordova/bin/cordova

cordova@6.1.1 /usr/local/lib/node_modules/cordova

├── underscore@1.7.0

├── q@1.0.1

├── ansi@0.3.1

├── nopt@3.0.1 (abbrev@1.0.7)

├── cordova-common@1.2.0 (cordova-registry-mapper@1.1.15, unorm@1.4.1, underscore@1.8.3, q@1.4.1, semver@5.1.0, shelljs@0.5.3, osenv@0.1.3, elementtree@0.1.6, bplist-parser@0.1.1, glob@5.0.15, plist@1.2.0)

├── update-notifier@0.5.0 (is-npm@1.0.0, semver-diff@2.1.0, string-length@1.0.1, chalk@1.1.3, repeating@1.1.3, configstore@1.4.0, latest-version@1.0.1)

└── cordova-lib@6.1.1 (valid-identifier@0.0.1, opener@1.4.1, properties-parser@0.2.3, semver@4.3.6, shelljs@0.3.0, nopt@3.0.6, dep-graph@1.1.0, cordova-app-hello-world@3.10.0, xcode@0.8.0, aliasify@1.9.0, tar@1.0.2, init-package-json@1.9.3, cordova-serve@1.0.0, request@2.47.0, npm@2.15.4, cordova-js@4.1.4)


설치 완료 후 cordova 버전 확인

cordova -v

1. mysql-server, mysql-client 설치

설치 중에 root 비밀번호를 두번 묻는데, 사용할 비밀번호 입력

$ sudo apt-get install mysql-server mysql-client


2. 설치 후 /etc/mysql/mysql.conf.d/mysqld.conf 파일 수정

$ sudo vi /etc/mysql.conf.d/mysqld.conf
......
# bind-address = 127.0.0.1
......


3. mysql 서비스 재시작

 $ sudo service mysql restart


4. 테스트 DB 생성 및 유저 생성/접근 권한 설정

$ mysql -u root -h localhost -p
mysql> CREATE DATABASE pidb;
mysql> CREATE USER 'pi'@'localhost' IDENTIFIED BY '비밀번호 설정';
GRANT ALL PRIVILEGES ON pidb.* TO 'pi'@'localhost';
FLUSH PRIVILEGES;
$ mysql -u pi -h localhost pidb -p

패스워드 입력 후 접속 된다면 설정 완료


5. 파이썬 연동 되었는지 확인 위해 파이썬 쉘에서 mysql 모듈 import

$ python
>>> import MySQLdb

ImportError: No module named MySQLdb


6. 연동되지 않았다면, http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.3/ 에서

압축 파일을 다운로드 받아서 압축 해제


7. 필수 패키지 설치 후 setup.py 빌드/설치

sudo apt-get install libmysqlclient-dev
$ python setup.py build
$ sudo python setup.py install


8. 파이썬 쉘 실행 후 mysql 모듈 import 하여 연동 확인

$ python
>>> import MySQLdb


+ Recent posts