macOS High Sierra でまたはまる… pingできない

投稿者: | 2017/12/01

[解決しました、最後をご覧ください]

何故なんでしょう…
macOS High Sierra Serverで ping ができないようになっていました。

[MacMiniS:~] honkytonk% ping 192.168.xxx.xxx
ping: Lacking privilege for raw socket.

このようなエラーが出て使えません。
権限不足という事でしょうね。
しかし、High Sierraをインストールしている他のMacでは問題なく使えています。

先日、telentコマンドが無かったときにインストールした ping は
/usr/local/bin/ping で、システムに最初からインストールされている ping は/sbin/ping です。
どちらの ping でも同じエラーになります。

chmod a+s /usr/local/bin/ping でSet IDビットを立てて root権限 で実行すると、確かにpingが通るようになりました。
もちろん、sudo, suで rootになって実行しても動作します。
rootでなくても /sbin/ping とフルパスで指定すると動作します。

他のMacと実行権は一緒なのに何ででしょうね?
Serverだから?

ちなみに、 /System/Library/CoreServices/Applications にある ネットワークユーティリティ(Network Utility.app)を使えば、GUIから操作する事ができます。ここからだと問題なく実行できるようです。ネットワークユーティリティ(Network Utility.app)は、SpotLightで探すのが簡単でしょう。
pingだけではなく、netstat, tracerouteなども使えます。

ただ、サーバーの場合はモニターが繋がっていないケースが多いので、ターミナルから使いたいですよね。
というかこんな utility があるなんて知らなかった… 入力する手間が減るわけじゃないのでコマンド打っても一緒ですよね。

——
追記(解決編)

うっかりしていました。whereis ping で /sbin/ping と出たので、/sbin/ping を実行していると思い込んでいました。
PATHを確認すると、/usr/local/bin の方が /sbin より先に来ていました。つまり、/usr/local/bin/ping が実行されていました。
which ping でも /usr/local/bin/ping と表示されます。
つまり、telentを使うために inetutils をインストールした時に /usr/local/binにping も一緒にインストールされたのが影響していると言う事です。
/usr/local/bin に インストールした ping, ping6を削除するか、ファイル名を変えると ping/ping6 が使えるようになります。

cd /usr/local/bin
sudo mv ping ping.bk
sudo mv ping6 ping6.bk

/sbin にもありますので、消してもよいですね。

MacBook Airとサーバーに使っているMacMiniと何が違ったかと言うと、これもPATHの設定が違っていたんですね。
MacBook Airは /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin の順になっていました。
MacMiniは、OSを何度もアップデートしながら使っていたので、昔設定したPATHが影響していたんですね。

全く初歩的な勘違いでした。恥ずかし!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください