0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Remote Developmentで「Manage Unsafe Repositories」が表示される

Posted at

概要

WSL2でRemote Developmentを利用して、コンテナにアタッチしつつVSCodeを開いた際、サイドバーからGitを利用を試みると、Manage Unsafe Repositoriesと記載されたボタンが表示される場合の対策を記載します。

要するにリポジトリの所有者とコンテナ内での実行ユーザーが異なるせいで出ている警告なので、実行ユーザーをリポジトリ所有者に合わせるようDockerfileを変更すればOK。他にも解決手法があるので、併せて記載します。

現象:リポジトリがUnsafeやぞ、ってやんわり怒られる

コンテナをビルドしてReopen in Containerした際、サイドバーからGitを利用を試みると、Manage Unsafe Repositoriesと記載されたボタンが表示されます。
image.png

ボタンをクリックすると、画面上部に「安全なものとして扱い、開くリポジトリを指定しろ」といってリポジトリ選択UIが開きます。クリックすると、Gitによるソース差分確認機能等が使えるようになります。

ボタンをクリックすれば使えるは使えるけど、コンテナのビルドする度に復活するし、Unsafeとか言われると気分がよくないので、何とかしていきます。

原因:リポジトリの所有者とコンテナ内での実行ユーザーが異なるせい

以下例は、コンテナ内のルートディレクトリでls -alを実行した結果です。リポジトリの所有者はnodeになっていますが、コンテナの実行ユーザーはrootになっています。(ターミナルの実行ユーザーとして表示されているほか、whoamiコマンドでも実行ユーザーの確認ができる)
image.png

VSCodeのドキュメントによると以下の通り記載があり、リポジトリの所有者と実行ユーザーが食い違うせいであることが分かります。

VS Code uses git.exe for executing all Git operations. Starting with Git 2.35.2, users are prevented from running Git operations in a repository that is in a folder that owned by a user other than the current user as the repository is deemed to be potentially unsafe.If you try to open such a repository, VS Code will show a welcome view in the Source Control view or an error notification.
(VSCodeはすべてのGit操作を実行するためにgit.exeを使用します。Git 2.35.2以降、現在のユーザー以外のユーザーが所有するフォルダ内にあるリポジトリでGit操作を実行することが禁止されています。これは、そのリポジトリが潜在的に安全でないと見なされるためです。このようなリポジトリを開こうとすると、VSCodeはソース管理ビューにウェルカムビューを表示するか、エラー通知を表示します。)
(中略)
Marking a repository as safe will add the repository location to the safe.directory git configuration.
(リポジトリを安全としてマークすると、そのリポジトリの場所がGitのsafe.directory設定に追加されます。)

(Visual Studio Code "Source Control FAQ")

ちなみに、リポジトリの所有者をコンテナ内ではなくWSL2側で確認すると、nodeなどコンテナのユーザーではなく、WSL2の実行ユーザーになる(ubuntuとか) これは、WSL2側でGit cloneしたユーザーと一致します。今回のケースはコンテナ内の実行ユーザーの問題なので、ここは気にする必要なしです。

対策

正攻法:コンテナ内実行ユーザーをリポジトリの所有者に合わせる

シンプルにDockerfileにて実行ユーザーをrootから変更すればOK。そもそも、コンテナ内の実行ユーザーをrootにすることは、セキュリティ上推奨されなかったはず(攻撃者がコンテナに入ったときに、サービス稼働に必要な権限以上に実行できる範囲が増えてしまう)

以下、Dockerfileの一例。

FROM node:18.19.0
USER node # この行がpoint!
WORKDIR /workspaces
WORKDIR /app
EXPOSE 4200

COPY package.json* package-lock.json* ./

RUN npm ci

ENTRYPOINT [ "npm", "run", "start", "--", "--host" , "0.0.0.0" ]

当然、コンテナで利用するイメージによって、指定するユーザーが誰かは変わるので都度確認してください。

Dockerfileを編集してコンテナをリビルド、Reopen in Containerすれば、リポジトリはUnsafeになっているはず。

他の方法

Unsafeな状態なのを受け入れつつ「いいからやれよ!」ってVSCodeに教えてあげる方法。Unsafeなままであることに変わりないので、あくまでも先述の実行ユーザー変更による対策を推奨としますが、、

リポジトリを安全なものとして登録する

WSL2側のターミナルなり、devcontainer.jsonなりで、git configコマンドから対象リポジトリを安全なものとして登録します。

devcontainer.jsonで設定する場合、以下のように記載します。コンテナが作成された後にgit configが走r。

{
    "postCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?