- vetは
curl | bash 方式のリモートインストールスクリプト実行を 「ダウンロード→レビュー→実行承認」プロセスへ安全に変換するCLIツール
- スクリプト変更履歴のdiff確認、shellcheckベースのlint(静的解析)、手動承認(確認後に実行)など、段階的な防御機能を提供
- 単一コマンド(
vet https://example.com/install.sh)で、リモートスクリプト実行前に 潜在的なリスク・改ざん・タイプミス・脆弱性を自動点検可能
- インストール自体も「ダウンロード後にレビュー」方式と「curl | sh」方式の両方に対応しており、vet自体のインストールコードも直接確認可能
- 開発/運用環境におけるセキュリティリスクの予防と自動化/利便性を同時に確保できる信頼性の高いソリューション
問題点: 無分別なリモートインストールスクリプト実行
- 多くのオープンソースやツールが、
curl -sSL https://example.com/install.sh | bash のようなリモートスクリプトによるインストール方法を案内している
- この方式には、スクリプト改ざん、サーバーハッキング、ネットワーク障害などによって 悪意あるコードの実行や不完全なファイル実行などの致命的なセキュリティリスクが存在する
vetのソリューション: 安全な対話型実行
インストール方法
安全な推奨方式(ダウンロード → レビュー → 実行)
- 1. インストールスクリプトをダウンロード:
- 2. ダウンロードしたスクリプトのコードを自分でレビュー(less、vimなどで確認):
less install_vet.sh
- 3. レビュー後に直接実行:
sh install_vet.sh
クイックインストール(信頼ベースのワンライナー)
vetの特徴と利点
- 変更検知(diff): 以前に実行したスクリプトと比較して、新しく変わった部分を確認できる
- 自動lint(shellcheck連携): シェルスクリプトの脆弱性・タイプミス・疑わしいコードを自動診断
- 明示的な実行承認(Confirm): 1回のクリック/入力で実際の実行を直接コントロール
- スクリプト自動保存・履歴管理: よく使うインストールスクリプトも安全に追跡可能
- 内部的に安全なインストール/アップデートも保証
結論
- vetは 開発者・運用担当者の双方に必要な「curl | bash」の安全な代替手段であり、インストール自動化とセキュリティの両立を実現する
- 「そのまま実行せず、vetで検証してから実行しましょう!」
1件のコメント
Hacker Newsのコメント
# shellcheck disable=プラグマを延々と差し込んだらどうなるのか気になる# shellcheck disable=コードの挿入を検出できる。その変更自体が警告サインになるVET_TOKEN環境変数、将来的には HashiCorp Vault のようなシークレットマネージャとの連携までロードマップに入れている。興味があれば GitHub issue で意見を聞かせてほしい。フィードバックありがとうcurl | bashパターンのように自動では動かない点が惜しい。Windows には、ユーザーがインストールしようとすると自動でファイルをスキャンしてくれる機能があるcurl | bashパターンに不安を感じていて、スクリプトが変更されたときに diff を見せ、shellcheck を走らせ、ユーザーの明示的な許可を求めるツールが必要だと感じた。そこで vet を作った。インストールも同じ原則を適用している。インストールスクリプトはぜひ読んでほしい。フィードバック歓迎。repo は https://github.com/vet-run/vetwget -qO- https://getvet.shで落とすと、サーバーはtext/htmlを返している)。むしろ install.sh を直接取ることを勧めたい。フィードバックへの返答としては、「こういうふうにやってみては」という bash の小技を共有する: この方式では、bash が何かを実行しようとするたびに許可を求める。長いスクリプトでは煩雑になりうるので、安全だと思うコマンドをホワイトリスト化したり、"remember" オプションでカスタムしたりできる。sudo に関しては、マルウェアは無害そうなコマンドで先に sudo を実行して認証情報をキャッシュさせ、後から何の警告もなく再び sudo コマンドを実行する手口を使える。sudo -kでセッションキャッシュを消してから、未知のプログラムを実行するのが安全