root権限・sudoなしでNmapを実行する方法【Linuxケーパビリティ活用】
Nmap(Network Mapper)は、最も広く使われているポートスキャナーおよびネットワークスキャンツールの1つです。基本的な機能であれば一般ユーザー権限でも実行できますが、高度な機能の多くを利用するには、rootまたはsudo権限が必要になります。
たとえば、NULLスキャンやステルスSYNスキャンなどの高度なポートスキャン機能は、Nmapが生パケットデータにアクセスして正確な結果を得る必要があるため、root権限でのみ動作します。
sudo権限なしでこうした高度な機能を実行しようとすると、ツールは「requires root privileges(root権限が必要です)」というメッセージを表示します。
残念ながら、Nmapの実行のために毎回sudoを使わなければならないのは不便です。特に、自分がsudoグループに所属していない場合は深刻な問題になります。
幸い、「ケーパビリティ(capabilities)」を利用すれば、rootやsudo権限なしでNmapを実行できます。
ケーパビリティとは?
Linuxケーパビリティとは、本来rootユーザーだけが持つ特権を、プログラムやプロセスが利用できるようにするLinuxカーネルの属性です。
要するに、Linuxケーパビリティはrootユーザーの権限を細分化して共有する仕組みであり、非特権プロセスでも特権プロセスと同様に動作できるようになり、権限チェックを受けずに済みます。
Linuxには多数のケーパビリティが存在します。詳細についてはmanページ(man 7 capabilities)を参照してください。
このガイドでは、CAP_NET_RAW、CAP_NET_ADMIN、CAP_NET_BIND_SERVICEという3つのケーパビリティを使用し、rootユーザーの権限チェックなしでNmapが必要とする特権を与える方法を紹介します。
注意: 昇格したケーパビリティを設定する際は慎重に行ってください。悪意のあるユーザーがNmap Scripting Engine(NSE)を悪用して完全なsudo権限を取得し、スクリプトでローカルホストの脆弱性を突くおそれがあります。そのため、これらの設定は慎重に適用するか、特定のグループのみにNmapへのアクセスを制限することをおすすめします。
Nmapに付与するLinuxケーパビリティは以下の3つです。
- CAP_NET_RAW: プロセスが生パケットデータやRAWソケットにアクセスして使用できるようにします。
- CAP_NET_ADMIN: IPファイアウォールの管理、ネットワークインターフェースの設定、TOS(サービス種別)の設定、ルーティングテーブルの変更など、さまざまなネットワーク操作を行う能力をプロセスに与えます。
- CAP_NET_BIND_SERVICE: ソケットをインターネットドメインの特権ポート(1024番未満)にバインドできるようにします。
Linuxケーパビリティは、スレッドとファイルに対してそれぞれ「effective(実効)」「inheritable(継承可能)」「permitted(許可)」「ambient(環境)」のセットとして割り当てられます。ここではeip(effective+inheritable+permitted)を指定することで、どのユーザーが実行してもNmapがこれらのケーパビリティを利用できるようにします。
ステップ1:libcapのインストール
Linuxケーパビリティを設定するには、libcapパッケージをインストールする必要があります。このパッケージによりsetcapコマンドが使えるようになります。次のコマンドを実行してください。
sudo apt-get install libcap2-bin
libcapがインストールできたら、setcapコマンドを使ってLinuxケーパビリティを変更できます。
ステップ2:Nmapにケーパビリティを設定する
root権限なしでNmapを実行できるようにするためのケーパビリティを設定するには、次のコマンドを実行します。
sudo setcap cap_net_raw,cap_net_admin,cap_net_bind_service+eip $(which nmap)
ケーパビリティを設定したら、getcapコマンドで正しく適用されたか確認できます。
getcap $(which nmap)
注意: Nmapのインストール先へのフルパスを必ず指定してください。
ステップ3:--privilegedフラグを付けてNmapを実行する
3つのケーパビリティを設定したら、--privilegedフラグを付けてNmapに「これらの特権を持っている」ことを伝えることで、sudoなしで実行できます。実行コマンドは次のとおりです。
nmap --privileged -sS 192.168.0.112
注意: --privilegedオプションを必ず指定してください。指定しないと、Nmapは自分がこれらの特権を持っていることを認識できません。
毎回nmap --privilegedと入力する手間を省きたい場合は、export行を以下のいずれかのファイルに追加して、NMAP_PRIVILEGED環境変数を永続的に設定できます。
- ~/.xsessionrc: ほとんどのデスクトップ/グラフィカル環境で動作し、シェルやターミナルにも引き継がれます。
- ~/.profile: ログイン時に読み込まれるシェルで有効です。
- ~/.bashrc: bashで有効です。
- ~/.gnomerc: GNOMEでのみ有効です。
まとめ
Nmapの多くのポートスキャンやホストディスカバリーの手法には、rootまたはsudo権限が必要です。しかし、このチュートリアルで紹介したLinuxケーパビリティの設定方法を使えば、rootになったりsudoersグループに所属したりしなくてもNmapを実行できます。ぜひ試してみてください。また、用途に応じて使えるその他のおすすめLinuxポートスキャナーツールも併せてチェックしてみましょう。
-
ルート化せずにAndroidのIMEI番号を変更する完全ガイド
スマートフォンのIMEI番号(International Mobile Equipment Identity)は、世界中で稼働している無数のデバイスの中から、あなたの端末を一意に識別するための重要な番号です。固有の端末IDは複製できないため、紛失したスマートフォンを探す際にも大きな役割を果たします。 しかし、さまざまな事情から、ルート化せずにIMEI番号を変更したいと考えるAndroidユーザーは少なくありません。本記事では、その具体的な方法を初心者にもわかりやすく詳しく解説します。最後までお読みいただき、ぜひ参考にしてください。 ルート化せずにAndroidのIMEI番号を変更する方法 I
-
【ルート化不要】AndroidでCandy Crush Sagaをハックする3つの方法
甘いお菓子が好きでない方でも、人気パズルゲーム「Candy Crush Saga(キャンディークラッシュ サーガ)」の多彩なステージにはハマってしまうかもしれません。このゲームには熱心なファン層があり、多くのゲーマーが「Androidでゲームをハックするにはどうすればいいのか」という答えを探してきました。その人気ぶりから世界中の何百万人ものプレイヤーが楽しんでいますが、特定のレベルで足止めされ、なかなか先に進めないことも少なくありません。そんなときこそ、ルート化せずにゲームを攻略するテクニックが役立ちます。本記事では、スマホをルート化することなくCandy Crush Sagaをハックする方法