diff options
| author | prospanclaudebot <[email protected]> | 2026-07-10 22:10:31 +0000 |
|---|---|---|
| committer | prospanclaudebot <[email protected]> | 2026-07-10 22:10:31 +0000 |
| commit | 966b62d9bd7e483f1e9484a5a99d8c2db475171c (patch) | |
| tree | df3a27730963d68d515272b4246dc79d96945744 /ssh/git-ns | |
| download | pacan-git-966b62d9bd7e483f1e9484a5a99d8c2db475171c.tar.gz pacan-git-966b62d9bd7e483f1e9484a5a99d8c2db475171c.zip | |
Diffstat (limited to 'ssh/git-ns')
| -rwxr-xr-x | ssh/git-ns | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/ssh/git-ns b/ssh/git-ns new file mode 100755 index 0000000..f8b6b0b --- /dev/null +++ b/ssh/git-ns @@ -0,0 +1,25 @@ +#!/bin/sh +# Форс-команда из authorized_keys: command="git-ns <namespace>". +# Пускает пользователя только в git-операции над репозиториями ЕГО неймспейса. +NS="$1" +REPOS="${REPOS_DIR:-/repos}" +set -- $SSH_ORIGINAL_COMMAND +cmd="$1" +repo=$(printf '%s' "$2" | tr -d "'\"") +repo="${repo#/}" +case "$cmd" in + git-receive-pack|git-upload-pack|git-upload-archive) ;; + *) echo "разрешены только git-команды" >&2; exit 1 ;; +esac +# без слеша -> свой неймспейс +case "$repo" in + */*) ;; + *) repo="$NS/$repo" ;; +esac +# запрет выхода в чужой неймспейс +case "$repo" in + "$NS/"*) ;; + *) echo "чужой неймспейс запрещён" >&2; exit 1 ;; +esac +repo="${repo%/}" +exec git-shell -c "$cmd '$REPOS/$repo'" |
