nmap の権限問題、および snap の権限

# 環境

- Ubuntu 22.04 LTS AMD64 Ja

# nmap と root

「Ubuntu18.04 や RaspberryPi ホストから 同一 LAN 上の RaspberryPi のIPアドレスを検索する」
https://qiita.com/nanbuwks/items/1aa7b1ba8ad654535d59

では nmap を使う際に root と そうでないユーザで挙動が変わる件について触れました。

その後調べると、管理者で実行すると SYN Scan となるらしい。一般ユーザで実行すると、 Raw Socket を使わずに Connect Scan となるらしい。3way handshake を成功させずにスキャンするか、 Connect を成立させてスキャンするかの違いらしい。


# インストール

さて、nmap を使おうとしたら

```
$ nmap
コマンド 'nmap' が見つかりません。次の方法でインストールできます:
sudo snap install nmap  # version 7.92-core22, or
sudo apt  install nmap  # version 7.91+dfsg1+really7.80+dfsg1-2build1
他のバージョンについては 'snap info nmap' を確認してください。
```
と出た。

どっちでもいいかなーと思い、

```
$ sudo snap install nmap
nmap 7.92-core22 from Maximiliano Bertacchini (maxiberta) installed
```

とインストール。

# エラー

まずは一般ユーザーで使ってみる。
```
$ nmap localhost
Starting Nmap 7.92 ( https://nmap.org ) at 2022-09-07 15:53 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00012s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
631/tcp open  ipp
Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds
```
こっちはOK.
sudo すると

```
$ sudo nmap localhsot
Starting Nmap 7.92 ( https://nmap.org ) at 2022-09-07 15:53 JST
Couldn't open a raw socket. Error: Permission denied (13)
```

?? 以前は管理者権限でなければ十分な動きをしなかったことがありましたが、今回は逆ですね。

 
# snap の権限


この問題は、snap パッケージへの権限設定の問題らしい。

```
$ snap connections nmap
Interface        Plug                  Slot           Notes
home             nmap:home             :home          -
network          nmap:network          :network       -
network-bind     nmap:network-bind     :network-bind  -
network-control  nmap:network-control  -              -
```

の中の、network-control の Slot が -  となっているのが原因。


Slot はシステム側の提供を表し、Plugは snapパッケージ側の要求を表すらしいです。
通常の snap パッケージは  confinement が strict となっていて、Plug/Slot で権限を割り当てているらしい。

確認してみると、確かに nmap の confinement は strict に設定されていました。
```
$ snap info --verbose nmap
name:    nmap
summary: A free and open source utility for network discovery and security auditing
health:
.
.
.
notes:               
  private:           false
  confinement:       strict
  devmode:           false
.
.
.
```


 network-control については、
「The network-control interface | Snapcraft documentation」
https://snapcraft.io/docs/network-control-interface
によると、

> network-control enables the configuration of networking and network namespaces via ip netns, providing a wide, privileged access to networking.

となっていますがよくわかりません。おそらく  raw network の操作に必要なのかな?

# 解決

解除してみます。

```
$ snap connect nmap:network-control
```
と設定して確認すると
```
$ snap connections nmap
Interface        Plug                  Slot              Notes
home             nmap:home             :home             -
network          nmap:network          :network          -
network-bind     nmap:network-bind     :network-bind     -
network-control  nmap:network-control  :network-control  manual
```
権限が許可に鳴ったみたいですね。

```
$ sudo nmap localhost
Starting Nmap 7.92 ( https://nmap.org ) at 2022-09-07 16:25 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 997 closed tcp ports (reset)
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
631/tcp open  ipp

Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds
```
動作しました。