diff options
| author | 2025-10-19 11:25:21 +0200 | |
|---|---|---|
| committer | 2025-10-19 11:25:21 +0200 | |
| commit | 40fa1d2fbd1e5feb9e0f8228288c9fb5e031932d (patch) | |
| tree | f303d9f8ca98da8f37115ad780e62afe7295e277 /init | |
| parent | 69ce1bb94cbf651327bee1cc10157b578c88a279 (diff) | |
It works, permission check missing
Diffstat (limited to 'init')
| -rwxr-xr-x | init | 54 |
1 files changed, 54 insertions, 0 deletions
@@ -0,0 +1,54 @@ +#!/usr/bin/env fish + +argparse 'u/users=+' 'r/repos=+' -- $argv +or exit 1; + +# setup git user +adduser git -D --shell "/usr/bin/git-shell" + +# create users and copy keys in correct location, set permissions +for user in (string split ',' $_flag_u) + echo "Setting up user: $user" + if [ "$user" = git ] + echo "Denied because user git is reserved" + continue + end + + set -l HOME "/home/$user" + # user is not restricted, this is done in ssh config with forceCommand + # we need to be able to run a fish script to check for permissions + adduser --home $HOME -D "$user" + passwd -u "$user" + mkdir "$HOME/.ssh" + cp "/var/keys/$user/authorized_keys" "$HOME/.ssh/" + chown -R $user "$HOME" + chmod -R 700 "$HOME" +end + +for repoConfig in (string split ',' $_flag_r) + set -l parsedConfig (string split ':' $repoConfig) + set -l repo $parsedConfig[1] + + # we assume all repos to be in /srv/repos + set -l repoDir "/srv/repos/$repo.git" + echo "Setting up repo: $repo" + + # write user as allowed into permission file + for user in $parsedConfig[2..] + echo "$repo:$user" >> /srv/repos/permissions + end + + # setup repo dir + if not test -d $repoDir + mkdir -p $repoDir + git init --bare $repoDir -b trunk + end + chown -R git:git "$repoDir" + chmod -R 700 "$repoDir" +end + +echo "Setting up server" +# generate host keys in case +mkdir -p /var/keys/etc/ssh/ && ssh-keygen -A -f /var/keys +# run ssh daemon +/usr/sbin/sshd -D -e |
