kali linuxの諸設定

備忘録としてまとめておいた。
#1. HDDにkaliをインストール
Linuxをインストールする方法としては主に以下の2パターンがある。
__(1) Windowsソフトウェアを用いて直接HDDにインストールする__
ホストOS：Windows
各ディストリビューションHPからDLしたisoファイルをソフトウェアを用いてインストール先にインストールする。このソフトウェアはたしかWindowsOS対応だったはずなので、ホストにLinuxを使っている人は下記(2)の方法で行った方がよいと思う。
__(2) Live USBを作成し、そこからbootしてHDDにインストールする__
ホストOS：種類問わない
LiveUSBを作成する。作成にあたり詳しい手順やおすすめのソフトウェアはこちらの記事にまとめてある(~~~~~~~~~)
BIOSから機動順序をUSBをトップに変更し、ブート用のUSB(=Live USB)で起動し、HDDにインストールする。
#2. 初期設定
###★キーボードの日本語入力設定
インストール時点で日本語の環境を設定したとしても、表記に日本語が適用されるだけで、日本語入力の適用はされない。日本語表記の適用とキーボードからの日本語入力適用は別なのだ。

__＜インストール時点で日本語環境の設定が終了している人向け＞__
日本語入力のパッケージの設定だけやればOK。
__1. 日本語入力設定__
(1) rootで以下のコマンドを打つ。

```
#apt-get update
#apt-get install ibus-anthy
```
(2) "iBusの設定"を選択し、入力メソッドに使用したいキーボードパッケージを追加
![screenshot_iBus.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/975449/3de0d079-91ed-e262-74a8-1e43550cd864.png)

(3) 右上のアイコン(日時の横)でデフォルトをAnthyに設定して終了
→全角/半角キーで日本語入力可能に！
![screenshot_iBus_bar.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/975449/f4e015d6-ce57-269c-4c9f-beaf27c9b31b.png)

__＜インストール時点で日本語環境の設定を行わなかった人(インストール直後のディレクトリの表示などがすべて英字の人)向け＞__
(1)に加えて、日本語表示関連のパッケージのインストール、キーボードの設定や日本語表示の設定を事前に行わなくてはならない。
__1. 日本語表示関連のパッケージの導入__

```
#sudo apt-get install -y task-japanese task-japanese-desktop
```
__2. 日本語表示設定__

```
#dpkg-reconfigure locales →選択ウィンドウで「ja_JP.UTF-8 UTF-8」を選択
#reboot
#locale    →以下のように設定が反映されたか確認することが可能。
```
![locale.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/975449/10b22619-70c1-d5c2-5979-9afde4f894c5.png)
__3. 日本語入力設定__
(1)と同様のことを行う

[参考サイト]
(https://renoji.com/IT.php?Contents=OS_Kali/Setting_Install_Japanese.html)
(https://cocolofun.co.jp/linux-upgrade/)

###★スクリーンショット機能
デフォルトでスクリーンショットに何かしらのショートカットキーが割り当てられているはずなので、検索窓から"キーボード"というアイコンを選択し、xfce-screenshooterコマンドがどのショートカットキーに割り当てられているか確認する。editでオプションをカスタマイズすれば保存先パスを指定したり、フルスクリーンでスクショさせたりといったカスタマイズが可能。
オプション詳細はこちら(http://ns.izmiran.ru/doc/xfce4-screenshooter-1.8.1/html/ja/)
![screenshot_shortcutkey.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/975449/85d700fb-13b5-2ea1-d498-6d5fba9e0f0d.png)

####不便なところ
なんとこのスクリーンショット機能、撮影した後やっぱ保存するのヤーメタっ！ってなってキャンセルボタンクリックしても、また保存画面が立ち上がってしまい、一度は保存しないと抜けられない仕様になっている・・・(白目)

###★入れておいた方が便利なコマンド集：随時追加予定

```
#apt-get install tree
```

#3. SSH接続
SSHとは「Secure Shell」の略で、ネットワークに接続された機器を暗号化された通信トンネルを使用し、遠隔操作/管理するための手段である。kaliではデフォルトでoffになっているので、手動で起動する必要がある。

__(1) 設定ファイルの確認__
[/etc/ssh/ssh.config]：クライアントSSH設定ファイル
[/etc/ssh/sshd.config]：サーバ用SSH設定ファイル
これらが存在するか確認する(GUIインストールしていればデフォルトで入っているはずだが、なければ「#apt-get install ssh」でインストール)

__(2) サーバ用設定ファイルの設定__
今回はローカルネットワーク内で他の端末からログインしてくることを想定しているので、設定する項目としては以下のみ。
 
|設定項目|値|意味|
|:-:|:-:|:-:|
|Port|22|使用するポートの指定
|ListenAddress|0.0.0.0|ssh接続を受け付けるアドレス<br>(0.0.0.0はすべてのローカルアドレス)
|HostKey|/etc/ssh/ssh_host_key|秘密鍵の格納場所指定
|AuthorizedKeyFile|.ssh/authorized_keys|認証時に使用する公開鍵の格納場所指定
|PermitRootLogin|no|rootでのリモートログインを許可するか
|PasswordAuthentication|yes|パスワード認証方式の設定
|PermitEmptyPasswords|yes|空パスワードの入力を許可するか<br>→いまいちニーズが分かっていない
|Banner|[/etc/ssh/login_banner]|認証前にリモートログインユーザに提示されるファイルの格納場所の指定

設定が終了したら、以下のコマンドでエラーが出ないことを確認する。
\#/etc/init.d/ssh restart

__(3) 固定IPアドレスの割り当て__
DHCP(デフォルト)のままでいい人は割愛OK。今回はリースが切れる度に異なる接続先IPになってしまうことを避けるため、固定IPに変更する。

```
#sudo vi /etc/network/interfaces
```
以下の赤枠部分を追記する。
![static_ip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/975449/35b45adc-f5b1-2000-dc89-68080250c20d.png)
＜使用可能なプライベートアドレス範囲＞
10.0.0.0〜10.255.255.255（24ビットブロック）
172.16.0.0〜172.31.255.255（20ビットブロック）
192.168.0.0〜192.168.255.255（16ビットブロック）

```
#reboot →上のキャプチャで "allow-hotplug eth0" にしたならば設定反映に再起動が必要
または
#/etc/init.d networking restart → 上のキャプチャで"auto eth0" にしたならばこれでOK. 
#ifconfig　→サーバのIPアドレスが192.168.8.1になったことを確認
```
参考サイト
(https://ameblo.jp/shinnaka54/entry-12420242361.html)
(https://setting-tool.net/debian-static-ip-address) 

__(4) sshサービスの起動__

```
\#systemctl status ssh  →現在の起動状態を確認
\#systemctl start ssh   →起動
\#systemctl enable →自動起動on(次回からOS起動と同時にsshも自動起動する)
```
__(5) Windows10からLinux serverへssh接続する__
Teratermというフリーソフトがあるので、クライアント側(今回はWindows10)にインストールして以下のように設定して接続確立するだけ。sshはテキストのみの通信なのでCLIでサーバのコンソールに入る。
![teraterm_01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/975449/63360c82-ca4b-9159-fd9e-b230fe363142.png)
上記の通り、今回はTeratermのデフォルト(SSHver2)の暗号アルゴリズムで接続した。ここで他の暗号アルゴリズムを選択すると、のちにクライアントの「/known_hosts」に格納されるサーバの公開鍵の羅列に指定した暗号方式を確認することが出来る。

|ファイル名|格納情報|
|:-:|:-:|
|ssh_host_dsa_key|sshdデーモンで使用するdsa秘密鍵|
|ssh_host_dsa_key.pub|sshdデーモンで使用するDSA公開鍵|
|ssh_host_rsa_key|ssh ver2のsshdデーモンで使用するRSA秘密鍵|
|ssh_host_rsa_key.pub|ssh ver 2のsshdデーモンで使用するRSA公開鍵|
|ssh_host_key|ssh ver1のsshdデーモンで使用するRSA秘密鍵|
|ssh_hosy_key.pub|ssh ver1のsshdデーモンで使用するRSA公開鍵|


参考サイト(https://engineer-ninaritai.com/linux-ssh-config/)

上記セキュリティ警告画面にあるとおり、kaliではデフォルトでSHA256ハッシュ関数でサーバの公開鍵を作成している。初回ssh接続時にサーバが公開鍵を渡してくるので、クライアントはそれを「/.ssh/known_hosts」に格納(ssh接続することで自動的に作成されるので、ssh接続したことがない端末には存在しない)して、次回以降なりすましサーバへのアクセスを回避することができる。
→逆を言えば、このファイルを削除してしまえば何度でも初回通信時と同じく上記セキュリティ警告画面が出てくるということになる。

以下はLinuxサーバ上でクライアントとしてログインした際に作成された公開鍵情報を参考までに掲載した。「known_hosts」ファイルにはsshサーバのIPアドレスとサーバの公開鍵の2つの情報が格納されている。
![known_hosts_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/975449/e0573d5a-630d-c6ad-f979-08c52a4e689f.png)

以下はサーバにログインできた様子
![teraterm_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/975449/5d6c5399-394e-8eef-bd6c-4d6f706e8ac7.png)
サーバのアドレスを確認すると固定IP "192.168.8.1" が確認できる。
![ssh_to_192.168.1.8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/975449/7d0bc4aa-a7c8-4fda-aeee-ff380aca90ab.png)


__(6) SFTPの使用__　→まだ編集中
SFTP(Simple File Transfer Protocol)とは、sshで暗号化された通信路を使って安全にファイルを送受信するプロトコル。 また、それを利用してUNIXなどで暗号化ファイル送受信を行うコマンドを指すこともある。以下ではsftpコマンドの使用とプロンプトが変更されているのが確認できる。

|設定項目|値|意味|
|:-:|:-:|:-:|
||||
||||
||||
#4. Webサーバの構築
以前、Apacheを作成したことがあるので、今回はNginx(エンジンエックス)でWebサーバを構築する。両者の違いについては以下のとおり。
Nginxの最大の魅力としては、他サービスにも柔軟に対応できるようになっており、ロードバランサーのように利用することが可能である点か。半面、Nginxにはphpの処理機能がないので、動的コンテンツの処理ができない。Apacheにはphpの処理機能があるので、Nginxの下に複数台のApacheをぶら下げておけば、Nginxが自分で処理できないものはApacheへなげて、処理できるものは自分で処理するというような使い方をする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/975449/5cd7c977-2e0a-6142-e919-1f44a0a31301.png)(引用：https://academy.gmocloud.com/qa/20160616/2761)

kaliはデフォルトでApacheのみ。Nginxが入っていなかったのでインストールした。

```
#sudo apt-get install nginx
```
設定ファイルは[/etc/nginx/nginx.conf]
kaliではデフォルトでApacheが入っているので、ポートの競合が発生しないように他のポートを割り当てる。今回は82番ポートに設定した。

```
#sudo vi /etc/nginx/nginx.conf
```
![nginx_config.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/975449/640f618e-df2f-94e5-4ef5-7f2e4818ae06.png)

```
#sudo systemctl status apache2 →nginxを起動する前に必ずapacheの状態を確認すること

＜サービスの起動に関して＞
#sudo systemctl start nginx →手動起動
#sudo systemctl stop nginx →手動停止
#sudo systemctl restart nginx →手動リスタート
#sudo systemctl reload nginx →手動リロード
#sudo systemctl enable nginx →自動起動on
#sudo systemctl disabled nginx →自動起動off
```

#5. HTMLファイル
ブラウザに表示されるhtmlファイルはApache2,Nginxどちらも「/var/www/html」に格納されるため、自分で作成したhtmlファイルもここに格納すればアクセス時に表示させることが可能となる。なお、中身を確認したところ、 "index.html" はApache2のデフォルトページ、 "index.nginx-debian.html" はファイル名のとおりNginxのデフォルトページであった。
![www_html.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/975449/eb452e0c-cd14-9c75-ae3e-1d423b1504f9.png)
今回使用するサーバのサイト関連設定ファイル「/etc/nginx/sites-available」の下の赤枠部分において、左から優先でブラウザに読み込まれることになっている。デフォルトではindex.htmlの方がindex.nginx-debian.htmlより先に記載されていた。これだと、使用するサーバはNginxだが、表示されるhtmlはApache2ということになってしまうため、以下のとおりに順序を変更した。
![html_order.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/975449/3836b1af-cb2f-76d9-025c-464a489e843e.png)
なお、 "http://localhost/index.html" のようにファイル名まで指定してアクセスする分には順序は関係ない。

参考サイト(https://wireless-network.net/linux-apache/)