[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ssh-Schlüsselpaar auf Dateizugiff in ein spezifisches Directory beschränken
[Thread Prev] | [Thread Next]
- Subject: Re: ssh-Schlüsselpaar auf Dateizugiff in ein spezifisches Directory beschränken
- From: Marc Haber <mh+uugrn@xxxxxxxxxxxx>
- Date: Sat, 7 Sep 2024 15:08:05 +0200
- To: UUGRN Mailingliste <uugrn@xxxxxxxxx>
On Sat, Sep 07, 2024 at 02:37:41PM +0200, Michael Lestinsky wrote: > hat hier evtl. jemand eine Idee, wie man ein ssh-Schlüsselpaar in seiner > ssh/authorized_keys soweit beschränken kann, dass damit nur noch > Dateiaustausch (wahlweise rsync oder sshfs, ich kann mich da anpassen) aus > einem ganz bestimmten Verzeichnis möglich ist? > > Eine Einschränkung wäre, dass der sshd auf Debian Buster läuft und folglich > Versionsstand 7.9 hat und ich dort nur normale Userrechte besitze. Du kannst einen Schlüssel in der authorized_keys auf ein bestimmtes Kommando festnageln. Ich mache das gerne so: from="(liste von IP-Adressen, optional)",command="/path/to/ssh-forced-command some-key-ID" Die Dokumentation dazu findet sich in man sshd. Interessant ist, dass das dem ssh-Client mitgegebene Kommando in $SSH_ORIGINAL_COMMAND hinterlegt wird und somit ausgewertet werden kann. Das command wird mit einer shell ausgeführt, kann also Parameter aus authorized_keys erhalten. Hier ein Script das ich dazu gerne verwende: /path/to/ssh-forced-command: #!/bin/bash KEY="$1" PATH="/usr/sbin:/usr/bin:/sbin:/bin" me=$(basename "$0") logger -t "$0" "called with [$KEY] $SSH_ORIGINAL_COMMAND" FQDN="$(hostname --fqdn)" cmd() { logger -p user.info -t "$me $KEY" -- "$@" "$@" } execute-all() { KEY="$KEY execute-all" case "$SSH_ORIGINAL_COMMAND" in *) cmd "$SSH_ORIGINAL_COMMAND";; esac } illegal-command() { echo "$me@$(hostname): illegal command $SSH_ORIGINAL_COMMAND" logger -p user.err -t "$me $KEY" -- "ignoring illegal command $SSH_ORIGINAL_COMMAND" exit 1 } mh-hostmaster-torres-ppl() { if echo "$SSH_ORIGINAL_COMMAND" | grep -E --quiet "^${FQDN} rsync --server -v?log?D?t?pre\.iLs?f?x?C?I?v?u? --delete . /etc/bind/?"; then cmd rsync --server -loDpre.iLsf --delete . /etc/bind/ elif [ "$SSH_ORIGINAL_COMMAND" = "mkbinddirs" ]; then cmd /etc/bind/scripts/mkbinddirs elif [ "$SSH_ORIGINAL_COMMAND" = "rndc reload" ]; then cmd /usr/sbin/rndc reload else illegal-command fi } case $KEY in mh-hostmaster-torres-ppl) mh-hostmaster-torres-ppl ;; *) echo "$me@$(hostname): illegal key $KEY presented" logger -p user.err -t "$me" -- "ignoring illegal key $KEY" exit 1 ;; esac Hier sieht man also, dass ssh user@host rsync (mit auf die Regexp passenden Parametern) das genannte hartcodierte rsync-Kommando auslöst (das u.a. den Zugriff auf /etc/bind beschränkt) und die beiden Kommandos mkbinddirs und rndc reload die entsprechenden Aktionen auslösen. Alles andere führt zu einer Ausgabe am Client und einer geloggten Fehlermeldung. Die Funktion "execute-all" kann man in der Findungsphase einem Key zuweisen, da ist dann alles erlaubt und wird geloggt, so dass man die dazu passende Regexp bauen kann, wenn man das so komplex machen Und jetzt wo ich das alles niedergeschrieben habe und dachte, daraus könnte man eigentlich einen Blogartikel machen, fällt mir auf, dass ich darüber 2017 bereits gebloggt HABE. Hrmph. https://blog.zugschlus.de/archives/982-Login-als-technischer-User-mit-ssh-forced-commands.html Grüße Marc -- ----------------------------------------------------------------------------- Marc Haber | "I don't trust Computers. They | Mailadresse im Header Leimen, Germany | lose things." Winona Ryder | Fon: *49 6224 1600402 Nordisch by Nature | How to make an American Quilt | Fax: *49 6224 1600421 -- Unix User Group Rhein-Neckar e.V.: https://www.uugrn.org Archiv und An-/Abmeldung: https://mail2.uugrn.org Social Media: https://social.uugrn.org
Re: ssh-Schlüsselpaar auf Dateizugiff in ein spezifisches Directory beschränken | Michael Lestinsky <michael@xxxxxxxxxxxx> |
ssh-Schlüsselpaar auf Dateizugiff in ein spezifisches Directory beschränken | Michael Lestinsky <michael@xxxxxxxxxxxx> |