画面共有のポート(5900)を変更する

macOS の 画面共有.app は VNC だそうで、Apple ソフトウェア製品で使われている TCP および UDP ポート をみると、ポート5900 は

5900
TCP
Virtual Network Computing (VNC) (未登録使用)
vnc-server
Apple Remote Desktop 2.0 以降 (監視/制御機能) 画面共有 (Mac OS X 10.5 以降)

となっていまして、VNC なんだなぁって。

で、そういうことかとルーターで 5900 を開いて画面共有を入にすると、困っちゃうくらいにアクセスがあるんです。 「よっ!待ってました!」ってなもんですよ奥さん。 Windows からもアクセスできるように「コンピュータ設定…」の下のチェックボックスをオンにしちゃうと将来的に大変困ることになると思うし、そうじゃなくても異様な回数の不正アクセスがログ(コンソールで screensharingd にてフィルタリング)に残されると思うと精神衛生上よろしくない。 かと言って外部から画面共有したいし。

という場合、ポート番号を変えればいいと思うんですよね。 で、やりました。 やったんですけど一手間二手間ありましたので以下に備忘録。

El Capitan だったかそこらから、macOS(こう書くと Sierra になるのであり、そもそもここでややこしい)には rootless という、正式には System Integrity Protection(略してSIP)というウルトラにセキュリティ対策な機能が実装されまして、よっこなフォルダ/ファイルの追加や書き換えが制限されている(つまりできない)んです。 簡単に言えば

/System/Library/LaunchDaemons/com.apple.screensharing.plist

の内容を書き換えればいいんですけど、そもそも /System が rootless の対象に入っているので(なにが対象なのかは /System/Library/Sandbox/rootless.conf を見て下さい)書き換えられない。 だもんで rootless を一旦解除して書き換えてrootlessをオンにして、という手順を踏むのであります。

まず、⌘ + R (リカバリーモード)でシステムを起動します。 言語選択で日本語あたりを選択して、メニューバーの「ユーティリティー」から「ターミナル」を選択して起動。

csrutil disable

とタイプして return やら enter やら。 するとオフられましたよ、ってメッセージが出るので、システムを再起動します(そのまま reboot とすれば簡単)。

再起動は普通にすればいいです。 Finder.appが立ち上がったら先の /System/Library/LaunchDaemons/com.apple.screensharing.plist を開いて、私は pico が好きなので pico で開きますけど、

https://goo.gl/photos/m9CVqf1UKoHYSFxQA

あら、今は pico じゃなくて nano なのね。 ともあれ Sockets > Listener > Bonjour : SockServiceName キーの値「vnc-server」を任意のポート番号に変更して保存します。

そしてまた rootless をオンにするんですけど、リカバリーモードで起動して csrutil enable とする方法もありますけど、最近のシステムはこの状況からオンにできるんです。 root 権限で(私は先に su しちゃうので、そうじゃなければ sudo に続けて)

csrutil clear

として、オンに(enable に)なったことを確認し、システム再起動(このまま reboot)します。 これで作業は完了。 ルーターの設定も変更しましょう。

と、そんなこんなです。

2017.05.17追記:システムのアップデートにより設定が戻ってしまう場合がある(必ず戻ってしまう?)ので、アップデート後はcom.apple.screensharing.plistの内容を確認する必要があるかと思います。