Linux
 Computer >> コンピューター >  >> システム >> Linux

root権限・sudoなしでNmapを実行する方法【Linuxケーパビリティ活用】

root権限・sudoなしでNmapを実行する方法【Linuxケーパビリティ活用】

Nmap(Network Mapper)は、最も広く使われているポートスキャナーおよびネットワークスキャンツールの1つです。基本的な機能であれば一般ユーザー権限でも実行できますが、高度な機能の多くを利用するには、rootまたはsudo権限が必要になります。

たとえば、NULLスキャンやステルスSYNスキャンなどの高度なポートスキャン機能は、Nmapが生パケットデータにアクセスして正確な結果を得る必要があるため、root権限でのみ動作します。

sudo権限なしでこうした高度な機能を実行しようとすると、ツールは「requires root privileges(root権限が必要です)」というメッセージを表示します。

root権限・sudoなしでNmapを実行する方法【Linuxケーパビリティ活用】

残念ながら、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
root権限・sudoなしでNmapを実行する方法【Linuxケーパビリティ活用】

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)
root権限・sudoなしでNmapを実行する方法【Linuxケーパビリティ活用】

注意: Nmapのインストール先へのフルパスを必ず指定してください。

ステップ3:--privilegedフラグを付けてNmapを実行する

3つのケーパビリティを設定したら、--privilegedフラグを付けてNmapに「これらの特権を持っている」ことを伝えることで、sudoなしで実行できます。実行コマンドは次のとおりです。

nmap --privileged -sS 192.168.0.112
root権限・sudoなしでNmapを実行する方法【Linuxケーパビリティ活用】

注意: --privilegedオプションを必ず指定してください。指定しないと、Nmapは自分がこれらの特権を持っていることを認識できません。

毎回nmap --privilegedと入力する手間を省きたい場合は、export行を以下のいずれかのファイルに追加して、NMAP_PRIVILEGED環境変数を永続的に設定できます。

  • ~/.xsessionrc: ほとんどのデスクトップ/グラフィカル環境で動作し、シェルやターミナルにも引き継がれます。
  • ~/.profile: ログイン時に読み込まれるシェルで有効です。
  • ~/.bashrc: bashで有効です。
  • ~/.gnomerc: GNOMEでのみ有効です。

まとめ

Nmapの多くのポートスキャンやホストディスカバリーの手法には、rootまたはsudo権限が必要です。しかし、このチュートリアルで紹介したLinuxケーパビリティの設定方法を使えば、rootになったりsudoersグループに所属したりしなくてもNmapを実行できます。ぜひ試してみてください。また、用途に応じて使えるその他のおすすめLinuxポートスキャナーツールも併せてチェックしてみましょう。

  1. ルート化せずにAndroidのIMEI番号を変更する完全ガイド

    スマートフォンのIMEI番号(International Mobile Equipment Identity)は、世界中で稼働している無数のデバイスの中から、あなたの端末を一意に識別するための重要な番号です。固有の端末IDは複製できないため、紛失したスマートフォンを探す際にも大きな役割を果たします。 しかし、さまざまな事情から、ルート化せずにIMEI番号を変更したいと考えるAndroidユーザーは少なくありません。本記事では、その具体的な方法を初心者にもわかりやすく詳しく解説します。最後までお読みいただき、ぜひ参考にしてください。 ルート化せずにAndroidのIMEI番号を変更する方法 I

  2. 【ルート化不要】AndroidでCandy Crush Sagaをハックする3つの方法

    甘いお菓子が好きでない方でも、人気パズルゲーム「Candy Crush Saga(キャンディークラッシュ サーガ)」の多彩なステージにはハマってしまうかもしれません。このゲームには熱心なファン層があり、多くのゲーマーが「Androidでゲームをハックするにはどうすればいいのか」という答えを探してきました。その人気ぶりから世界中の何百万人ものプレイヤーが楽しんでいますが、特定のレベルで足止めされ、なかなか先に進めないことも少なくありません。そんなときこそ、ルート化せずにゲームを攻略するテクニックが役立ちます。本記事では、スマホをルート化することなくCandy Crush Sagaをハックする方法