Mac(Apple Silicon) に 仮想環境で Kali Linux をセットする方法
背景
以下のイベントに参加するため、環境構築でつまづいたのでメモ caadvance.connpass.com
インストールするもの
- Kali Linux ISO イメージ
👉 Kali Linux ダウンロードページ
結構時間かかります。

- UTM
👉 UTM ダウンロードページ
仮想マシンの作成
- UTM を起動する
- 「新規仮想マシンを作成」をクリック

「仮想化」を選択

OS は「Linux」を選択(ハードウェアはデフォルトのまま)

起動 ISO イメージに、ダウンロードした
kali-linux-2025.3-installer-arm64.isoを指定

「ストレージ」はデフォルトのまま

「共有を読み出しのみにする」を選択

名前を任意に設定(例:
Kali Linux)

UTM 起動前の設定
UTM の画面右上にある「設定」ボタンをクリック

デバイス → 「新規」 → 「シリアル」を作成して保存

すると、もう一枚コンソール画面が開く

Kali Linux のインストール
- 小さい画面の方の
Installを選択して Enter - 言語を選択(矢印キーで選択する)
- Language:
United States - Keyboard:
American English
- Language:
- ホスト名などを設定
- Hostname:
kali - Domain name: (空欄のまま Enter)
- Full name:
tanaka_tarou - Username:
tarou - Password:
xxxxxxxx
- Hostname:
- 諸々の設定
Guided - use entire diskを選択Virtual disk 1 (vda) - 42.9 GB Virtio Block Deviceを選択All files in one partition (recommended for new users)を選択Finish partitioning and write changes to diskを選択Yesを選択
- そのまま Enter で進める

- インストール開始(10~20分くらいかかる)

⚠️ 以下の画面で、continue を選ぶと今まで設定したことと同じことをすることになります。
選択しないようにしましょう。

UTM の後処理
- インストール完了後、一度 UTM を停止
- UTM画面上部の設定 → 「ドライブ」 → 「USB ドライブ」を削除し、保存

ログイン
再度UTMを起動後、設定したユーザー名とパスワードでログイン
- Username:
tarou - Password:
xxxxxxxx

- Username:
正常にログインできればインストール成功! 🎉

参考サイト
リンク先を今は反応させたくない
どんな時使う?
まだ仕様が決まっていなくて一旦見た目だけ作成した時
リンクは作成したけど、href="" とするとなんか反応しているように見えてしまって嫌!無効化したい!なとき
コード
aタグのurlの値に、javascript:void(0) を設定する
<a href="{{ 'javascript:void(0)' }}">リンク</a>
マウスオーバーで指カーソルにしたいけれど、リンクは飛ばしたくない! という時、void(0)を使えば実現できる
PHP 演算子 "&="アンパサンドイコールとは
例えば、以下のように関連するデータを全削除するとき
deleteAll()が成功していれば$resultsにtrueが入っている思っていましたが、integer 1が入っていました。
$results = true;
$results &= $this->Work->deleteAll(array('dept_id' => $dept_id));
$results &= $this->Employee->deleteAll(array('dept_id' => $dept_id));
"&="アンパサンドイコールとは?
「ビット演算子」です。
"&=" は $a && $b ではなく、$a = $a & $b を短くした書き方になります。
www.php.net
にあるように
&、| そして ^ 演算子の左右のオペランドが文字列の場合、その演算は、 文字列を構成する文字の ASCII 値を使って行います。その結果は文字列になります。 それ以外の場合は、左右のオペランドを integer に変換 し、結果も integer になります。
そのため、$resultにはintegerの"1"が入ります。
実行例
[~]$ php -a Interactive shell php > $result = true; php > var_dump($result); bool(true) php > php > $result &= true; php > var_dump($result); int(1)
数値ではなく、true, falseを入れたいのであれば
$results = true;
$results = $results && $this->Work->deleteAll(array('dept_id' => $dept_id));
$results = $results && $this->Employee->deleteAll(array('dept_id' => $dept_id));
になります。
"=&"イコールアンパサンドは?
「参照渡し」です。
下記の2つはどちらも同じ挙動になります 。
$result =& $value; $result = &$value;
参照渡しとは
変数bに代入した後に変数aの値を変えたところ、変数bの値も変わります。
$a = 2; $b =& $a; // 変数aを&をつけて代入 $a = 10; // 変数aの値を変更 echo $b; # 結果 10
参考サイト
Laravel8でSanctumを使いAPI認証を実装する
やること
LaravelのSanctumを使用し、API認証を実装します。
/meは認証されているユーザーしかアクセスできないよう実装します。
Sanctumのインストールとセットアップ
Sanctumのインストール
composer require laravel/sanctum
次にSanctum設定ファイルと移行ファイルを公開します。
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
データベースのマイグレーションを実行します。
これでAPIトークンを格納するためのテーブルを作成してくれます。
php artisan migrate
デフォルトでLaravelに付属するテーブルに加え、すべてのトークンを格納するpersonal_access_tokensテーブルがデータベースに作成されます。
mysql> show tables; +------------------------+ | Tables_in_project01 | +------------------------+ | failed_jobs | | migrations | | password_resets | | personal_access_tokens | | users | +------------------------+ 5 rows in set (0.00 sec)
APIトークンの発行
Sanctumを使用すると、アプリケーションへのAPIリクエストの認証に使用できるAPIトークン/パーソナルアクセストークンを発行できます。 APIトークンを使用してリクエストを行う場合、トークンは「Bearer」トークンとして「Authorization」ヘッダに含める必要があります。
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
}
APIの作成
Controllerの作成
php artisan make:controller AuthController
ユーザー登録
ユーザー登録を行うルートを作成します。
routes/api.php
use App\Http\Controllers\AuthController;
// API認証
Route::post('/register', [AuthController::class, 'register']);
ユーザー登録メソッドを作成します。
app/Http/Controllers/AuthController.php
use Illuminate\Support\Facades\Hash;
class AuthController extends Controller
{
public function register(Request $request)
{
$validatedData = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:8',
]);
$user = User::create([
'name' => $validatedData['name'],
'email' => $validatedData['email'],
'password' => Hash::make($validatedData['password']),
]);
return response()->json('User registration completed');
}
}
リクエストにバリデーションをかけ、問題なければUserテーブルに格納し、"User registration completed" を返します。
ログイン機能
ログインルートを作成します。
routes/api.php
Route::post('/login', [AuthController::class, 'login']);
AuthControllerの中にlogin()メソッドを追加します。
public function login(Request $request)
{
if (!Auth::attempt($request->only('email', 'password'))) {
return response()->json([
'message' => 'User Not Found'
], 401);
}
$user = User::where('email', $request['email'])->firstOrFail();
$user->tokens()->delete();
$token = $user->createToken('auth_token_userID_'.$user->id)->plainTextToken;
return response()->json([
'access_token' => $token,
'token_type' => 'Bearer',
]);
}
POSTできたメールとパスワードが違えば、401 User Not Found を返します。
1ユーザーに対して複数のtokenができてしまうので、delete()で古いtokenは削除します。
createToken()メソッドを使いトークン名を"auth_token_userID_xx" とし、作成されたユーザーに新しいアクセストークンを生成します。
plainTextTokenプロパティを使用してトークンのプレーンテキスト値にアクセスすることができます。
最後に作成されたトークンとトークンタイプを含むJSONレスポンスを返します。
認証済みユーザのみアクセスできる画面の作成
認証済みユーザーの場合、ユーザー情報を返す画面(/me)を作成します。
routes/api.php
Route::get('/me', [AuthController::class, 'me'])->middleware('auth:sanctum');
sanctumガードを使用することでエンドポイントのリクエストのヘッダーに有効なAPIトークンが含まれるようになります。
AuthControllerには以下のメソッドを追加します。
public function me(Request $request)
{
return $request->user();
}
またAPIをテストする前に、app/Providers/RouteServiceProvider.phpの以下のコメントを解除してください。
protected $namespace = 'App\\Http\\Controllers';
APIをテストする
Laravel+Homesteadで環境構築しており、/etc/hosts でipアドレスを以下のように設定しているため
192.168.30.10 project01.test
APIにはhttp://project01.test/apiからアクセスします。
そこまで構築するのがめんどくさい場合は php artisan serveコマンドでサーバーを起動させ "http://127.0.0.1:8000/api" でアクセスするとよいと思います。
今回はVSCodeの拡張機能のThunder Client を使用します。
marketplace.visualstudio.com
VSCode にインストール後左に表示されるアイコン -> New Requestをクリックしたら始めることができます。

ユーザー登録をする
[POST] http://project01.test/api/register?name=yamada&email=xxx@mail.com&password=pAssw0rd
http://project01.test/api/register宛にname, email, passwordを含むPOSTリクエストを作成します。パスワードは8文字以上必要です。

ログインする
emailとpasswordを入力し、http://project01.test/api/loginにPOSTリクエストを行います。
[POST] http://project01.test/api/login?email=xxx@mail.com&password=pAssw0rd

仮に間違ったemailやpasswordをパラメーターで渡すと、"message": "User Not Found"と返ってきます。

/meにアクセスする
ここで返ってきたaccess_tokenをAuth のBearerに入力します。
[GET] http://project01.test/api/me
有効なトークンなため認証されたユーザー情報が返ってきました。
無効なトークンを入力すると500エラーが返ってきます。
参考サイト
Laravel SanctumでPHPのRESTful APIを構築する
おまけ
createToken()で第一引数に名前をつける必要性ってなんだろうと思いました。 軽く調べたところ
ウェブ用とモバイルアプリ用の2種類のトークンがあり、それぞれの種類の有効期限が異なる場合は、「ウェブトークン」や「モバイル」などの特定の名前で各種類をグループ化できます。
だそうです。
PHP5.6をCentOS7+docker+CakePHP2 の環境にインストールしたい
Dockerfileで
RUN yum install -y --enablerepo=remi,remi-php56
としているのにPHP5.4がインストールされてしまう。
以下のサイトにあるように、yum-utilsをインストールしてyum-config-managerコマンドでバージョンを指定したげると良いです。
PHP5.xをCentOS7にインストールする - suzu6の技術ブログ
Dockerfile
FROM centos:centos7.3.1611
## Package
RUN yum install -y \
deltarpm \
sudo \
unzip \
git \
iputils \
procps \
openssh-server \
httpd \
mod_ssl \
mariadb
## remi
RUN yum install -y epel-release
RUN yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# デフォルトだと5.4をインストールしてしまう
# php5.6リポジトリの有効化
RUN yum install -y yum-utils
RUN yum-config-manager --enable remi-php56
# php5.6のインストール
RUN yum -y install php \
php-mbstring \
php-xml \
php-pear \
php-cli \
php-common \
php-devel \
php-fpm \
php-gd \
php-intl \
php-mcrypt \
php-mysqlnd \
php-opcache \
php-pdo \
php-pecl-igbinary \
php-pecl-jsonc \
php-pecl-jsonc \
php-pecl-redis \
php-pecl-zip \
php-process \
&& yum clean all
PHP5.6がインストールできた
[root@project-local /]# php -v
PHP 5.6.40 (cli) (built: Nov 15 2021 11:30:01)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
CakePHP4 クイックスタート
プロジェクト作成
php composer.phar create-project --prefer-dist cakephp/app:4.1 cms
バージョンを指定せずに app:4.* とするとエラーになる
エラー1
Exception: Argument 1 passed to Cake\Utility\Security::setSalt() must be of the type string, null given, called in /Users/xxxx/cms/config/bootstrap.php on line 164
config/app.php のSecurityのenvの第二引数に32文字以上のランダムな文字を入れておけばよい。
'Security' => [
'salt' => env('SECURITY_SALT', 'dfc123c6c22d84f4bc12273f3df67c6ae55009696e4126b36ac2f755778faccc'),
],
XAMPP環境にCakePHP4インストール時に起きたエラーと解決方法 | 417.Run()
エラー2
PHP Warning: require(/Users/xxxx/cms/vendor/autoload.php): failed to open stream: No such file or directory in /Users/xxxx/cms/bin/cake.php on line 5
CakePHP プロジェクト内にある vender フォルダに必要なファイルがインストールされていないことが原因です。 composerのアップデートをしましょう。
[~/cms]$ composer update
CakePHP3インストール時によく起こるエラーの解決法まとめ
サーバー起動
[~/cms]$ bin/cake server Welcome to CakePHP v4.3.4 Console ------------------------------------------------------------------------------- App : src Path: /Users/xxxx/cms/src/ DocumentRoot: /Users/xxxx/cms/webroot Ini Path: ------------------------------------------------------------------------------- built-in server is running in http://localhost:8765/ You can exit with `CTRL-C`
一番最初の画面で表示されるエラー
Please replace templates/Pages/home.php with your own version or re-enable debug mode.
以下のようなコードがテンプレートファイルに入っていると404エラーになります。
if (!Configure::read('debug')):
throw new NotFoundException('Please replace src/Template/Pages/home.ctp with your own version.');
endif;
コメントアウトすると

Laravel 8.x + Homestead で仮想環境を作る
昨日* 環境構築手順
- Homesteadは、Laravel が動作する開発環境を簡単に構築できるツールです。
- VagrantとはVirtualBoxなどを利用した仮想環境を作る便利なソフトウェアです。
- Laravel Homesteadは、PHP、Webサーバー、その他のサーバーソフトウェアをローカルマシンにインストールしなくても開発環境を構築することができる公式のVagrant Boxです。
- Vagrant Boxとは、仮想マシンのテンプレートとなるファイルです。
参考サイト
【Laravel 5.5 or latest】Homestead で mac に Laravel 開発環境を構築 - Qiita
Laravel公式でもHomesteadを使用しての環境構築手順を公開しています。
Laravel Homestead - Laravel - The PHP Framework For Web Artisans
virtualbox, vagrantはインストール済みとして進めます。
ディレクトリ構造
/Users/user_name/ ├ Homestead/ └ code/ └ project01/
laravel/homestead boxをインストール
laravel/homesteadという名前のboxファイルがインストールされます。
[~]$ vagrant box add laravel/homestead [~]$ vagrant box list laravel/homestead (virtualbox, 11.4.0)
Homesteadをインストール
ユーザーディレクトリの直下にインストールします。
[~]$ git clone https://github.com/laravel/homestead.git ~/Homestead
Homestead.yaml を作成します
[~]$ cd ~/Homestead [~/Homestead]$ bash init.sh Homestead initialized!
SSHキーの設定はやっているとみて飛ばします。
Homestead.yaml の設定
---
ip: "192.168.30.10" <- 書き換えた所
memory: 2048
cpus: 1
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
folders:
- map: ~/code
to: /home/vagrant/code
sites:
- map: project01.test <- 書き換えた所
to: /home/vagrant/code/project01/public <- 書き換えた所
databases:
- project01 <- 書き換えた所
# ports:
# - send: 50000
# to: 5000
# - send: 7777
# to: 777
# protocol: udp
# blackfire:
# - id: foo
# token: bar
# client-id: foo
# client-token: bar
# zray:
# If you've already freely registered Z-Ray, you can place the token here.
# - email: foo@bar.com
# token: foo
# Don't forget to ensure that you have 'zray: "true"' for your site.
hostsファイルの設定
ブラウザからアクセスできるよう設定します。
[~/Homestead]$ sudo vi /etc/hosts
以下を追記
192.168.30.10 project01.test
仮想マシン起動前のプラグインインストール
- vagrant-vbguest
起動時に自動的にホスト(VirtualBox)のバージョンに合わせて、ゲスト(Guest Additions)のバージョンを更新してくれるものです。
- Vagrant host manager
作成した仮想マシンとホストPCの/etc/hostsを自動で書き換えてくれるプラグインです。
[~/Homestead]$ vagrant plugin update [~/Homestead]$ vagrant plugin install vagrant-vbguest [~/Homestead]$ vagrant plugin install vagrant-hostmanager
仮想マシンにログイン
[~/Homestead]$ vagrant ssh Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-88-generic x86_64) _ _ _ | | | | | | | |__ ___ _ __ ___ ___ ___| |_ ___ __ _ __| | | '_ \ / _ \| '_ ` _ \ / _ \/ __| __/ _ \/ _` |/ _` | | | | | (_) | | | | | | __/\__ \ || __/ (_| | (_| | |_| |_|\___/|_| |_| |_|\___||___/\__\___|\__,_|\__,_| * Homestead v12.6.1 | Thanks for using Homestead * Settler v11.4.0 Last login: Sun Oct 17 09:47:50 2021 from 10.0.2.2 vagrant@homestead:~$
ls で中を見ると/codeディレクトリがありました。
vagrant@homestead:~$ ls code
仮想マシン上でComposerとLaravel プロジェクトをダウンロードする
vagrant@homestead:~/code$ composer create-project laravel/laravel project01
ローカル環境にもproject01ディレクトリが作成されていれば成功です。
/etc/hosts に記述した、http://project01.test/にアクセスしたらLaravelのwelcomeページが表示されているはずです。
MySQL にログイン
vagrant@homestead:~/code$ mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.26-0ubuntu0.20.04.3 (Ubuntu) Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use project01 Database changed
無事MySQLにもログインできました。
マイグレーションファイルを流す
envファイルの設定
DBの設定を以下に変更します。
DB_CONNECTION=mysql DB_HOST=192.168.30.10 <- 書き換えた所 DB_PORT=3306 DB_DATABASE=project01 <- 書き換えた所 DB_USERNAME=homestead <- 書き換えた所 DB_PASSWORD=secret <- 書き換えた所
Homestead.yamlのIP を 192.168.30.10 に変更した場合は、192.168.30.10 としてください。
またDB_USERNAME, DB_PASSWORDを上記のように設定しないと以下のようなエラーが出てしまいます。
SQLSTATE[HY000] [1045] Access denied for user 'root'@'homestead' (using password: YES) (SQL: select * from information_schema.tables where table_schema = project01 and table_name = migrations and table_type = 'BASE TABLE')
マイグレーション実行
vagrant@homestead:~/code/project01$ php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (28.45ms) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (30.07ms) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (53.51ms) Migrating: 2019_12_14_000001_create_personal_access_tokens_table Migrated: 2019_12_14_000001_create_personal_access_tokens_table (35.37ms)
テーブルが作成されました。
mysql> show tables; +------------------------+ | Tables_in_project01 | +------------------------+ | failed_jobs | | migrations | | password_resets | | personal_access_tokens | | users | +------------------------+ 5 rows in set (0.00 sec)